From 0fb1627c1db412000fecfa42ee3d61bac10e80a2 Mon Sep 17 00:00:00 2001 From: dtrg Date: Tue, 24 Apr 2007 23:46:59 +0000 Subject: [PATCH] Completely rewrote the website. --- .project | 11 + build | 47 + dat/alert-big.png | Bin 0 -> 2302 bytes dat/lua-big.png | Bin 0 -> 11083 bytes dat/lua.gif | Bin 0 -> 5408 bytes src/about.i | 262 + src/alert.png | Bin 0 -> 1354 bytes src/background.png | Bin 0 -> 2168 bytes src/contents.js | 9 + src/contents.xml | 4 + src/global.css | 260 + src/global.js | 61 + src/index-leaf.png | Bin 0 -> 125 bytes src/index-parent.png | Bin 0 -> 125 bytes src/index.i | 147 + src/logo.png | Bin 0 -> 8604 bytes src/logo.svg | 213 + src/lua.png | Bin 0 -> 2039 bytes src/olddocs.i | 188 + src/olddocs/6500.html | 2168 +++++ src/olddocs/6500.pdf | Bin 0 -> 67952 bytes src/olddocs/LLgen.html | 1166 +++ src/olddocs/LLgen.pdf | Bin 0 -> 110124 bytes src/olddocs/ack.html | 1353 ++++ src/olddocs/ack.pdf | Bin 0 -> 37936 bytes src/olddocs/ansi_C.html | 1254 +++ src/olddocs/ansi_C.pdf | Bin 0 -> 32598 bytes src/olddocs/basic.html | 3850 +++++++++ src/olddocs/basic.pdf | Bin 0 -> 55643 bytes src/olddocs/ceg.html | 1917 +++++ src/olddocs/ceg.pdf | Bin 0 -> 86871 bytes src/olddocs/cg.html | 4597 +++++++++++ src/olddocs/cg.pdf | Bin 0 -> 84329 bytes src/olddocs/crefman.html | 1410 ++++ src/olddocs/crefman.pdf | Bin 0 -> 54125 bytes src/olddocs/ego.html | 9470 ++++++++++++++++++++++ src/olddocs/ego.pdf | Bin 0 -> 512595 bytes src/olddocs/em.html | 12846 ++++++++++++++++++++++++++++++ src/olddocs/em.pdf | Bin 0 -> 194114 bytes src/olddocs/grohtml-100191.png | Bin 0 -> 1908 bytes src/olddocs/grohtml-100601.png | Bin 0 -> 3105 bytes src/olddocs/grohtml-100602.png | Bin 0 -> 752 bytes src/olddocs/grohtml-101091.png | Bin 0 -> 1176 bytes src/olddocs/grohtml-101092.png | Bin 0 -> 2277 bytes src/olddocs/grohtml-101093.png | Bin 0 -> 1964 bytes src/olddocs/grohtml-101094.png | Bin 0 -> 13618 bytes src/olddocs/grohtml-101481.png | Bin 0 -> 12937 bytes src/olddocs/grohtml-101482.png | Bin 0 -> 7764 bytes src/olddocs/grohtml-101483.png | Bin 0 -> 740 bytes src/olddocs/grohtml-101484.png | Bin 0 -> 1348 bytes src/olddocs/grohtml-101485.png | Bin 0 -> 2644 bytes src/olddocs/grohtml-101486.png | Bin 0 -> 2279 bytes src/olddocs/grohtml-101487.png | Bin 0 -> 561 bytes src/olddocs/grohtml-101488.png | Bin 0 -> 1967 bytes src/olddocs/grohtml-101489.png | Bin 0 -> 1924 bytes src/olddocs/grohtml-102111.png | Bin 0 -> 1988 bytes src/olddocs/grohtml-102411.png | Bin 0 -> 1730 bytes src/olddocs/grohtml-102412.png | Bin 0 -> 1040 bytes src/olddocs/grohtml-102413.png | Bin 0 -> 2836 bytes src/olddocs/grohtml-102721.png | Bin 0 -> 1814 bytes src/olddocs/grohtml-1027210.png | Bin 0 -> 2881 bytes src/olddocs/grohtml-1027211.png | Bin 0 -> 6696 bytes src/olddocs/grohtml-1027212.png | Bin 0 -> 1085 bytes src/olddocs/grohtml-1027213.png | Bin 0 -> 1105 bytes src/olddocs/grohtml-1027214.png | Bin 0 -> 7218 bytes src/olddocs/grohtml-1027215.png | Bin 0 -> 1058 bytes src/olddocs/grohtml-1027216.png | Bin 0 -> 1867 bytes src/olddocs/grohtml-1027217.png | Bin 0 -> 2608 bytes src/olddocs/grohtml-1027218.png | Bin 0 -> 2262 bytes src/olddocs/grohtml-1027219.png | Bin 0 -> 2898 bytes src/olddocs/grohtml-102722.png | Bin 0 -> 822 bytes src/olddocs/grohtml-1027220.png | Bin 0 -> 2430 bytes src/olddocs/grohtml-1027221.png | Bin 0 -> 3496 bytes src/olddocs/grohtml-1027222.png | Bin 0 -> 1451 bytes src/olddocs/grohtml-1027223.png | Bin 0 -> 4727 bytes src/olddocs/grohtml-1027224.png | Bin 0 -> 1867 bytes src/olddocs/grohtml-1027225.png | Bin 0 -> 1013 bytes src/olddocs/grohtml-1027226.png | Bin 0 -> 1010 bytes src/olddocs/grohtml-1027227.png | Bin 0 -> 792 bytes src/olddocs/grohtml-1027228.png | Bin 0 -> 1982 bytes src/olddocs/grohtml-1027229.png | Bin 0 -> 1601 bytes src/olddocs/grohtml-102723.png | Bin 0 -> 2365 bytes src/olddocs/grohtml-1027230.png | Bin 0 -> 1636 bytes src/olddocs/grohtml-1027231.png | Bin 0 -> 2961 bytes src/olddocs/grohtml-1027232.png | Bin 0 -> 3637 bytes src/olddocs/grohtml-1027233.png | Bin 0 -> 2855 bytes src/olddocs/grohtml-1027234.png | Bin 0 -> 1864 bytes src/olddocs/grohtml-1027235.png | Bin 0 -> 1083 bytes src/olddocs/grohtml-1027236.png | Bin 0 -> 1486 bytes src/olddocs/grohtml-1027237.png | Bin 0 -> 1560 bytes src/olddocs/grohtml-1027238.png | Bin 0 -> 1681 bytes src/olddocs/grohtml-1027239.png | Bin 0 -> 1633 bytes src/olddocs/grohtml-102724.png | Bin 0 -> 1614 bytes src/olddocs/grohtml-102725.png | Bin 0 -> 2253 bytes src/olddocs/grohtml-102726.png | Bin 0 -> 7038 bytes src/olddocs/grohtml-102727.png | Bin 0 -> 7868 bytes src/olddocs/grohtml-102728.png | Bin 0 -> 10947 bytes src/olddocs/grohtml-102729.png | Bin 0 -> 5748 bytes src/olddocs/grohtml-105631.png | Bin 0 -> 13812 bytes src/olddocs/grohtml-105632.png | Bin 0 -> 10972 bytes src/olddocs/grohtml-105633.png | Bin 0 -> 15316 bytes src/olddocs/grohtml-105634.png | Bin 0 -> 15188 bytes src/olddocs/grohtml-106061.png | Bin 0 -> 738 bytes src/olddocs/grohtml-106062.png | Bin 0 -> 1732 bytes src/olddocs/grohtml-106063.png | Bin 0 -> 9244 bytes src/olddocs/grohtml-106064.png | Bin 0 -> 16506 bytes src/olddocs/grohtml-106561.png | Bin 0 -> 3826 bytes src/olddocs/grohtml-1065610.png | Bin 0 -> 6746 bytes src/olddocs/grohtml-1065611.png | Bin 0 -> 17399 bytes src/olddocs/grohtml-1065612.png | Bin 0 -> 3744 bytes src/olddocs/grohtml-1065613.png | Bin 0 -> 6726 bytes src/olddocs/grohtml-1065614.png | Bin 0 -> 4333 bytes src/olddocs/grohtml-106562.png | Bin 0 -> 5565 bytes src/olddocs/grohtml-106563.png | Bin 0 -> 25421 bytes src/olddocs/grohtml-106565.png | Bin 0 -> 4838 bytes src/olddocs/grohtml-106566.png | Bin 0 -> 23310 bytes src/olddocs/grohtml-106567.png | Bin 0 -> 5517 bytes src/olddocs/grohtml-106568.png | Bin 0 -> 1911 bytes src/olddocs/grohtml-106569.png | Bin 0 -> 10726 bytes src/olddocs/grohtml-107771.png | Bin 0 -> 8386 bytes src/olddocs/grohtml-107772.png | Bin 0 -> 2750 bytes src/olddocs/grohtml-107773.png | Bin 0 -> 2399 bytes src/olddocs/grohtml-96851.png | Bin 0 -> 1426 bytes src/olddocs/grohtml-96852.png | Bin 0 -> 15002 bytes src/olddocs/grohtml-96853.png | Bin 0 -> 5529 bytes src/olddocs/grohtml-96854.png | Bin 0 -> 3159 bytes src/olddocs/grohtml-96855.png | Bin 0 -> 6096 bytes src/olddocs/grohtml-96856.png | Bin 0 -> 11557 bytes src/olddocs/grohtml-96857.png | Bin 0 -> 14551 bytes src/olddocs/grohtml-97441.png | Bin 0 -> 3030 bytes src/olddocs/grohtml-974410.png | Bin 0 -> 6106 bytes src/olddocs/grohtml-974411.png | Bin 0 -> 4803 bytes src/olddocs/grohtml-974412.png | Bin 0 -> 1201 bytes src/olddocs/grohtml-974413.png | Bin 0 -> 11659 bytes src/olddocs/grohtml-974414.png | Bin 0 -> 6931 bytes src/olddocs/grohtml-974415.png | Bin 0 -> 5445 bytes src/olddocs/grohtml-974416.png | Bin 0 -> 17142 bytes src/olddocs/grohtml-974418.png | Bin 0 -> 21201 bytes src/olddocs/grohtml-974419.png | Bin 0 -> 11046 bytes src/olddocs/grohtml-97442.png | Bin 0 -> 1627 bytes src/olddocs/grohtml-974420.png | Bin 0 -> 4495 bytes src/olddocs/grohtml-97443.png | Bin 0 -> 3397 bytes src/olddocs/grohtml-97444.png | Bin 0 -> 3242 bytes src/olddocs/grohtml-97445.png | Bin 0 -> 3213 bytes src/olddocs/grohtml-97446.png | Bin 0 -> 6758 bytes src/olddocs/grohtml-97447.png | Bin 0 -> 2378 bytes src/olddocs/grohtml-97448.png | Bin 0 -> 1139 bytes src/olddocs/grohtml-97449.png | Bin 0 -> 2617 bytes src/olddocs/grohtml-99071.png | Bin 0 -> 1783 bytes src/olddocs/grohtml-99261.png | Bin 0 -> 1846 bytes src/olddocs/grohtml-99451.png | Bin 0 -> 3546 bytes src/olddocs/grohtml-99452.png | Bin 0 -> 1739 bytes src/olddocs/grohtml-99453.png | Bin 0 -> 6807 bytes src/olddocs/grohtml-99454.png | Bin 0 -> 6964 bytes src/olddocs/grohtml-99455.png | Bin 0 -> 5563 bytes src/olddocs/grohtml-99456.png | Bin 0 -> 4431 bytes src/olddocs/grohtml-99457.png | Bin 0 -> 4330 bytes src/olddocs/i80.html | 1391 ++++ src/olddocs/i80.pdf | Bin 0 -> 52560 bytes src/olddocs/install.html | 2645 ++++++ src/olddocs/install.pdf | Bin 0 -> 66032 bytes src/olddocs/int.html | 3910 +++++++++ src/olddocs/int.pdf | Bin 0 -> 114684 bytes src/olddocs/lint.html | 3054 +++++++ src/olddocs/lint.pdf | Bin 0 -> 91599 bytes src/olddocs/m2ref.html | 831 ++ src/olddocs/m2ref.pdf | Bin 0 -> 44119 bytes src/olddocs/m68020.html | 1772 +++++ src/olddocs/m68020.pdf | Bin 0 -> 76403 bytes src/olddocs/ncg.html | 6654 ++++++++++++++++ src/olddocs/ncg.pdf | Bin 0 -> 120172 bytes src/olddocs/nopt.html | 1527 ++++ src/olddocs/nopt.pdf | Bin 0 -> 42122 bytes src/olddocs/occam.html | 445 ++ src/olddocs/occam.pdf | Bin 0 -> 62944 bytes src/olddocs/pascal.html | 4088 ++++++++++ src/olddocs/pascal.pdf | Bin 0 -> 93994 bytes src/olddocs/pcref.html | 2036 +++++ src/olddocs/pcref.pdf | Bin 0 -> 58378 bytes src/olddocs/peep.html | 1189 +++ src/olddocs/peep.pdf | Bin 0 -> 35513 bytes src/olddocs/regadd.html | 510 ++ src/olddocs/regadd.pdf | Bin 0 -> 20665 bytes src/olddocs/sparc.html | 14 + src/olddocs/sparc.pdf | 28 + src/olddocs/toolkit.html | 938 +++ src/olddocs/toolkit.pdf | Bin 0 -> 65008 bytes src/olddocs/top.html | 1210 +++ src/olddocs/top.pdf | Bin 0 -> 56051 bytes src/olddocs/v7bugs.html | 2025 +++++ src/olddocs/v7bugs.pdf | Bin 0 -> 19075 bytes src/olddocs/val.html | 2352 ++++++ src/olddocs/val.pdf | Bin 0 -> 35448 bytes src/olddocs/z80.html | 298 + src/olddocs/z80.pdf | Bin 0 -> 18452 bytes testbuild | 3 + tpl/_contents.xslt | 188 + tpl/_htmlx.xslt | 161 + tpl/standard.xslt | 115 + 199 files changed, 78617 insertions(+) create mode 100644 .project create mode 100755 build create mode 100644 dat/alert-big.png create mode 100644 dat/lua-big.png create mode 100644 dat/lua.gif create mode 100644 src/about.i create mode 100644 src/alert.png create mode 100644 src/background.png create mode 100644 src/contents.js create mode 100644 src/contents.xml create mode 100644 src/global.css create mode 100644 src/global.js create mode 100644 src/index-leaf.png create mode 100644 src/index-parent.png create mode 100644 src/index.i create mode 100644 src/logo.png create mode 100644 src/logo.svg create mode 100644 src/lua.png create mode 100644 src/olddocs.i create mode 100644 src/olddocs/6500.html create mode 100644 src/olddocs/6500.pdf create mode 100644 src/olddocs/LLgen.html create mode 100644 src/olddocs/LLgen.pdf create mode 100644 src/olddocs/ack.html create mode 100644 src/olddocs/ack.pdf create mode 100644 src/olddocs/ansi_C.html create mode 100644 src/olddocs/ansi_C.pdf create mode 100644 src/olddocs/basic.html create mode 100644 src/olddocs/basic.pdf create mode 100644 src/olddocs/ceg.html create mode 100644 src/olddocs/ceg.pdf create mode 100644 src/olddocs/cg.html create mode 100644 src/olddocs/cg.pdf create mode 100644 src/olddocs/crefman.html create mode 100644 src/olddocs/crefman.pdf create mode 100644 src/olddocs/ego.html create mode 100644 src/olddocs/ego.pdf create mode 100644 src/olddocs/em.html create mode 100644 src/olddocs/em.pdf create mode 100644 src/olddocs/grohtml-100191.png create mode 100644 src/olddocs/grohtml-100601.png create mode 100644 src/olddocs/grohtml-100602.png create mode 100644 src/olddocs/grohtml-101091.png create mode 100644 src/olddocs/grohtml-101092.png create mode 100644 src/olddocs/grohtml-101093.png create mode 100644 src/olddocs/grohtml-101094.png create mode 100644 src/olddocs/grohtml-101481.png create mode 100644 src/olddocs/grohtml-101482.png create mode 100644 src/olddocs/grohtml-101483.png create mode 100644 src/olddocs/grohtml-101484.png create mode 100644 src/olddocs/grohtml-101485.png create mode 100644 src/olddocs/grohtml-101486.png create mode 100644 src/olddocs/grohtml-101487.png create mode 100644 src/olddocs/grohtml-101488.png create mode 100644 src/olddocs/grohtml-101489.png create mode 100644 src/olddocs/grohtml-102111.png create mode 100644 src/olddocs/grohtml-102411.png create mode 100644 src/olddocs/grohtml-102412.png create mode 100644 src/olddocs/grohtml-102413.png create mode 100644 src/olddocs/grohtml-102721.png create mode 100644 src/olddocs/grohtml-1027210.png create mode 100644 src/olddocs/grohtml-1027211.png create mode 100644 src/olddocs/grohtml-1027212.png create mode 100644 src/olddocs/grohtml-1027213.png create mode 100644 src/olddocs/grohtml-1027214.png create mode 100644 src/olddocs/grohtml-1027215.png create mode 100644 src/olddocs/grohtml-1027216.png create mode 100644 src/olddocs/grohtml-1027217.png create mode 100644 src/olddocs/grohtml-1027218.png create mode 100644 src/olddocs/grohtml-1027219.png create mode 100644 src/olddocs/grohtml-102722.png create mode 100644 src/olddocs/grohtml-1027220.png create mode 100644 src/olddocs/grohtml-1027221.png create mode 100644 src/olddocs/grohtml-1027222.png create mode 100644 src/olddocs/grohtml-1027223.png create mode 100644 src/olddocs/grohtml-1027224.png create mode 100644 src/olddocs/grohtml-1027225.png create mode 100644 src/olddocs/grohtml-1027226.png create mode 100644 src/olddocs/grohtml-1027227.png create mode 100644 src/olddocs/grohtml-1027228.png create mode 100644 src/olddocs/grohtml-1027229.png create mode 100644 src/olddocs/grohtml-102723.png create mode 100644 src/olddocs/grohtml-1027230.png create mode 100644 src/olddocs/grohtml-1027231.png create mode 100644 src/olddocs/grohtml-1027232.png create mode 100644 src/olddocs/grohtml-1027233.png create mode 100644 src/olddocs/grohtml-1027234.png create mode 100644 src/olddocs/grohtml-1027235.png create mode 100644 src/olddocs/grohtml-1027236.png create mode 100644 src/olddocs/grohtml-1027237.png create mode 100644 src/olddocs/grohtml-1027238.png create mode 100644 src/olddocs/grohtml-1027239.png create mode 100644 src/olddocs/grohtml-102724.png create mode 100644 src/olddocs/grohtml-102725.png create mode 100644 src/olddocs/grohtml-102726.png create mode 100644 src/olddocs/grohtml-102727.png create mode 100644 src/olddocs/grohtml-102728.png create mode 100644 src/olddocs/grohtml-102729.png create mode 100644 src/olddocs/grohtml-105631.png create mode 100644 src/olddocs/grohtml-105632.png create mode 100644 src/olddocs/grohtml-105633.png create mode 100644 src/olddocs/grohtml-105634.png create mode 100644 src/olddocs/grohtml-106061.png create mode 100644 src/olddocs/grohtml-106062.png create mode 100644 src/olddocs/grohtml-106063.png create mode 100644 src/olddocs/grohtml-106064.png create mode 100644 src/olddocs/grohtml-106561.png create mode 100644 src/olddocs/grohtml-1065610.png create mode 100644 src/olddocs/grohtml-1065611.png create mode 100644 src/olddocs/grohtml-1065612.png create mode 100644 src/olddocs/grohtml-1065613.png create mode 100644 src/olddocs/grohtml-1065614.png create mode 100644 src/olddocs/grohtml-106562.png create mode 100644 src/olddocs/grohtml-106563.png create mode 100644 src/olddocs/grohtml-106565.png create mode 100644 src/olddocs/grohtml-106566.png create mode 100644 src/olddocs/grohtml-106567.png create mode 100644 src/olddocs/grohtml-106568.png create mode 100644 src/olddocs/grohtml-106569.png create mode 100644 src/olddocs/grohtml-107771.png create mode 100644 src/olddocs/grohtml-107772.png create mode 100644 src/olddocs/grohtml-107773.png create mode 100644 src/olddocs/grohtml-96851.png create mode 100644 src/olddocs/grohtml-96852.png create mode 100644 src/olddocs/grohtml-96853.png create mode 100644 src/olddocs/grohtml-96854.png create mode 100644 src/olddocs/grohtml-96855.png create mode 100644 src/olddocs/grohtml-96856.png create mode 100644 src/olddocs/grohtml-96857.png create mode 100644 src/olddocs/grohtml-97441.png create mode 100644 src/olddocs/grohtml-974410.png create mode 100644 src/olddocs/grohtml-974411.png create mode 100644 src/olddocs/grohtml-974412.png create mode 100644 src/olddocs/grohtml-974413.png create mode 100644 src/olddocs/grohtml-974414.png create mode 100644 src/olddocs/grohtml-974415.png create mode 100644 src/olddocs/grohtml-974416.png create mode 100644 src/olddocs/grohtml-974418.png create mode 100644 src/olddocs/grohtml-974419.png create mode 100644 src/olddocs/grohtml-97442.png create mode 100644 src/olddocs/grohtml-974420.png create mode 100644 src/olddocs/grohtml-97443.png create mode 100644 src/olddocs/grohtml-97444.png create mode 100644 src/olddocs/grohtml-97445.png create mode 100644 src/olddocs/grohtml-97446.png create mode 100644 src/olddocs/grohtml-97447.png create mode 100644 src/olddocs/grohtml-97448.png create mode 100644 src/olddocs/grohtml-97449.png create mode 100644 src/olddocs/grohtml-99071.png create mode 100644 src/olddocs/grohtml-99261.png create mode 100644 src/olddocs/grohtml-99451.png create mode 100644 src/olddocs/grohtml-99452.png create mode 100644 src/olddocs/grohtml-99453.png create mode 100644 src/olddocs/grohtml-99454.png create mode 100644 src/olddocs/grohtml-99455.png create mode 100644 src/olddocs/grohtml-99456.png create mode 100644 src/olddocs/grohtml-99457.png create mode 100644 src/olddocs/i80.html create mode 100644 src/olddocs/i80.pdf create mode 100644 src/olddocs/install.html create mode 100644 src/olddocs/install.pdf create mode 100644 src/olddocs/int.html create mode 100644 src/olddocs/int.pdf create mode 100644 src/olddocs/lint.html create mode 100644 src/olddocs/lint.pdf create mode 100644 src/olddocs/m2ref.html create mode 100644 src/olddocs/m2ref.pdf create mode 100644 src/olddocs/m68020.html create mode 100644 src/olddocs/m68020.pdf create mode 100644 src/olddocs/ncg.html create mode 100644 src/olddocs/ncg.pdf create mode 100644 src/olddocs/nopt.html create mode 100644 src/olddocs/nopt.pdf create mode 100644 src/olddocs/occam.html create mode 100644 src/olddocs/occam.pdf create mode 100644 src/olddocs/pascal.html create mode 100644 src/olddocs/pascal.pdf create mode 100644 src/olddocs/pcref.html create mode 100644 src/olddocs/pcref.pdf create mode 100644 src/olddocs/peep.html create mode 100644 src/olddocs/peep.pdf create mode 100644 src/olddocs/regadd.html create mode 100644 src/olddocs/regadd.pdf create mode 100644 src/olddocs/sparc.html create mode 100644 src/olddocs/sparc.pdf create mode 100644 src/olddocs/toolkit.html create mode 100644 src/olddocs/toolkit.pdf create mode 100644 src/olddocs/top.html create mode 100644 src/olddocs/top.pdf create mode 100644 src/olddocs/v7bugs.html create mode 100644 src/olddocs/v7bugs.pdf create mode 100644 src/olddocs/val.html create mode 100644 src/olddocs/val.pdf create mode 100644 src/olddocs/z80.html create mode 100644 src/olddocs/z80.pdf create mode 100755 testbuild create mode 100644 tpl/_contents.xslt create mode 100644 tpl/_htmlx.xslt create mode 100644 tpl/standard.xslt diff --git a/.project b/.project new file mode 100644 index 000000000..4a63a4ef5 --- /dev/null +++ b/.project @@ -0,0 +1,11 @@ + + + ack-website + + + + + + + + diff --git a/build b/build new file mode 100755 index 000000000..ef759bd36 --- /dev/null +++ b/build @@ -0,0 +1,47 @@ +#!/bin/sh + +SRC="$1" +DST="$2" +DESTURL="$3" + +extensionmap() { + case "$1" in + i) echo html;; + *) echo $1;; + esac +} + +rebuild() { + mkdir -p `dirname $2` + case "$3" in + i) + # echo xsltproc --novalid --stringparam THIS $(echo $4 | sed -e 's/^\.\///') --stringparam SRC "$SRC" --stringparam DESTURL "$DESTURL" tpl/standard.xslt "$1" + xsltproc --novalid --stringparam THIS $(echo $4 | sed -e 's/^\.\///') --stringparam SRC "$SRC" --stringparam DESTURL "$DESTURL" tpl/standard.xslt "$1" > "$2" + #sabcmd tpl/standard.xslt $1 "\$SRC=$SRC" "\$DESTURL=$DESTURL" > $2 + #xalan -xsl tpl/standard.xslt -in $1 -out $2 + ;; + + *) + cp $1 $2 + ;; + esac + + if [ $? != 0 ]; then + echo "Command failed" + rm -f $2 + exit 1 + fi +} + +inputs=$(cd src && find -wholename "*/.*" -prune -o -type f -print) + +for f in $inputs; do + srcextension=${f##*.} + destextension=`extensionmap $srcextension` + extensionless=${f%.*} + source=$SRC/$f + dest=$DST/$extensionless.$destextension + + echo $f + rebuild $source $dest $srcextension $f +done diff --git a/dat/alert-big.png b/dat/alert-big.png new file mode 100644 index 0000000000000000000000000000000000000000..50f653ec0f409253a57dfd02d9148a84ff57498b GIT binary patch literal 2302 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 literal 0 HcmV?d00001 diff --git a/dat/lua.gif b/dat/lua.gif new file mode 100644 index 0000000000000000000000000000000000000000..15abee4d897c71e215e085b315a6cac77fe314e2 GIT binary patch literal 5408 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 + + + About the ACK + + + +

What is it?

+ +

The Amsterdam Compiler Kit is a venerable piece of software that dates +back to the early 1980s. It was originally written by Andrew Tanenbaum and Ceriel Jacobs as a commercial +product; for many years it was also used as Minix' native toolchain. After +eventually failing as a commercial project, it was made open source under a +BSD license in 2003 when it looked like it was going to be abandoned and the +code lost.

+ +

The ACK contains compilers for ANSI C, K&R C, Pascal, Modula-2, Occam +1, and a primitive Basic. It contains code generators for a large number of +architectures, mostly 8 and 16 bit machines; there are also a set of generic +optimisation, linker and librarian tools. Each language comes with its own +runtime, so if you're a C programmer you also get a libc. Compared to gcc, it +is far smaller, faster and easier to port.

+ +

This project currently hosts two versions of the ACK.

+
    +
  • ACK 5.6 is an incremental update of Vrije University's last release. + This has had minimum fixes necessary to make it run on modern Linux + machines; unfortunately, the build system is designed for the Unixes of + yesteryear and is not really up to modern standards. This version is the + most complete, but is probably not particularly useful as very few of the + platforms it targets exist any more. This version is provided for + reference and archival purposes and to provide a backup if the 6.0 + release should fail.
  • +
  • ACK 6.0 is a ground-up reworking of the whole compiler suite, with a + lot of the more archaic features removed. It is intended to produce a + modern compiler toolchain with which actually useful work can be done, + and is where all the new development happens. Currently, not all of 5.6's + features have been ported, but those that have work considerably more + reliably.
  • +
+ +

What architectures does it support?

+ +

The following architectures are supported.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
5.66.0
6500+
6800-
6805-
6809-
ARM+
i80+
Z80+
Z8000+
i86++
i386++
68000+
68020+
NS32016+
s2650-
SPARC+
VAX4+
PDP11+
+ +

+ indicates that the particular architecture is supported by the code +generator and assembler; - indicates that it is supported by the assembler +only.

+ +

Note: all the code generators run on 6.0, but as there are no +platforms yet that use them they are not currently shipped. If you wish to +use one, please ask and it can very easily be arranged. (Due to the way the +ACK works, it is not really possible to produce code targeted at a particular +architecture without also targeting it at a platform.)

+ +

What platforms does it support?

+ +

For 5.6:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
6500BBC Microcomputer
ARMAcorn Archimedes
i80Hermac, Nascom
Z80Hermac, Nascom, limited CP/M
Z8000(board)
i86PC/IX
i386Xenix v3, Xenix SysV
6800016 bit: MinixST; 32-bit: SunOS, Mantra, PMDS
68020SysV
NS32016(board)
SPARCSolaris, SunOS
VAX4BSD4.2
PDP11UNIX v7
+ +

"(board)" signifies that the port was done to a bare development board +with no operating system other than a monitor.

+ +

For 6.0:

+ + + + + + + + + + + + +
i86pc86 (bootable floppy disk images)
i386linux386 (ELF Linux executables)
+ +

Haven't I seen this before somewhere?

+ +

Quite likely. The ACK has been used as the standard Minix compiler for +years. While the ACK was still commercial, this was done by distributing +binaries; when it get opened, a version was forked off and is now used as +part of the Minix base build. You can find Minix's +version here. This is an extremely stripped down variant that supports +only the Minix platform on the i386 and i86 architectures and was done by Michael Kennett.

+ +

In addition, the original 5.5 release is still available on the Vrije University ACK page.

+ +

There may also be other versions elsewhere. The ACK is BSD licensed and as +a result if people want to fork the codebase and use it elsewhere, they don't +even need to ask, or indeed tell anyone. If you know of any other uses of the +compiler, please let me (dtrg) know --- I'd like to put in a link.

+ +

What's the involvement of Andrew Tanenbaum, Ceriel Jacobs and Vrije +University?

+ +

They have no official involvement.

+ +

They're aware that I, dtrg, am doing this, and are quite happy with it and +maintain an interest, but are not actively participating in the project. (Due +to being busy people with other things to do.) I, dtrg, have nothing to do +with Vrije University and have never even been to Holland.

+ + diff --git a/src/alert.png b/src/alert.png new file mode 100644 index 0000000000000000000000000000000000000000..bd323527c1678ff0e8e6b9654614a47ce740eac1 GIT binary patch literal 1354 zcmV-Q1-1H#P)M!7V0stU{igTB4yz|qK z&(BsDne7G7_dg(HHn&BM1Arhfp`n{^dw=~+G+TY_Y%drn*%Pu@8UcVP6d-arsK*29 z_ow-LE?e3z_m~#U1NIXwDWMxTjFGjnQV&(_f#^AJv!A%xbX2`y1bi1Sy&!lzSpdK- zy&JOa+aTS%36gs?008Ru-x28TJ+UAJZoYWrF2Ut`C9+l@tOp|!0fa!+P!Eu>Dq;9m zt+mFma^499uJ)a#fj}|!0`WMm*aI~yGx9Z=O&gGosVd%@)@v+S#Sd|vv1qs2%(KVC2iE>{5n zD0Y|Q=iD5Wm6gT*f)JQYCglEc8P2mGh4-Y=KH2td`Re+bz-@WJ*VChq7-ttRhC*Kf zlPSK^1VKP|cQ@oapN1$SBfK{{y3EtnWw@;n3>`Ww<8AiV$XZoh2_lt3qtQ&jYBU-! z5(!lGHLZ?%Shhhd;@FaT`0ai*rGB0oPriq&eh5R1hak7dTN zyxsonP{Z@~^tRDZNCE&U8%rTsl^=&GDJhA5Z`iOQ?u@%97t$xjih$?Y z;I)BweBHm3850D%V$Ku z-T9p)@aJD|fl>f~Voy2Pw266CSXc;-`nja|gBR;vZaag$bH-!h1_=M9ODCzvs{{bas{4>q zTAHwlG&VNIvVRIme&|6YYafC4!cU-qfYfKYc#0nx*~QA`@gA_f+_Z*w4DTQ7txz8_ z0L;{#+GH}JqM`yioeur|{Rv5^40T|}!X!9`ciN90FOCaAaL_{hSFX0vV2}WSbZZ&J z%aUCfjEee;V^Pjb@&%dYw0CMa750gUIub+;VovtDZOeF2? z?a0i`L|$GVj7H=1@4j3H<^IZ8LJpW;A8vn7$qeqUXbxT*I0*n;RwmNVeG-k=d<*4y z3{}-2(AS5tGJlgXZ+fhcdc1iN_Y;Kz3n_wo1cGZMQl@{47*^z@(L*-`w;TVPu&i6e zE=jEeAzxFkH+!b{ctHS5NZdfe5HfMRq7*b3oTNiBATpU%ye#j?zeaY%^M}B-VE_OC M07*qoM6N<$g2&=?hyVZp literal 0 HcmV?d00001 diff --git a/src/background.png b/src/background.png new file mode 100644 index 0000000000000000000000000000000000000000..5dc92366318c1830e31cf4513c336089765e322a GIT binary patch literal 2168 zcmeH}QAkr!7{`yp*%D<)X`sawOzWYN5Q3t(DjPO57a|x^Tq)_H0zu2kNRJCDmQTGH z_+T_iioiVtiI8rAD?w`-k)g##DvrcbXJN6=s>^-qY;s~^A{Y)-1&2$ z!rNwBk0K3m7^ce{eg+qZ*I}N+8RcONMrasewoHRqYGul>bjfrD%alx)I15mjvjDit zZ09Ou5$+$%%40^l|DG!io(tBCM~7jSqktGebcq>T5$%N{jz(aZqo5c?)WfvA>k#yC zGzMOdLSh)v4Ab(ilaR;JI5;_4^2EFp6Yr{kL5@Dqd5)GnF)!ut-PegDk->lb4fHXA zKv*C&-60gHv<4+IosL$u91{R@aD1>lcW8rzHRY literal 0 HcmV?d00001 diff --git a/src/contents.js b/src/contents.js new file mode 100644 index 000000000..08dd1bf7d --- /dev/null +++ b/src/contents.js @@ -0,0 +1,9 @@ +/* Executed immediately after outputting the table of contents; ensures + * that it's shown or hidden as appropriate. */ + +if (window.showTocToggle) +{ + var tocShowText = "show"; + var tocHideText = "hide"; + showTocToggle(); +} diff --git a/src/contents.xml b/src/contents.xml new file mode 100644 index 000000000..309f89666 --- /dev/null +++ b/src/contents.xml @@ -0,0 +1,4 @@ + + + + diff --git a/src/global.css b/src/global.css new file mode 100644 index 000000000..859f05b6b --- /dev/null +++ b/src/global.css @@ -0,0 +1,260 @@ +body +{ + font-family: "Bitstream Vera Sans", sans-serif; + color: #000; + background: #ddd url(background.png) no-repeat scroll top left; + margin: 0; + padding: 0; +} + +div.nav +{ + float: left; + clear: left; + width: 9em; + margin: 0.5em; +} + +div.nav-logo +{ + text-align: center; +} + +div.nav-related h4, div.nav-children h4 +{ + text-align: center; + font-size: 60%; + border-bottom: 1px solid #000; +} + +div.nav-related ul, div.nav-children ul +{ + font-size: 60%; + padding: 0; +} + +div.nav-related li, div.nav-children li +{ + list-style-type: none; + text-align: center; + padding: 0.2em 0 0.2em 0; +} + +div.nav-related .selected, div.nav-children .selected +{ + background: #eee; +} + +div.nav-icons +{ + text-align: center; +} + +div.nav-icons img +{ + border: 0; +} + +div.page-path +{ + margin: 0 0 0 10em; +} + +div.page-path > p +{ + font-size: 60%; +} + +div.navigation-block +{ + margin: 0 1em 0 0; +} + +div.navigation-block table +{ + width: 100%; + font-size: 60%; +} + +.navigation-left +{ + text-align: left; +} + +.navigation-right +{ + text-align: right; +} + +div.page-body +{ + border: 1px solid #000; + margin: 0 1em 0 10em; + padding: 1em 0 1em 1em; + background: #fff; +} + +div.page-body > p, div.page-body > ul, div.page-body > ol +{ + line-height: 150%; +} + +div.page-body > ul li, div.page-body > ol li +{ + margin: 0.3em 0 0.3em 0; +} + +div.body-copyright +{ + font-size: 60%; +} + +.top-maintitle > h1 +{ + font-size: large; + margin: 0; +} + +.body-contents +{ + font-size: 60%; + border: 1px solid black; + padding: 0 0.5em 0 0.5em; + margin: 0 1em 0 0; + line-height: 1.2em; + color: #7d7d7d; + width: 50%; +} + +.body-contents h4 +{ + margin: 0.5em 0 0.5em 0; +} + +div.body > div.path +{ + font-size: smaller; + font-weight: bold; + margin-top: 2em; +} + +div.body > h1.title +{ + text-align: left; + font-size: large; + padding-bottom: 0.75em; + margin-bottom: 1.5em; + border-bottom: 1px solid #000; +} + +div.bottom +{ + clear: both; +} + +.boxed +{ + border: 1px solid #000; + background: #fff; + padding: 0.5em; +} + +div.boxed > h4 +{ + font-size: 100%; + text-align: center; + margin-bottom: 0.5em; + padding-bottom: 0.5em; + border-bottom: 1px solid #000; +} + +.center +{ + text-align: center; +} + +h1 { font-size: 120%; } +h2 { font-size: 100%; } +h3 { font-size: 100%; } +h4 { font-size: 100%; } + +div.toclist > div +{ + padding-left: 9px; + text-indent: -9px; +} + +div.toclist > div.parent:before { content: url(index-parent.png); } +div.toclist > div.parent { background: #fee; } +div.toclist > div.child:before { content: url(index-leaf.png); } +div.toclist a.selected { font-weight: bold; } + +ol.toclist { margin-left: 10px; padding-left: 10px; } +ol.toclist > li { list-style-position: outside; padding-top: 0.5ex; } + +hr +{ + display: block; + border: 1px inset black; + width: 1em; + height: 1em; + margin-top: 2em; + margin-bottom: 2em; +} + +pre, tt +{ + font-family: monospace; +} + +pre +{ + font-size: smaller; + border: 1px solid #000; + background: #eee; + padding: 1em; + margin: 1em; +} + +blockquote.warning, blockquote.lua +{ + border: 1px solid #000; + padding: 0em 1em 0em 60px; + margin: 1em 1em 1em 2em; + background-repeat: no-repeat; + background-position: 16px 16px; + min-height: 64px; +} + +blockquote.warning +{ + background-color: #fdd; + background-image: url('alert.png'); +} + +blockquote.lua +{ + background-color: #ddf; + background-image: url('lua.png'); +} + +div.page-body > table +{ + border-collapse: collapse; + border-style: hidden; + margin: 0 3em 0 3em; + font-size: 80%; +} + +div.page-body > table td, div.page-body > table th +{ + text-align: left; + border: 1px solid #ccc; + /* border-bottom: 1px solid #ccc; */ + padding: 0.5em 0.6em 0.5em 0.6em; +} + +table.dl td.dl-left +{ + /* border-right: 1px solid #ccc; */ +} diff --git a/src/global.js b/src/global.js new file mode 100644 index 000000000..f29cfa4d0 --- /dev/null +++ b/src/global.js @@ -0,0 +1,61 @@ +/* Stolen wholesale from Wikipedia */ + +function showTocToggle() +{ + if (document.createTextNode) + { + /* Uses DOM calls to avoid document.write + XHTML issues */ + + var linkHolder = document.getElementById('toctitle') + if (!linkHolder) + return; + + var outerSpan = document.createElement('span'); + outerSpan.className = 'toctoggle'; + + var toggleLink = document.createElement('a'); + toggleLink.id = 'togglelink'; + toggleLink.className = 'internal'; + toggleLink.href = 'javascript:toggleToc()'; + toggleLink.appendChild(document.createTextNode(tocShowText)); + + outerSpan.appendChild(document.createTextNode('[')); + outerSpan.appendChild(toggleLink); + outerSpan.appendChild(document.createTextNode(']')); + + linkHolder.appendChild(document.createTextNode(' ')); + linkHolder.appendChild(outerSpan); + + var cookiePos = document.cookie.indexOf("hidetoc="); + if ((cookiePos == -1) || (document.cookie.charAt(cookiePos + 8) == 0)) + toggleToc(); + } +} + +function changeText(el, newText) +{ + /* Safari work around */ + if (el.innerText) + el.innerText = newText; + else if (el.firstChild && el.firstChild.nodeValue) + el.firstChild.nodeValue = newText; +} + +function toggleToc() +{ + var toc = document.getElementById('toc').getElementsByTagName('ol')[0]; + var toggleLink = document.getElementById('togglelink') + + if (toc && toggleLink && toc.style.display == 'none') + { + changeText(toggleLink, tocHideText); + toc.style.display = 'block'; + document.cookie = "hidetoc=0"; + } + else + { + changeText(toggleLink, tocShowText); + toc.style.display = 'none'; + document.cookie = "hidetoc=1"; + } +} diff --git a/src/index-leaf.png b/src/index-leaf.png new file mode 100644 index 0000000000000000000000000000000000000000..07a81c1c99c34b181ff19861b5d9739c77b28a3c GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4^3?%3Nf7cA8cmjMvTx0n-fXx5@|DQQ?##>P2 z6p+JM666=m;PC858jvIJ>Eal|aXmSKfss)`EHOc#H#K2G)LVvSjx`%Bn3);WXE7N~ Tm3mMLRLbD#>gTe~DWM4fYLg*u literal 0 HcmV?d00001 diff --git a/src/index-parent.png b/src/index-parent.png new file mode 100644 index 0000000000000000000000000000000000000000..bf78057378d20496c27494da5a5adf62a3931b87 GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4^3?%3Nf7cA8cmjMvTx0n-fXx5@|DQQ?##>P2 z6p+JM666=m;PC858jvIJ>Eal|aXmSqAR!@P&w&F6_O&)TmS|0|W#nWxXkcK7>1C;Q TxzAM&RLbD#>gTe~DWM4f)cqs7 literal 0 HcmV?d00001 diff --git a/src/index.i b/src/index.i new file mode 100644 index 000000000..91d6195f8 --- /dev/null +++ b/src/index.i @@ -0,0 +1,147 @@ + + + + The Amsterdam Compiler Kit + + + +

Introduction

+ +

The Amsterdam Compiler Kit is a cross-platform compiler and toolchain +suite that is small, portable, extremely fast, and extremely flexible. It +targets a number of low-end machines including the Z80, 8086 and 80386, but +there are many other code generators available. It supports several +languages, including ANSI C, Pascal and Modula-2, and contains integrated +runtime libraries including a libc.

+ +

The ACK runs on Unix systems; most development happens on Linux.

+ +

For more information, see the About the ACK +page.

+ +

Getting it

+ +

You can download any release of the ACK from the Sourceforge +download site. Installation instructions are provided in the source +package.

+ +

Documentation

+ +

Some fairly heavy maintenance is currently being done on the ACK, which +means the documentation is not in very good shape. Most of the documentation +is in the form of man pages, which are supplied with the source; however, a +number of rather old white papers are also +available, that may give some insight as to the design and architecture of +the system.

+ +

If you have queries, your best bit is probably to join the mailing +list.

+ +

News

+ +

2007-04-25

+ +

I'm pleased to announce 6.0pre2 has just hit the download +page. i386 Linux binaries now have limited support.

+ +

This version has some substantial internal changes to simplify things all +round. Syscalls are no longer routed through libmon and are considerably +simpler and more lightweight to implement and use. The K&R C compiler has +been removed, as it does nothing that the ANSI C compiler doesn't do better. +The built-in libc has been heavily ANSIfied and trimmed back to remove a lot +of the ancient Unixisms.

+ +

The distribution size is now under a megabyte.

+ +

2007-02-25

+ +

Finally, finally, after several years work, we finally have an +initial release of the ACK 6.0!

+ +

This is a preview release, and is extremely limited. It supports on +platform, which will generate PC bootable floppy disk images containing 8086 +machine code. However, it does support ANSI C, K&R C, Pascal, Modula-2, +Basic and Occam, and should form a good basis for evaluation and further +development. Let me know what you think.

+ +

This is known to build cleanly on Ubuntu Edgy Linux and OpenBSD 4.0, both +on i386. However, it hasn't had a lot of testing otherwise; Sourceforge have +shut down their compile farm service, and I don't have access to many +machines. Bug reports are extremely welcome.

+ +

You can get it get it +from the Sourceforge download page.

+ +

(Note that the ACK 5.6, using the old build mechanism, still remains +available for those that wish to use it; it's in the 6.0pre1 download area as +a previous version.)

+ +

2006-02-04

+ +

LLgen has just been released as a seperate package!

+ +

LLgen is a LL(1) parser generator, quite similar to yacc or bison, that +can generate recursive descent parsers from Extended Context-Free grammars +(which makes it quite a bit more useful than yacc or bison). The ACK uses it +extensively, but as it's a standalone component, I've decided that it would +be useful to distribute this separately. LLgen's input files are almost +identical to yacc's, so if you can use yacc and have been getting frustrated +with its limitations, LLgen is for you.

+ +

I've rewritten the build system and overhauled the source so it compiles +cleanly with gcc; it should work fine on modern systems (and extremely +quickly). The package contains full documentation, and LLgen is, like the +ACK, licensed under the new-style BSD license.

+ +

You can get it +from the Sourceforge download page right next to the ACK.

+ +

2005-06-25

+ +

We make our first release!

+ +

Version 5.6 of the ACK has now hit Sourceforge and is ready to +download. This version has been tweaked and fiddled with until it +compiles, very nearly cleanly, on Linux systems (all that were available for +testing): it should work without too much hassle on most other platforms. +This release contains full documentation, all the front ends, all the back +ends, all the libraries, and all the binary conversion tools, and should +actually be useful. Don't forget to join the mailing list +if you want to use it!

+ +

2005-06-10

+ +

CVS repository goes live!

+ +

After great efforts by Ceriel Jacobs, to which I am extremely grateful, we +now have a complete copy of the original development repository. The original +distribution mechanism doesn't quite work on modern machines, but I'm working +on it, and in the meantime it makes fascinating browsing --- I believe we may +now have some of the oldest timestamps on SourceForge. (Several of the files +were last touched in 1985!)

+ +

For casual perusal it's probably simplest to use CVSWeb. +Alternatively, check out the Ack module --- full instructions on the +project CVS page. +

+ +

2005-02-14

+ +

Initial version of this web page set up.

+ +

2005-02-11

+ +

Converted the troff documentation into (dodgy) HTML and PDF files; see the +documentation section for the list. The man pages haven't been converted yet, +but at least the main documentation is available.

+ + diff --git a/src/logo.png b/src/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..fd52804e932d84b15a4418a621fc9fba2cf384ba GIT binary patch literal 8604 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + THE + AMSTERDAM + COMPILER + KIT + PLACEHOLDERGRAPHIC + + diff --git a/src/lua.png b/src/lua.png new file mode 100644 index 0000000000000000000000000000000000000000..9417dae2f88afc2f95acf91c962aa21d69476d4b GIT binary patch literal 2039 zcmVi@NQyF00U4ia=rd1JDR7;w973*{Pjv z`@nXT>2&el=}W~)I&kgZ57I#kOp&bG`lPJzOf6flVB2mwp(AvsA-PWFdQ1fd1p z{j;;@*LU9A^UnLd-+KZ6-#^Z?2oDSl2=sb=DwoTR;&3=I4u>O2C=@;pkjv$`cI}%FCMWHML3x+Uw|Zn`wsrsht4TUt;mprQpt-sE zsK?{+iA17Nm&?_YkdWZb%F6Q3m+9_)5T2R2*6~v|WU|v{v)L_unjRY)zSn3x-n3){ zbUIxWK@bPLUavhqKK`%S+1chGFD0cm$7pnx(6lep>-DR4?9dS;dCJe{6B8uK>yC{L zZy6js(ixOz*#Nr~2A9j>ESUpWu3V8hoz6o(pU;qzlG46)>sBuSY}@vim+#y$ePp%L z>C0VPWF*;_m?%5i+k5DrGTG@5&1Uzp`FuW~uvb;3zfe+74kwGwauuv+Q#{(j@Fq@<7D)M~e#h=~zjC5XpRVljUvE-t*NrY3J{Q3RTr znl`yyuG}?i)_j_qoBIF&)~);S5BKg_PX_{lp9KvIBkUt3$ zAMy6Y#P8pK_0^{M(a|5oCr_$;d-uLJ7Svmi10s=V2SE^Vv$L}b01wjA>T(AMXWm;5 z8~|!-^H5ot7W&`5Jr1i@Q8;z#tM^h<>;BczvFD4&(fRoGmX;Q0NlD4{f(V>DcTP=` zU9kj5?iO)pFo5F=9+kz6maOVM;k1UdZL|Lm(g~%FDNGsHw^G z-o1O5Ycv{(%*;$50C1lq27j~5GMs}2xlz4937^_$bH~>UPQ;Wa>AUvE8iG&ZQ z)2r&}FjN4*`t|Esy9&dkgcyE2(j9(s0#p)ni>$A%GPjG zC9Tux=qDXbc*bOMSF&t?0|4*5^DEeFkJ*ERGkEyWfwHm};q$T3Xi_je?ZDie7YPYc z6cnhjd-n!JM~k6Qh+sCm17b1%PfuDgca27)=~>hZD2mdbIddlF*s){N2E);zsHhJv zK6*5#Iehp!Boe{A1af11+yaZm4XKnwd3hTsijRButgu>XL`REp{P<1eakyfj11ptkvO?LI_NT1#AQQKTq+fI?b@~O7rng)#{i(Er6tbm z_0DOv+P|%6FQ~1pePQ+L)waUI!l@ult*$OJnOtw1&92RXz+znv2LYK(G$fM=Pa6zJ zo9FZD>gr14;^IEd&(HU-$bkzNF7Uiw@6P1pOfa|8eV9#mIcw>gsAWNs>`jRaM>3wHejd*Jm*dBd)5dy8bLzaQX7(u(`Rp z1P+IT^78UK|M6T)ckaAM(=;}1+O(wH`Sa)3@_0P2&1OrXDC*maii$`7 zwcYT?O(=4Fe0;A`sk~@38nf(n`-D=dq^(wKR%K;nU44Chu|Oc`C@U+Y|0lNNe*;?; VCAG2cTj&4)002ovPDHLkV1l#@=Mew^ literal 0 HcmV?d00001 diff --git a/src/olddocs.i b/src/olddocs.i new file mode 100644 index 000000000..55d6099c0 --- /dev/null +++ b/src/olddocs.i @@ -0,0 +1,188 @@ + + + + White Papers + + + +

White Papers

+ +

These documents are all white papers that came with the full 5.5 release +and have varying degrees of relevance to the 6.0 release. These are converted +automatically into HTML and PDF from the original troff source files, and so +the quality is not always the greatest. However, there should be enough here +to give some insight into how the ACK works.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
6500htmlpdfthe MOS 6500 code generator
LLgenhtmlpdfthe LL(1) parser generator
ackhtmlpdfthe description files used to drive the compiler front-end
ansi_Chtmlpdfthe ANSI C compiler
basichtmlpdfthe BASIC compiler
ceghtmlpdfthe fast code generator
cghtmlpdfthe old code generator
crefmanhtmlpdfthe K&R C compiler
egohtmlpdfthe EM optimiser
emhtmlpdfthe EM intermediate code format & virtual machine
i80htmlpdfthe Intel i80 code generator
installhtmlpdfinstallation instructions
inthtmlpdfthe EM interpreter
linthtmlpdfthe off-line C program checker
m2refhtmlpdfthe Modula-2 compiler
m68020htmlpdfthe Motorola 68000-series code generator
ncghtmlpdfthe new code generator
nopthtmlpdfthe new peephole optimiser
occamhtmlpdfthe Occam compiler
pascalhtmlpdfthe Pascal compiler implementation
pcrefhtmlpdfthe Pascal compiler user reference
peephtmlpdfthe old peephole optimiser
regaddhtmlpdfreport on adding support for register variables
toolkithtmlpdfhigh-level overview
tophtmlpdfnative assembly level optimiser
v7bugshtmlpdfa list of bugs found in V7 Unix
valhtmlpdfPascal validation suite report
z80htmlpdfthe Zilog Z80 code generator
+ + diff --git a/src/olddocs/6500.html b/src/olddocs/6500.html new file mode 100644 index 000000000..5473ebdf4 --- /dev/null +++ b/src/olddocs/6500.html @@ -0,0 +1,2168 @@ + + + + + + +A backend table for the 6500 microprocessor + + + +

A backend table for the 6500 microprocessor

+1. Introduction
+2. The MOS Technology MCS6500
+3. The MCS6500 CPU programmable registers
+3.1. The accumulator A.
+3.2. The index register X.
+3.3. The index register Y.
+3.4. The program counter PC
+3.5. The stack pointer SP
+3.6. The status register
+4. The MCS6500 memory layout.
+4.1. Top page.
+4.2. Zero page.
+4.3. The stack.
+5. The memory adressing modes
+5.1. direct addressing.
+5.2. Base page, indexed addressing.
+5.3. Absolute indexed addressing.
+5.4. Indirect addressing.
+5.4.1. Pre-indexed indirect addressing.
+5.4.2. Post-indexed indirect addressing.
+6. What the CPU has and doesn’t has.
+1. Description of the machine table.
+1.1. Macro definitions.
+1.2. Constant definitions.
+2. Register definitions.
+2.1. Token definitions
+2.2. Token expression definitions.
+2.3. Code rules.
+2.3.1. The EM pattern.
+2.3.2. The stack pattern.
+2.3.3. The code part.
+2.3.3.1. Stack cleanup.
+2.3.3.2. Register allocation.
+2.3.3.3. Code to be generated.
+2.3.4. stack replacement.
+2.3.5. EM replacement.
+2.3.6. Move definitions.
+2.3.7. Test definitions.
+2.3.8. Stack definitions.
+3. Some remarks.
+1. Introduction.
+2. The instructions.
+2.1. The load instructions.
+2.1.1. The lol instruction with indirect offsetting.
+2.1.2. The lol instruction whose offset is to big.
+2.2. The store instructions.
+2.2.1. The stl instruction with indirect offsetting.
+2.2.2. The stl instruction whose offset is to big.
+2.3. Integer arithmetic instructions.
+2.3.1. The adi instruction.
+2.3.2. The mli instruction.
+2.4. The unsgned arithmetic instructions.
+2.4.1. Unsigned addition.
+2.5. Floating point arithmetic.
+2.6. Pointer arithmetic instructions.
+2.7. Increment, decrement and zero instructions.
+2.8. Convert instructions.
+2.8.1. The in line conversion.
+2.9. Logical instructions.
+2.9.1. The logical and on 2-byte groups.
+2.10. Set manipulation instructions.
+2.11. Array instructions.
+2.12. Compare instructions.
+2.13. Branch instructions.
+2.14. Procedure call instructions.
+2.15. Miscellaneous instructions.
+1. Introduction.
+1. Testing Pascal statements.
+2. The results.
+3. Pascal statements which don’t have a C equivalent.
+4. Length tests.
+1. Summary
+1. REFERENCES.
+ +
+ +

ABSTRACT

+ +

Jan van Dalen

+ +

The backend table is part of the Amsterdam Compiler Kit +(ACK). It translates the intermediate language family EM to +a machine code for the MCS6500 microprocessor family.

+ +

THE MCS6500 MICROPROCESSOR.

+ +

1. Introduction

+ +

Why a back end table for the MCS6500 microprocessor +family. Although the MCS6500 microprocessor family has an +simple instruction set and internal structure, it is used in +a variety of microcomputers and homecomputers. This is +because of is low cost. As an example the Apple II, a well +known and width spread microprocessor, uses the MCS6502 CPU. +Also the BBC homecomputer, whose popularity is growing day +by day uses the MCS6502 CPU. The BBC homecomputer is based +on the MCS6502 CPU although better and stronger +microprocessors are available. The designers of Acorn +computer Industries have probably choosen for the MCS6502 +because of the amount of software available for this CPU. +Since its width spreaded use, a variaty of software will be +needed for it. One can think of games!!, administration +programs, teaching programs, basic interpreters and other +application programs. Even do it will not be possible to run +the total compiler kit on a MCS6500 based computer, it is +possible to write application programs in a high level +language, such as Pascal or C on a minicomputer. These +application programs can be tested and compiled on that +minicomputer and put in a ROM (Read Only Memory), for +example, cso that it an be executed by a MCS6500 CPU. The +strategy of writing testprograms on a minicomputer, compile +it and then execute it on a MCS6500 based microprocessor is +used by the development of the back end. The minicomputer +used is M68000 based one, manufactured by Bleasdale Computer +Systems Ltd.. The micro- or homecomputer used is a BBC +microcomputer, manufactured by Acorn Computer Ltd..

+ +

2. The MOS Technology MCS6500

+ +

The MCS6500 is as a family of CPU devices developed by +MOS Technology [1]. The members of the MCS6500 family are +the same chips in a different housing. The MCS6502, the big +brother in the family, can handle 64k bytes of memory, while +for example the MCS6504 can only handle 8k bytes of memory. +This difference is due to the fact that the MCS6502 is in a +40 pins house and the MCS6504 has a 28 pins house, so less +address lines are available.

+ +

3. The MCS6500 CPU programmable registers

+ +

The MCS6500 series is based on the same chip so all have +the same programmable registers.

+ +

3.1. The accumulator A.

+ +

The accumulator A is the only register on which the +arithmetic and logical instructions can be used. For +example, the instruction ADC (add with carry) adds the +contents of the accumulator A and a byte from memory or +data.

+ +

3.2. The index register X.

+ +

As the name suggests this register can be used for some +indirect addressing modes. The modes are explaned below.

+ +

3.3. The index register Y.

+ +

This register is, just as the index register X, used for +certain indirect addressing modes. These addressing modes +are different from the modes which use index register X.

+ +

3.4. The program counter PC

+ +

This is the only 16-bit register available. It is used +to point to the next instruction to be carried out.

+ +

3.5. The stack pointer SP

+ +

The stack pointer is an 8-bit register, so the stack can +contain at most 256 bytes. The CPU always appends 00000001 +as highbyte of any stack address, which means that memory +locations 0100 through 01FF are permanently +assigned to the stack.

+ +

3.6. The status register

+ +

The status register maintains six status flags and a +master interrupt control bit.
+These are the six status flags: Carry (c) Zero (z) Overflow +(o) Sign (n) Decimal mode (d) Break (b)

+ +

The bit (i) is the master interrupt control bit.

+ +

4. The MCS6500 memory layout.

+ +

In the MCS6500 memory space three area’s have +special meaning. These area’s are:

+ + + + + + + +
+ +

1)

+
+ +

Top page.

+
+
+ + + + + + + +
+ +

2)

+
+ +

Zero page.

+
+
+ + + + + + + +
+ +

3)

+
+ +

The stack.

+
+
+ +

MCS6500 memory is divided up into pages. These pages +consist 256 bytes. So in a memory address the highbyte +denotes the page number and the lowbyte the offset within +the page.

+ +

4.1. Top page.

+ +

When a MCS6500 is restared it jumps indirect via memory +address FFFC. At FFFC (lowbyte) and +FFFD (highbyte) there must be the address of the +bootstrap subroutine. When a break instruction (BRK) occurs +or an interrupt takes place, the MCS6500 jumps indirect +through memory address FFFE. FFFE and FFFF +thus, must contain the address of the interrupt routine. The +former only goes for maskeble interrupt. There also exist a +nonmaskeble interrupt. This cause the MCS6500 to jump +indirect through memory address FFFA. So the top six +bytes of memory are used by the operating system and +therefore not available for the back end.

+ +

4.2. Zero page.

+ +

This page has a special meaning in the sence that +addressing this page uses special opcodes. Since a page +consists of 256 bytes, only one byte is needed for +addressing zero page. So an instruction which uses zero page +occupies two bytes. It also uses less clock cycle’s +while carrying out the instruction. Zero page is also needed +when indirect addressing is used. This means that when +indirect addressing is used, the address must reside in zero +page (two consecutive bytes). In this case (the back end), +zero page is used, for example to hold the local base, the +second local base, the stack pointer etc.

+ +

4.3. The stack.

+ +

The stack is described in paragraph 3.5 about the +MCS6500 programmable registers.

+ +

5. The memory adressing modes

+ +

MCS6500 memory reference instructions use direct +addressing, indexed addressing, and indirect addressing.

+ +

5.1. direct addressing.

+ +

Three-byte instructions use the second and third bytes +of the object code to provide a direct 16-bit address: +therefore, 65.536 bytes of memory can be addressed directly. +The commonly used memory reference instructions also have a +two-byte object code variation, where the second byte +directly addresses one of the first 256 bytes.

+ +

5.2. Base page, indexed addressing.

+ +

In this case, the instruction has two bytes of object +code. The contents of either the X or Y index registers are +added to the second object code byte in order to compute a +memory address. This may be illustrated as follows:

+ +

Base page, indexed addressing, as illustrated above, is +wraparound - which means that there is no carry. If the sum +of the index register and second object code byte contents +is more than FF , the carry bit will be dicarded. +This may be illustrated as follows:

+ +

5.3. Absolute indexed addressing.

+ +

In this case, the contents of either the X or Y register +are added to a 16-bit direct address provided by the second +and third bytes of an instruction’s object code. This +may be illustrated as follows:

+ +

5.4. Indirect addressing.

+ +

Instructions that use simple indirect addressing have +three bytes of object code. The second and third object code +bytes provide a 16-bit address; therefore, the indirect +address can be located anywhere in memory. This is +straightforward indirect addressing.

+ +

5.4.1. Pre-indexed indirect addressing.

+ +

In this case, the object code consists of two bytes and +the second object code byte provides an 8-bit address. +Instructions that use pre-indexed indirect addressing add +the contents of the X index register and the second object +code byte to access a memory location in the first 256 bytes +of memory, where the indirect address will be found:

+ +

When using pre-indexed indirect addressing, once again +wraparound addition is used, which means that when the X +index register contents are added to the second object code +byte, any carry will be discarded. Note that only the X +index register can be used with pre-indexed addressing.

+ +

5.4.2. Post-indexed indirect addressing.

+ +

In this case, the object code consists of two bytes and +the second object code byte provides an 8-bit address. Now +the second object code byte indentifies a location in the +first 256 bytes of memory where an indirect address will be +found. The contents of the Y index register are added to +this indirect address. This may be illustrated as +follows:

+ +

Note that only the Y index register can be used with +post-indexed indirect addressing.

+ +

6. What the CPU has and doesn’t has.

+ +

Although the designers of the MCS6500 CPUs family state +that there is nothing very significant about the short stack +(only 256 bytes) this stack caused problems for the back +end. The designers say that a 256-byte stack usually is +sufficient for any typical microcomputer, this is only true +if the stack is used only for return addresses of the JSR +(jump to subroutine) instruction. But since the EM machine +is suppost to be a stack machine and high level languages +need the ability of parameters and locals in there +procedures and function, this short stack is unsufficiant. +So an software stack is implemented in this back end, +requiring two additional subroutines for stack handling. +These two stack handling subroutines slow down the +processing time of a program since the stack is used +heavely.

+ +

Since parameters and locals of EM procedures are +offseted from the localbase of that procedure, indirect +addressing is havily used. Offsets are positive (for +parameters) and negative (for local variables). As explaned +before the addressing modes the MCS6500 have a post indexed +indirect addressing mode. This addressing mode can only +handle positive offsets. This raises a problem for accessing +the local variables I have chosen for the next solution. A +second local base is introduced. This second local base is +the real local base subtracted by a constant BASE. In the +present situation of the back end the value of BASE is 240. +This means that there are 240 bytes reseved for local +variables to be indirect addressed and 14 bytes for the +parameters.

+ +

THE CODE GENERATOR.

+ +

1. Description of the machine table.

+ +

The machine description table consists of the following +sections:

+ + + + + + + +
+ +

1.

+
+ +

The macro definitions.

+
+
+ + + + + + + +
+ +

2.

+
+ +

Constant definitions.

+
+
+ + + + + + + +
+ +

3.

+
+ +

Register definitions.

+
+
+ + + + + + + +
+ +

4.

+
+ +

Token definitions.

+
+
+ + + + + + + +
+ +

5.

+
+ +

Token expressions.

+
+
+ + + + + + + +
+ +

6.

+
+ +

Code rules.

+
+
+ + + + + + + +
+ +

7.

+
+ +

Move definitions.

+
+
+ + + + + + + +
+ +

8.

+
+ +

Test definitions.

+
+
+ + + + + + + +
+ +

9.

+
+ +

Stack definitions.

+
+
+ +

1.1. Macro definitions.

+ +

The macro definitions at the top of the table are +expanded by the preprocessor on occurence in the rest of the +table.

+ +

1.2. Constant definitions.

+ +

There are three constants which must be defined at +first. The are:

+ + + + + + +
+ +

EM_WSIZE:

+
+ +

Number of bytes in a machine word. This is the number of +bytes a simple loc instruction will put on the +stack.

+
+ + + + + + +
+ +

EM_PSIZE:

+
+ +

Number of bytes in a pointer. This is the number of +bytes a lal instruction will put on the stack.

+
+ + + + + + +
+ +

EM_BSIZE:

+
+ +

Number of bytes in the hole between AB and LB. The +calling sequence only saves LB on the stack so this constant +is equal to the pointer size.

+
+ +

2. Register definitions.

+ +

The only important register definition is the definition +of the registerpair AX. Since the rest of the +machine’s registers Y, PC, ST serve special purposes, +the code generator cannot use them.

+ +

2.1. Token definitions

+ +

There is a fake token. This token is put in the table, +since the code generator generator complains if it cannot +find one.

+ +

2.2. Token expression definitions.

+ +

The token expression is also a fake one. This token +expression is put in the table, since the code generator +generator complains if it cannot find one.

+ +

2.3. Code rules.

+ +

The code rule section is the largest section in the +table. They specify EM patterns, stack patterns, code to be +generated, etc. The syntax is:

+ + + + + + +
+ +

code

+
+ +

EM pattern ’|’ stack pattern ’|’ +code ’|’ stack replacement ’|’ EM +replacement ’|’

+
+ +

All patterns are optional, however there must be at +least one pattern present. If the EM pattern is missing the +rule becomes a rewriting rule or a coercion to be +used when code generation cannot continue because of an +invalid stack pattern. The code rules are preceeded by the +word CODE:.

+ +

2.3.1. The EM pattern.

+ +

The EM pattern consists of a list of EM mnemonics +followed by a boolean expression. Examples:

+ +

loe

+ +

will match a single loe instruction,

+ +

loc loc cif $1==2 && $2==8

+ +

is a pattern that will match

+ +

loc 2
+loc
8
+cif

+ +

and

+ +

lol inc stl $1==$3

+ +

will match for example

+ +

lol 6
+inc
+stl
6

+ +

A missing boolean expession evaluates to TRUE.

+ +

The code generator will match the longest EM pattern on +every occasion, if two patterns of the same length match the +first in the table will be chosen, while all patterns of +length greater than or equal to three are considered to be +of the same length.

+ +

2.3.2. The stack pattern.

+ +

The only stack pattern that can occur is R16, which +means that the registerpair AX contains the word on top of +the stack. If this is not the case a coersion occurs. This +coersion generates a "jsr Pop", which means that +the top of the stack is popped and stored in the +registerpair AX.

+ +

2.3.3. The code part.

+ +

The code part consists of three parts, stack cleanup, +register allocation, and code to be generated. All of these +may be omitted.

+ +

2.3.3.1. Stack cleanup.

+ +

When generating something like a branch instruction it +might be needed to empty the fake stack, that is, remove the +AX registerpair. This is done by the instruction +remove(ALL)

+ +

2.3.3.2. Register allocation.

+ +

If the machine code to be generated uses the +registerpair AX, this is signaled to the code generator by +the allocate(R16) instruction. If the registerpair AX +resides on the fake stack, this will result in a "jsr +Push", which means that the registerpair AX is pushed +on the stack and will be free for further use. If +registerpair AX is not on the fake stack nothing +happens.

+ +

2.3.3.3. Code to be generated.

+ +

Code to be generated is specified as a list of items of +the following kind:

+ + + + + + +
+ +

1)

+
+ +

A string in double quotes("This is a string"). +This is copied to the codefile and a newline (’0) is +appended. Inside the string all normal C string conventions +are allowed, and substitutions can be made of the following +sorts.

+
+ + + + + + + +
+ +

a)

+
+ +

$1, $2 etc. These are the operand of the corresponding +EM instructions and are printed according to there type. To +put a real ’$’ inside the string it must be +doubled (’$$’).

+
+ + + + + + + +
+ +

b)

+
+ +

%[1], %[2.reg], %[b.1] etc. these have there obvious +meaning. If they describe a complete token (%[1]) the +printformat for the token is used. If they stand fo a basic +term in an expression they will be printed according to +their type. To put a real ’%’ inside the string +it must be doubled (’%%’).

+
+ + + + + + + +
+ +

c)

+
+ +

%( arbitrary expression %). This allows inclusion of +arbitrary expressions inside strings. Usually not needed +very often, so that the akward notation is not too bad. Note +that %(%[1]%) is equivalent to %[1].

+
+ +

2.3.4. stack replacement.

+ +

The stack replacement is a possibly empty list of items +to be pushed on the fake stack. Three things can occur:

+ + + + + + +
+ +

1)

+
+ +

%[1] is used if the registerpair AX was on the fake +stack and is to be pushed back onto it.

+
+ + + + + + +
+ +

2)

+
+ +

%[a] is used if the registerpair AX is allocated with +allocate(R16) and is to be pushed onto the fake stack.

+
+ + + + + + + +
+ +

3)

+
+ +

It can also be empty.

+
+
+ +

2.3.5. EM replacement.

+ +

In exeptional cases it might be useful to leave part of +the an EM pattern undone. For example, a sdl +instruction might be split into two stl instructions +when there is no 4-byte quantity on the stack. The EM +replacement part allows one to express this. Example:

+ +

stl $1 stl $1+2

+ +

The instructions are inserted in the stream so they can +match the first part of a pattern in the next step. Note +that since the code generator traverses the EM instructions +in a strict linear fashion, it is impossible to let the EM +replacement match later parts of a pattern. So if there is a +pattern

+ +

loc stl $1==0 and the input is

+ +

loc 0 sdl 4

+ +

the loc 0 will be processed first, then the +sdl might be split into two stl

+ +

2.3.6. Move definitions.

+ +

This definition is a fake. This definition is put in the +table, since the code generator generator complains if it +cannot find one.

+ +

2.3.7. Test definitions.

+ +

Test definitions aren’t used by the table.

+ +

2.3.8. Stack definitions.

+ +

When the generator has to push the registerpair AX, it +must know how to do so. The machine code to be generated is +defined here.

+ +

3. Some remarks.

+ +

The above description of the machine table is a +description of the table for the MCS6500. It uses only a +part of the possibilities which the code generator generator +offers. For a more precise and detailed description see +[2].

+ +

THE BACK END TABLE.

+ +

1. Introduction.

+ +

The code rules are divided in 15 groups. These groups +are:

+ + + + + + + +
+ +

1.

+
+ +

Load instructions.

+
+
+ + + + + + + +
+ +

2.

+
+ +

Store instructions.

+
+
+ + + + + + + +
+ +

3.

+
+ +

Integer arithmetic instructions.

+
+
+ + + + + + + +
+ +

4.

+
+ +

Unsigned arithmetic instructions.

+
+
+ + + + + + + +
+ +

5.

+
+ +

Floating point arithmetic instructions.

+
+
+ + + + + + + +
+ +

6.

+
+ +

Pointer arithmetic instructions.

+
+
+ + + + + + + +
+ +

7.

+
+ +

Increment, decrement and zero instructions.

+
+
+ + + + + + + +
+ +

8.

+
+ +

Convert instructions.

+
+
+ + + + + + + +
+ +

9.

+
+ +

Logical instructions.

+
+
+ + + + + + + +
+ +

10.

+
+ +

Set manipulation instructions.

+
+
+ + + + + + + +
+ +

11.

+
+ +

Array instructions.

+
+
+ + + + + + + +
+ +

12.

+
+ +

Compare instructions.

+
+
+ + + + + + + +
+ +

13.

+
+ +

Branch instructions.

+
+
+ + + + + + + +
+ +

14.

+
+ +

Procedure call instructions.

+
+
+ + + + + + + +
+ +

15.

+
+ +

Miscellaneous instructions.

+
+
+ +

From all of these groups one or two typical EM pattern +will be explained in the next paragraphs. Comment is placed +between /* and */ (/* This is a comment */).

+ +

2. The instructions.

+ +

2.1. The load instructions.

+ +

In this group a typical instruction is lol A +lol instruction pushes the word at local base + +offset, where offset is the instructions argument, onto the +stack. Since the MCS6500 can only offset by 256 bytes, as +explaned at the memory addressing modes, there is a need for +two code rules in the table. One which can offset directly +and one that must explicit calculate the address of the +local.

+ +

2.1.1. The lol instruction with indirect offsetting.

+ +

In this case an indirect offsetted load from the second +local base is possible. The table content is:

+ +

lol IN($1) | |
+allocate(R16) /* allocate registerpair AX */
+"ldy #BASE+$1" /* load Y with the offset from the +second
+local base */
+"lda (LBl),y" /* load indirect the lowbyte of the +word */
+"tax" /* move register A to register X */
+"iny" /* increment register Y (offset) */
+"lda (LBl),y" /* load indirect the highbyte of the +word */
+| %[a] | | /* push the word onto the fake stack */

+ +

2.1.2. The lol instruction whose offset is to big.

+ +

In this case, the library subroutine "Lol" is +used. This subroutine expects the offset in registerpair AX, +then calculates the address of the local or parameter, and +loads it into registerpair AX. The table content is:

+ +

lol | |
+allocate(R16) /* allocate registerpair AX */
+"lda #[$1].h" /* load highbyte of offset into +register A */
+"ldx #[$1].l" /* load lowbyte of offset into +register X */
+"jsr Lol" /* perform the subroutine */
+| %[a] | | /* push word onto the fake stack */

+ +

2.2. The store instructions.

+ +

In this group a typical instruction is stl. A +stl instruction poppes a word from the stack and +stores it in the word at local base + offset, where offset +is the instructions argument. Here also is the need for two +code rules in the table as a result of the offset +limits.

+ +

2.2.1. The stl instruction with indirect offsetting.

+ +

In this case it an indirect offsetted store from the +second local base is possible. The table content is:

+ +

stl IN($1) | R16 | /* expect registerpair AX on +top of the
+fake stack */
+"ldy #BASE+1+$1" /* load Y with the offset from +the
+second local base */
+"sta (LBl),y" /* store the highbyte of the word +from A */
+"txa" /* move register X to register A */
+"dey" /* decrement offset */
+"sta (LBl),y" /* store the lowbyte of the word +from A */
+| | |

+ +

2.2.2. The stl instruction whose offset is to big.

+ +

In this case the library subroutine ’Stl’ is +used. This subroutine expects the offset in registerpair AX, +then calculates the address, poppes the word stores it at +its place. The table content is:

+ +

stl | |
+allocate(R16) /* allocate registerpair AX */
+"lda #[$1].h" /* load highbyte of offset in +register A */
+"ldx #[$1].l" /* load lowbyte of offset in +register X */
+"jsr Stl" /* perform the subroutine */
+| | |

+ +

2.3. Integer arithmetic instructions.

+ +

In this group typical instructions are adi and +mli. These instructions, in this table, are +implemented for 2-byte and 4-byte integers. The only +arithmetic instructions available on the MCS6500 are the ADC +(add with carry), and SBC (subtract with not(carry)). +Not(carry) here means that in a subtraction, the one’s +complement of the carry is taken. The absence of multiply +and division instructions forces the use of subroutines to +handle these cases. Because there are no registers left to +perform on the multiply and division, zero page is used +here. The 4-byte integer arithmetic is implemented, because +in C there exists the integer type long. A user is freely to +use the type long, but will pay in performance.

+ +

2.3.1. The adi instruction.

+ +

In case of the adi 2 (and sbi 2) +instruction there are many EM patterns, so that the +instruction can be performed in line in most cases. For the +worst case there exists a subroutine in the library which +deals with the EM instruction. In case of a adi 4 (or +sbi 4) there only is a subroutine to deal with it. A +table content is:

+ +

lol lol adi (IN($1) && IN($2) && +$3==2) | | /* is it in range */
+allocate(R16) /* allocate registerpair AX */
+"ldy #BASE+$1+1" /* load Y with offset for first +operand */
+"lda (LBl),y" /* load indirect highbyte first +operand */
+"pha" /* save highbyte first operand on hard_stack +*/
+"dey" /* decrement offset first operand */
+"lda (LBl),y" /* load indirect lowbyte first +operand */
+"ldy #BASE+$2" /* load Y with offset for second +operand */
+"clc" /* clear carry for addition */
+"adc (LBl),y" /* add the lowbytes of the operands +*/
+"tax" /* store lowbyte of result in place */
+"iny" /* increment offset second operand */
+"pla" /* get highbyte first operand */
+"adc (LBl),y" /* add the highbytes of the operands +*/
+| %[a] | | /* push the result onto the fake stack */

+ +

2.3.2. The mli instruction.

+ +

The mli 2 instruction uses most the subroutine +’Mlinp’. This subroutine expects the +multiplicand in zero page at locations ARTH, ARTH+1, while +the multiplier is in zero page locations ARTH+2, ARTH+3. For +a description of the algorithms used for multiplication and +division, see [3]. A table content is:

+ +

lol lol mli (IN($1) && IN($2) && +$3==2) | |
+allocate(R16) /* allocate registerpair AX */
+"ldy #BASE+$1" /* load Y with offset of +multiplicand */
+"lda (LBl),y" /* load indirect lowbyte of +multiplicand */
+"sta ARTH" /* store lowbyte in zero page */
+"iny" /* increment offset of multiplicand */
+"lda (LBl),y" /* load indirect highbyte of +multiplicand */
+"sta ARTH+1" /* store highbyte in zero page */
+"ldy #BASE+$2" /* load Y with offset of multiplier +*/
+"lda (LBl),y" /* load indirect lowbyte of +multiplier */
+"sta ARTH+2" /* store lowbyte in zero page */
+"iny" /* increment offset of multiplier */
+"lda (LBl),y" /* load indirect highbyte of +multiplier */
+"sta ARTH+3" /* store highbyte in zero page */
+"jsr Mlinp" /* perform the multiply */
+| %[a] | | /* push result onto fake stack */

+ +

2.4. The unsgned arithmetic instructions.

+ +

Since unsigned addition an subtraction is performed in +the same way as signed addition and subtraction, these cases +are dealt with by an EM replacement. For mutiplication and +division there are special subroutines.

+ +

2.4.1. Unsigned addition.

+ +

This is an example of the EM replacement strategy.

+ +

lol lol adu | | | | lol $1 lol $2 +adi $3 |

+ +

2.5. Floating point arithmetic.

+ +

Floating point arithmetic isn’t implemented in +this table.

+ +

2.6. Pointer arithmetic instructions.

+ +

A typical pointer arithmetic instruction is adp +2. This instruction adds an offset and a pointer. A table +content is:

+ +

adp | | | | loc $1 adi 2 |

+ +

2.7. Increment, decrement and zero instructions.

+ +

In this group a typical instruction is inl , +which increments a local or parameter. The MCS6500 +doesn’t have an instruction to increment the +accumulator A, so the ’ADC’ instruction must be +used. A table content is:

+ +

inl IN($1) | |
+allocate(R16) /* allocate registerpair AX */
+"ldy #BASE+$1" /* load Y with offset of the local +*/
+"clc" /* clear carry for addition */
+"lda (LBl),y" /* load indirect lowbyte of local +*/
+"adc #1" /* increment lowbyte */
+"sta (LBl),y" /* restore indirect the incremented +lowbyte */
+"bcc 1f" /* if carry is clear then ready */
+"iny" /* increment offset of local */
+"lda (LBl),y" /* load indirect highbyte of local +*/
+"adc #0" /* add carry to highbyte */
+"sta (LBl),y\n1:" /* restore indirect the highbyte +*/

+ +

If the offset of the local or parameter is to big, first +the local or parameter is fetched, than incremented, and +then restored.

+ +

2.8. Convert instructions.

+ +

In this case there are two convert instructions which +really do something. One of them is in line code, and deals +with the extension of a character (1-byte) to an integer. +The other one is a subroutine which handles the conversion +between 2-byte integers and 4-byte integers.

+ +

2.8.1. The in line conversion.

+ +

The table content is:

+ +

loc loc cii $1==1 && $2==2 | R16 |
+"txa" /* see if sign extension is needed */
+"bpl 1f" /* there is no need for sign extension +*/
+"lda #0FFh" /* sign extension here */
+"bne 2f" /* conversion ready */
+"1: lda #0\n2:" /* no sign extension here */

+ +

2.9. Logical instructions.

+ +

A typical instruction in this group is the logical +and on two 2-byte words. The logical and on +groups of more than two bytes (max 254) is also possible and +uses a library subroutine.

+ +

2.9.1. The logical and on 2-byte groups.

+ +

The table content is:

+ +

and $1==2 | R16 | /* one group must be on the +fake stack */
+"sta ARTH+1" /* temporary save of first group +highbyte */
+"stx ARTH" /* temporary save of first group +lowbyte */
+"jsr Pop" /* pop second group from the stack +*/
+"and ARTH+1" /* logical and on highbytes */
+"pha" /* temporary save the result’s +highbyte */
+"txa" /* logical and can only be done in A */
+"and ARTH" /* logical and on lowbytes */
+"tax" /* restore results lowbyte */
+"pla" /* restore results highbyte */
+| %[1] | | /* push result onto fake stack */

+ +

2.10. Set manipulation instructions.

+ +

A typical EM pattern in this group is loc inn zeq +$1>0 && $1<16 && $2==2. This EM +pattern works on sets of 16 bits. Sets can be bigger (max +256 bytes = 2048 bits), but than a library routine is used +instead of in line code. The table content of the above EM +pattern is:

+ +

loc inn zeq $1>0 && $1<16 +&& $2==2 | R16 |
+"ldy #$1+1" /* load Y with bit number */
+"stx ARTH" /* cannot rotate X, so use zero page +*/
+"1: lsr a" /* right shift A */
+"ror ARTH" /* right rotate zero page location +*/
+"dey" /* decrement Y */
+"bne 1b" /* shift $1 times */
+"bcc $1" /* no carry, so bit is zero */

+ +

2.11. Array instructions.

+ +

In this group a typical EM pattern is lae lar +defined(rom(1,3)) | | | | lae $1 aar $2 +loi rom(1,3). This pattern uses the aar +instruction, which is part of a typical EM pattern:

+ +

lae aar $2==2 && rom(1,3)==2 && +rom(1,1)==0 | R16 | /* registerpair AX contains the index in +the array */
+"pha" /* save highbyte of index */
+"txa" /* move lowbyte of index to A */
+"asl a" /* shift left lowbyte == 2 times lowbyte +*/
+"tax" /* restore lowbyte */
+"pla" /* restore highbyte */
+"rol a" /* rotate left highbyte == 2 times +highbyte */
+| %[1] | adi 2 | /* push new index, add to lowerbound array +*/

+ +

2.12. Compare instructions.

+ +

In this group all EM patterns are performed by calling a +subroutine. Subroutines are used here because comparison is +only possible byte by byte. This means a lot of code, and +since compare are used frequently a lot of in line code +would be generated, and thus reducing the space left for the +software stack. These subroutines can be found in the +library.

+ +

2.13. Branch instructions.

+ +

A typical branch instruction is beq. The table +content for it is:

+ +

beq | R16 |
+"sta BRANCH+1" /* save highbyte second operand in +zero page */
+"stx BRANCH" /* save lowbyte second operand in +zero page */
+"jsr Pop" /* pop the first operand */
+"cmp BRANCH+1" /* compare the highbytes */
+"bne 1f" /* there not equal so go on */
+"cpx BRANCH" /* compare the lowbytes */
+"beq $1\n1:" /* lowbytes are also equal, so branch +*/

+ +

Another typical instruction in this group is zeq. +The table content is:

+ +

zeq | R16 |
+"tay" /* move A to Y for setting testbits */
+"bmi $1" /* highbyte s minus so branch */
+"txa" /* move X to A for setting testbits */
+"beq $1\n1:" /* lowbyte also zero, thus branch +*/

+ +

2.14. Procedure call instructions.

+ +

In this group one code generation might seem a little +akward. It is the EM instruction cai which generates +a ’jsr Indir’. This is because there is no +indirect jump_subroutine in the MCS6500. The only solution +is to store the address in zero page, and then do a +’jsr’ to a known label. At this label there must +be an indirect jump instruction, which perform a jump to the +address stored in zero page. In this case the label is +Indir, and the address is stored in zero page at the +addresses ADDR, ADDR+1. The tabel content is:

+ +

cai | R16 |
+"stx ADDR" /* store lowbyte of address in zero +page */
+"sta ADDR+1" /* store highbyte of address in zero +page */
+"jsr Indir" /* use the indirect jump */
+| | |

+ +

2.15. Miscellaneous instructions.

+ +

In this group, as the name suggests, there is no typical +EM instruction or EM pattern. Most of the MCS6500 code to be +generated uses a library subroutine or is +straightforward.

+ +

PERFORMANCE.

+ +

1. Introduction.

+ +

To measure the performance of the back end table some +timing tests are done. What to time? In this case, the +execution time of several Pascal statements are timed. +Statements in C, which have a Pascal equivalence are timed +also. The statements are timed as follows. A test program is +been written, which executes two nested for_loops from 1 to +1.000. Within these for_loops the statement, which is to be +tested, is placed, so the statement will be executed +1.000.000 times. Then the same program is executed without +the test statement. The time difference between the two +executions is the time neccesairy to execute the test +statement 1.000.000 times. The total time to execute the +test statement requires thus the time difference divided by +1.000.000.

+ +

1. Testing Pascal statements.

+ +

The next statements are tested.

+ + + + + + + +
+ +

1)

+
+ +

int1 := 0;

+
+
+ + + + + + + +
+ +

2)

+
+ +

int1 := int2 - 1;

+
+
+ + + + + + + +
+ +

3)

+
+ +

int1 := int1 + 1;

+
+
+ + + + + + + +
+ +

4)

+
+ +

int1 := icon1 - icon2;

+
+
+ + + + + + + +
+ +

5)

+
+ +

int1 := icon2 div icon1;

+
+
+ + + + + + + +
+ +

6)

+
+ +

int1 := int2 * int3;

+
+
+ + + + + + + +
+ +

7)

+
+ +

bool := (int1 < 0);

+
+
+ + + + + + + +
+ +

8)

+
+ +

bool := (int1 < 3);

+
+
+ + + + + + + +
+ +

9)

+
+ +

bool := ((int1 > 3) or (int1 < 3))

+
+
+ + + + + + +
+ +

10)

+
+ +

case int1 of 1: bool := false; 2: bool := true end;

+
+ + + + + + + +
+ +

11)

+
+ +

if int1 = 0 then int2 := 3;

+
+
+ + + + + + + +
+ +

12)

+
+ +

while int1 > 0 do int1 := int1 - 1;

+
+
+ + + + + + + +
+ +

13)

+
+ +

m := a[k];

+
+
+ + + + + + + +
+ +

14)

+
+ +

let2 := [’a’..’c’];

+
+
+ + + + + + + +
+ +

15)

+
+ +

P3(x);

+
+
+ + + + + + + +
+ +

16)

+
+ +

dum := F3(x);

+
+
+ + + + + + + +
+ +

17)

+
+ +

s.overhead := 5400;

+
+
+ + + + + + + +
+ +

18)

+
+ +

with s do overhead := 5400;

+
+
+ +

These statement were tested in a procedure test.

+ +

procedure test;
+var i, j, ... : integer;
+bool : boolean;
+let2 : set of char;
+begin
+for i := 1 to 1000
+for j := 1 to 1000
+STATEMENT
+end;

+ +

STATEMENT is one of the statements as shown above, or it +is the empty statement. The assignment of used variables, if +neccesairy, is done before the first for_loop. In case of +the statement which uses the procedure call, statement 15, a +dummy procedure is declared whose body is empty. In case of +the statement which uses the function, statement 16, this +function returns its argument. for the timing of C +statements a similar test program was written.

+ +

main()
+{
+int i, j, ...;
+for (i = 1; i <= 1000; i++)
+for (j = 1; j <= 1000; j++)
+STATEMENT
+}

+ +

2. The results.

+ +

Here are tables with the results of the time +measurments. Times are in microseconds (10^-6). Some +statements appear twice in the tables. In the second case an +array of 200 integers was declerated before the variable to +be tested, so this variable cannot be accessed by indirect +addressing from the second local base. This results in a +larger execution time of the statement to be tested. The +column 68000 contains the times measured on a Bleasdale, +M68000 based, computer. The times in column pdp are measured +on a DEC pdp11/44, where the times from column 6500 come +from a BBC microcomputer.

+ +

+ +

+ +

3. Pascal statements which don’t have a C equivalent.

+ +

At first, the two statements who perform an operation on +constants are left out. These are left out while the C front +end does constant folding, while the Pascal front end +doesn’t. So in C the statements int1 = icon1 + icon2; +and int1 = icon1 / icont2; will use the same amount of time +since the expression is evaluated by the front end. The two +other statements (let2 := +[’a’..’c’]; and with s +do overhead := 5400;), aren’t included in the C +statement timing table, because there constructs do not +exist in C. Although in C there can be direct bit +manipulation, and thus can be used to implement sets I have +not used it here. The with statement does not exists +in C and there is nothing with the slightest resemblance to +it.

+ +

At first sight in the table , it looked if there is no +much difference in the times for the M68000 and the +pdp11/44, in comparison with the times needed by the +MCS6500. To verify this impression, I calculated the +correlation coefficient between the times of the M68000 and +pdp11/44. It turned out to be 0.997 for both the Pascal time +tests and the C time tests. Since the correlation +coefficient is near to one and the difference between the +times is small, they can be considered to be the same as +seen from the times of the MCS6500. Then I have tried to +make a grafic of the times from the M68000 and the MCS6500. +Well, there was’t any correlation to been seen, taken +all the times. The only correlation one could see, with some +effort, was in the times for the first three Pascal +statements. The two first C statements show also a +correlation, which two points always do.

+ +

Also the three Pascal statements case , if +, and while have a correlation coefficient of 0.999. +This is probably because the case statement uses a +subroutine in both cases and the other two statements +if and, while generate in line code. The last +two Pascal statements use the same time, since the front end +wil generate the same EM code for both.

+ +

The independence between the rest of the test times is +because in these cases the object code for the MCS6500 uses +library subroutines, while the other processors can handle +the EM code with in line code.

+ +

It is clear that the MCS6500 is a slower device, it +needs longer execution times, the need of more library +subroutines, but there is no constant factor between it +execution times and those of other processors.

+ +

The slowing down of the MCS6500 as result of the need of +a library subroutine is illustrated by the muliplication +statement. The MCS6500 needs a library subroutine, while the +other two processors have a machine instruction to perform +the multiply. This results in a factor of 48.5, when the +operands can be accessed indirect by the MCS6500. When the +MCS6500 cannot access the operands indirectly the situation +is even worse. The slight differences between the MCS6500 +execution times for Pascal statements and C statements is +probably the result of the front end, and thus beyond the +scope of this discussion.

+ +

Another timing test is done in C on the statement k = i ++ j + 1983. This statement is tested on many UNIX*

+ +

+ +

systems. For a complete list see appendix A. The slowest +one is the IBM XT, which runs on a 8088 microprocessor. The +fasted one is the Amdahl computer. Here is short table to +illustrate the performance of the MCS6500.

+ +

+ +

The MCS6500 is three times slower than the IBM XT, but +threehundred times slower than the Amdahl. The reason why +the times on the IBM XT and the MCS6500 are the same for +short’s and int’s, is that most C compilers make +the types short and integer the same size on 16-bit +machines. In this project the MCS6500 is regarded as a +16-bit machine.

+ +

4. Length tests.

+ +

I have also compiled several programs written in Pascal +and C to see if there is a resemblance between the number of +bytes generated in the machine’s language. In the +tables:

+ + + + + + +
+ +

length:

+
+ +

The number of bytes of the source program.

+
+ + + + + + +
+ +

68000:

+
+ +

The number of bytes of the a.out file for a M68000.

+
+ + + + + + +
+ +

pdp:

+
+ +

The number of bytes of the a.out file for a +pdp11/44.

+
+ + + + + + +
+ +

6500:

+
+ +

The number of bytes of the a.out file for a MCS6500.

+
+ +

These are the results:

+ +

+ +

+ +

In contrast to the execution times of the test +statements, the object code files sizes show a constant +factor between them. After calculating the correlation +coefficient, I have calculated the line fitted between +sizes.

+ +

+ +

+ +

+ +

As seen from the tables above the correlation +coefficient for Pascal programs is better than the ones for +C programs. Thus the line fits best for Pascal programs. +With the formula of the best fitted line one can now +estimate the size of the object code, which a program needs, +for a MCS6500 without having the compiler at hand. One also +can see from these formula that the object code generated +for a MCS6500 is about 1.8 times more than for the other +processors. Since the number of bytes in the source file +havily depends on the programmer, how many spaces he or she +uses, the size of the indenting in structured programs, +etc., there is no correlation between the size of the source +file and the size of the object file. Also the use of +comments has its influence on the size.

+ +

SUMMARY.

+ +

1. Summary

+ +

In this chapter some final conclusions are made.

+ +

In spite of its simplicity, the MCS6500 is strong enough +to implement a EM machine. A serious deficy of the MCS6500 +is the missing of 16-bit general purpose registers, and +especially the missing of a 16-bit stackpointer. As pointed +out before, one 16-bit register can be simulated by a pair +of 8-bit registers, in fact, the accumulator A to hold the +highbyte, and the index register X to hold the lowbyte of +the word. By lack of a 16-bit stackpointer, zero page must +be used to hold a stackpointer and there are also two +subroutines needed for manipulating the stack (Push and +Pop).

+ +

As seen at the time tests, the simple instruction set of +the MCS6500 forces the use of library subroutines. These +library subroutines increas the execution time of the +programs.

+ +

The sizes of the object code files show a strong +correlation in contrast to the execution times. With this +correlatiuon one canestimate the size of a program if it is +to be used on a MCS6500.

+ +

1. REFERENCES.

+ + + + + + +
+ +

1.

+
+ +

Osborn, A., Jacobson, S., and Kane, J. The Mos +Technology MCS6500. An Introduction to Microcomputers +, Volume II, Some Real Products (june 1977) chap. 9.

+
+ + + + + +
+

A hardware description of some real existing CPU’s, +such as the Intel Z80, MCS6500, etc. is given in this +book.

+
+ + + + + + +
+ +

2.

+
+ +

van Staveren, H. The table driven code generator from +the Amsterdam Compiler Kit. Vrije Universiteit, Amsterdam, +(July 11, 1983).

+
+ + + + + +
+

The defining document for writing a back end table.

+
+ + + + + + +
+ +

3.

+
+ +

Tanenbaum, A.S. Structured Computer Organization. +Prentice Hall. (1976).

+
+ + + + + +
+

In this book computers are described as a hierarchy of +levels, with each one performing some well-defined +function.

+
+
+ + diff --git a/src/olddocs/6500.pdf b/src/olddocs/6500.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c5b0f7bb5f92ad819d8141e8223021d73a55a0b5 GIT binary patch literal 67952 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 I_EF0J0U}{0!2kdN literal 0 HcmV?d00001 diff --git a/src/olddocs/LLgen.html b/src/olddocs/LLgen.html new file mode 100644 index 000000000..758edc82c --- /dev/null +++ b/src/olddocs/LLgen.html @@ -0,0 +1,1166 @@ + + + + + + +LLgen, an extended LL(1) parser generator + + + + +

LLgen, an extended LL(1) parser generator

+1. Introduction
+2. The Extended Context-Free Syntax
+3. Grammar Specifications
+4. Actions
+5. Error Recovery
+6. Ambiguities and conflicts
+7. The LLgen working environment
+8. Programs with more than one parser
+References
+References
+Appendix A : LLgen Input Syntax
+Appendix B : An example
+Appendix C. How to use LLgen .
+ +
+ +

ABSTRACT

+ +

Ceriel J. H. Jacobs
+Dept. of Mathematics and Computer Science
+Vrije Universiteit
+Amsterdam, The Netherlands

+ +

LLgen provides a tool for generating an efficient +recursive descent parser with no backtrack from an Extended +Context Free syntax. The LLgen user specifies the +syntax, together with code describing actions associated +with the parsing process. LLgen turns this +specification into a number of subroutines that handle the +parsing process.

+ +

The grammar may be ambiguous. LLgen contains both +static and dynamic facilities to resolve these +ambiguities.

+ +

The specification can be split into several files, for +each of which LLgen generates an output file +containing the corresponding part of the parser. +Furthermore, only output files that differ from their +previous version are updated. Other output files are not +affected in any way. This allows the user to recompile only +those output files that have changed.

+ +

The subroutine produced by LLgen calls a user +supplied routine that must return the next token. This way, +the input to the parser can be split into single characters +or higher level tokens.

+ +

An error recovery mechanism is generated almost +completely automatically. It is based on so called +default choices, which are implicitly or explicitly +specified by the user.

+ +

LLgen has succesfully been used to create +recognizers for Pascal, C, and Modula-2.

+ +

1. Introduction

+ +

LLgen provides a tool for generating an efficient +recursive descent parser with no backtrack from an Extended +Context Free syntax. A parser generated by LLgen will +be called LLparse for the rest of this document. It +is assumed that the reader has some knowledge of LL(1) +grammars and recursive descent parsers. For a survey on the +subject, see reference (2).

+ +

Extended LL(1) parsers are an extension of LL(1) +parsers. They are derived from an Extended Context-Free +(ECF) syntax instead of a Context-Free (CF) syntax. ECF +syntax is described in section 2. Section 3 provides an +outline of a specification as accepted by LLgen and +also discusses the lexical conventions of grammar +specification files. Section 4 provides a description of the +way the LLgen user can associate actions with the +syntax. These actions must be written in the programming +language C, 4 which also is +the target language of LLgen. The error recovery +technique is discussed in section 5. This section also +discusses what the user can do about it. Section 6 discusses +the facilities LLgen offers to resolve ambiguities +and conflicts. LLgen offers facilities to resolve +them both at parser generation time and during the execution +of LLparse. Section 7 discusses the LLgen +working environment. It also discusses the lexical analyzer +that must be supplied by the user. This lexical analyzer +must read the input stream and break it up into basic input +items, called tokens for the rest of this document. +Appendix A gives a summary of the LLgen input syntax. +Appendix B gives an example. It is very instructive to +compare this example with the one given in reference (3). It +demonstrates the struggle LLparse and other LL(1) +parsers have with expressions. Appendix C gives an example +of the LLgen features allowing the user to recompile +only those output files that have changed, using the +make program. 1

+ +

2. The Extended Context-Free Syntax

+ +

The extensions of an ECF syntax with respect to an +ordinary CF syntax are:

+ + + + + + +
+ +

1.

+
+ +

An ECF syntax contains the repetition operator: +"N" (N represents a positive integer).

+
+ + + + + + +
+ +

2.

+
+ +

An ECF syntax contains the closure set operator without +and with upperbound: "*" and "*N".

+
+ + + + + + +
+ +

3.

+
+ +

An ECF syntax contains the positive closure set operator +without and with upperbound: "+" and +"+N".

+
+ + + + + + +
+ +

4.

+
+ +

An ECF syntax contains the optional operator: +"?", which is a shorthand for "*1".

+
+ + + + + + +
+ +

5.

+
+ +

An ECF syntax contains parentheses "[" and +"]" which can be used for grouping.

+
+ +

We can describe the syntax of an ECF syntax with an ECF +syntax :

+
     grammar         : rule +
+                     ;
+
+ +

This grammar rule states that a grammar consists of one +or more rules.

+
     rule            : nonterminal ’:’ productionrule ’;’
+                     ;
+
+ +

A rule consists of a left hand side, the nonterminal, +followed by ":", the produce symbol, +followed by a production rule, followed by a ";", +indicating the end of the rule.

+
     productionrule  : production [ ’|’ production ]*
+                     ;
+
+ +

A production rule consists of one or more alternative +productions separated by "|". This symbol is +called the alternation symbol.

+
     production      : term *
+                     ;
+
+ +

A production consists of a possibly empty list of terms. +So, empty productions are allowed.

+
     term            : element repeats
+                     ;
+
+ +

A term is an element, possibly with a repeat +specification.

+
     element         : LITERAL
+                     | IDENTIFIER
+                     | ’[’ productionrule ’]’
+                     ;
+
+ +

An element can be a LITERAL, which basically is a single +character between apostrophes, it can be an IDENTIFIER, +which is either a nonterminal or a token, and it can be a +production rule between square parentheses.

+
     repeats         : ’?’
+                     | [ ’*’ | ’+’ ] NUMBER ?
+                     | NUMBER ?
+                     ;
+
+ +

These are the repeat specifications discussed above. +Notice that this specification may be empty.

+ +

The class of ECF languages is identical with the class +of CF languages. However, in many cases recursive +definitions of language features can now be replaced by +iterative ones. This tends to reduce the number of +nonterminals and gives rise to very efficient recursive +descent parsers.

+ +

3. Grammar Specifications

+ +

The major part of a LLgen grammar specification +consists of an ECF syntax specification. Names in this +syntax specification refer to either tokens or nonterminal +symbols. LLgen requires token names to be declared as +such. This way it can be avoided that a typing error in a +nonterminal name causes it to be accepted as a token name. +The token declarations will be discussed later. A name will +be regarded as a nonterminal symbol, unless it is declared +as a token name. If there is no production rule for a +nonterminal symbol, LLgen will complain.

+ +

A grammar specification may also include some C +routines, for instance the lexical analyzer and an error +reporting routine. Thus, a grammar specification file can +contain declarations, grammar rules and C-code.

+ +

Blanks, tabs and newlines are ignored, but may not +appear in names or keywords. Comments may appear wherever a +name is legal (which is almost everywhere). They are +enclosed in /* ... */, as in C. Comments do not nest.

+ +

Names may be of arbitrary length, and can be made up of +letters, underscore "_" and non-initial digits. +Upper and lower case letters are distinct. Only the first 50 +characters are significant. Notice however, that the names +for the tokens will be used by the C-preprocessor. The +number of significant characters therefore depends on the +underlying C-implementation. A safe rule is to make the +identifiers distinct in the first six characters, case +ignored.

+ +

There are two kinds of tokens: those that are declared +and are denoted by a name, and literals.

+ +

A literal consists of a character enclosed in +apostrophes "’". The "\" is an +escape character within literals. The following escapes are +recognized :

+ +

+ +

Names representing tokens must be declared before they +are used. This can be done using the +"%token" keyword, by writing

+
%token  name1, name2, . . . ;
+
+ +

LLparse is designed to recognize special +nonterminal symbols called start symbols. +LLgen allows for more than one start symbol. Thus, +grammars with more than one entry point are accepted. The +start symbols must be declared explicitly using the +"%start" keyword. It can be used whenever a +declaration is legal, f.i.:

+
%start LLparse, specification ;
+
+ +

declares "specification" as a start symbol and +associates the identifier "LLparse" with it. +"LLparse" will now be the name of the C-function +that must be called to recognize +"specification".

+ +

4. Actions

+ +

LLgen allows arbitrary insertions of actions +within the right hand side of a production rule in the ECF +syntax. An action consists of a number of C statements, +enclosed in the brackets "{" and +"}".

+ +

LLgen generates a parsing routine for each rule +in the grammar. The actions supplied by the user are just +inserted in the proper place. There may also be declarations +before the statements in the action, as the "{" +and "}" are copied into the target code along with +the action. The scope of these declarations terminates with +the closing bracket "}" of the action.

+ +

In addition to actions, it is also possible to declare +local variables in the parsing routine, which can then be +used in the actions. Such a declaration consists of a number +of C variable declarations, enclosed in the brackets +"{" and "}". It must be placed right in +front of the ":" in the grammar rule. The scope of +these local variables consists of the complete grammar +rule.

+ +

In order to facilitate communication between the actions +and LLparse, the parsing routines can be given C-like +parameters. Each parameter must be declared separately, and +each of these declarations must end with a semicolon. For +the last parameter, the semicolon is optional.

+ +

So, for example

+
expr(int *pval;) { int fact; } :
+                /*
+                 * Rule with one parameter, a pointer to an int.
+                 * Parameter specifications are ordinary C declarations.
+                 * One local variable, of type int.
+                 */
+        factor (&fact)          { *pval = fact; }
+                /*
+                 * factor is another nonterminal symbol.
+                 * One actual parameter is supplied.
+                 * Notice that the parameter passing mechanism is that
+                 * of C.
+                 */
+        [ ’+’ factor (&fact)    { *pval += fact; } ]*
+                /*
+                 * remember the ’*’ means zero or more times
+                 */
+        ;
+
+
+ +

is a rule to recognize a number of factors, separated by +"+", and to compute their sum.

+ +

LLgen generates C code, so the parameter passing +mechanism is that of C, as is shown in the example +above.

+ +

Actions often manipulate attributes of the token just +read. For instance, when an identifier is read, its name +must be looked up in a symbol table. Therefore, LLgen +generates code such that at a number of places in the +grammar rule it is defined which token has last been read. +After a token, the last token read is this token. After a +"[" or a "|", the last token read is the +next token to be accepted by LLparse. At all other +places, it is undefined which token has last been read. The +last token read is available in the global integer variable +LLsymb.

+ +

The user may also specify C-code wherever a +LLgen-declaration is legal. Again, this code must be +enclosed in the brackets "{" and "}". +This way, the user can define global declarations and +C-functions. To avoid name-conflicts with identifiers +generated by LLgen, LLparse only uses names +beginning with "LL"; the user should avoid such +names.

+ +

5. Error Recovery

+ +

The error recovery technique used by LLgen is a +modification of the one presented in reference (7). It is +based on default choices, which just are what the +word says, default choices at every point in the grammar +where there is a choice. Thus, in an alternation, one of the +productions is marked as a default choice, and in a term +with a non-fixed repetition specification there will also be +a default choice (between doing the term (once more) and +continuing with the rest of the production in which the term +appears).

+ +

When LLparse detects an error after having parsed +the string s, the default choices enable it to +compute one syntactically correct continuation, consisting +of the tokens t 1 +...t n , such that +st 1 ...t +n is a string of tokens +that is a member of the language defined by the grammar. +Notice, that the computation of this continuation must +terminate, which implies that the default choices may not +invoke recursive rules.

+ +

At each point in this continuation, a certain number of +other tokens could also be syntactically correct, f.i. the +token t is syntactically correct at point t +i in this continuation, if +the string st 1 ...t +i ts +1 is a string of the language +defined by the grammar for some string s +1 and i >= 0.

+ +

The set T containing all these tokens (including +t 1 ,...,t +n ) is computed. Next, +LLparse discards zero or more tokens from its input, +until a token tT is found. The error +is then corrected by inserting i (i >= 0) tokens t +1 ...t +i , such that the string +st 1 ...t +i ts +1 is a string of the language +defined by the grammar, for some s +1 . Then, normal parsing is +resumed.

+ +

The above is difficult to implement in a recursive +decent parser, and is not the way LLparse does it, +but the effect is the same. In fact, LLparse +maintains a list of tokens that may not be discarded, which +is adjusted as LLparse proceeds. This list is just a +representation of the set T mentioned above. When an +error occurs, LLparse discards tokens until a token +t that is a member of this list is found. Then, it +continues parsing, following the default choices, inserting +tokens along the way, until this token t is legal. +The selection of the default choices must guarantee that +this will always happen.

+ +

The default choices are explicitly or implicitly +specified by the user. By default, the default choice in an +alternation is the alternative with the shortest possible +terminal production. The user can select one of the other +productions in the alternation as the default choice by +putting the keyword "%default" in front of +it.

+ +

By default, for terms with a repetition count containing +"*" or "?" the default choice is to +continue with the rest of the rule in which the term +appears, and

+
                term+
+
+ +

is treated as

+
                term term* .
+
+ +

It is also clear, that it can never be the default +choice to do the term (once more), because this could cause +the parser to loop, inserting tokens forever. However, when +the user does not want the parser to skip tokens that would +not have been skipped if the term would have been the +default choice, the skipping of such a term can be prevented +by using the keyword "%persistent". For +instance, the rule

+
commandlist : command* ;
+
+ +

could be changed to

+
commandlist : [ %persistent command ]* ;
+
+ +

The effects of this in case of a syntax error are +twofold: The set T mentioned above will be extended +as if "command" were in the default production, so +that fewer tokens will be skipped. Also, if the first token +that is not skipped is a member of the subset of T +arising from the grammar rule for "command", +LLparse will enter that rule. So, in fact the default +choice is determined dynamically (by LLparse). Again, +LLgen checks (statically) that LLparse will +always terminate, and if not, LLgen will +complain.

+ +

An important property of this error recovery method is +that, once a rule is started, it will be finished. This +means that all actions in the rule will be executed +normally, so that the user can be sure that there will be no +inconsistencies in his data structures because of syntax +errors. Also, as the method is in fact error correcting, the +actions in a rule only have to deal with syntactically +correct input.

+ +

6. Ambiguities and conflicts

+ +

As LLgen generates a recursive descent parser +with no backtrack, it must at all times be able to determine +what to do, based on the current input symbol. +Unfortunately, this cannot be done for all grammars. Two +kinds of conflicts can arise :

+ + + + + + +
+ +

1)

+
+ +

the grammar rule is of the form "production1 | +production2", and LLparse cannot decide which +production to chose. This we call an alternation +conflict.

+
+ + + + + + +
+ +

2)

+
+ +

the grammar rule is of the form "[ productionrule +]...", where ... specifies a non-fixed repetition +count, and LLparse cannot decide whether to choose +"productionrule" once more, or to continue. This +we call a repetition conflict.

+
+ +

There can be several causes for conflicts: the grammar +may be ambiguous, or the grammar may require a more complex +parser than LLgen can construct. The conflicts can be +examined by inspecting the verbose (-v) option output +file. The conflicts can be resolved by rewriting the grammar +or by using conflict resolvers. The mechanism +described here is based on the attributed parsing of +reference (6).

+ +

An alternation conflict can be resolved by putting an +if condition in front of the first conflicting +production. It consists of a "%if" followed +by a C-expression between parentheses. LLparse will +then evaluate this expression whenever a token is met at +this point on which there is a conflict, so the conflict +will be resolved dynamically. If the expression evaluates to +non-zero, the first conflicting production is chosen, +otherwise one of the remaining ones is chosen.

+ +

An alternation conflict can also be resolved using the +keywords "%prefer" or +"%avoid". "%prefer" is +equivalent in behaviour to "%if (1)". +"%avoid" is equivalent to "%if +(0)". In these cases however, +"%prefer" and "%avoid" +should be used, as they resolve the conflict statically and +thus give rise to better C-code.

+ +

A repetition conflict can be resolved by putting a +while condition right after the opening parentheses. +This while condition consists of a "%while" +followed by a C-expression between parentheses. Again, +LLparse will then evaluate this expression whenever a +token is met at this point on which there is a conflict. If +the expression evaluates to non-zero, the repeating part is +chosen, otherwise the parser continues with the rest of the +rule. Appendix B will give an example of these features.

+ +

A useful aid in writing conflict resolvers is the +"%first" keyword. It is used to declare a +C-macro that forms an expression returning 1 if the +parameter supplied can start a specified nonterminal, +f.i.:

+
%first fmac, nonterm ;
+
+
+ +

declares "fmac" as a macro with one parameter, +whose value is a token number. If the parameter X can start +the nonterminal "nonterm", "fmac(X)" is +true, otherwise it is false.

+ +

7. The LLgen working environment

+ +

LLgen generates a number of files: one for each +input file, and two other files: Lpars.c and +Lpars.h. Lpars.h contains +"#-define"s for the tokennames. Lpars.c +contains the error recovery routines and tables. Only those +output files that differ from their previous version are +updated. See appendix C for a possible application of this +feature.

+ +

The names of the output files are constructed as +follows: in the input file name, the suffix after the last +point is replaced by a "c". If no point is present +in the input file name, ".c" is appended to it. +LLgen checks that the filename constructed this way +in fact represents a previous version, or does not exist +already.

+ +

The user must provide some environment to obtain a +complete program. Routines called main and +LLmessage must be defined. Also, a lexical analyzer +must be provided.

+ +

The routine main must be defined, as it must be +in every C-program. It should eventually call one of the +startsymbol routines.

+ +

The routine LLmessage must accept one parameter, +whose value is a token number, zero or -1.
+A zero parameter indicates that the current token (the one +in the external variable LLsymb) is deleted.
+A -1 parameter indicates that the parser expected end of +file, but didn’t get it. The parser will then skip +tokens until end of file is detected.
+A parameter that is a token number (a positive parameter) +indicates that this token is to be inserted in front of the +token currently in LLsymb. The user can give the +token the proper attributes. Also, the user must take care, +that the token currently in LLsymb is again returned +by the next call to the lexical analyzer, with the +proper attributes. So, the lexical analyzer must have a +facility to push back one token.

+ +

The user may also supply his own error recovery +routines, or handle errors differently. For this purpose, +the name of a routine to be called when an error occurs may +be declared using the keyword %onerror. This routine +takes two parameters. The first one is either the token +number of the token expected, or 0. In the last case, the +error occurred at a choice. In both cases, the routine must +ensure that the next call to the lexical analyser returns +the token that replaces the current one. Of course, that +could well be the current one, in which case LLparse +recovers from the error. The second parameter contains a +list of tokens that are not skipped at the error point. The +list is in the form of a null-terminated array of integers, +whose address is passed.

+ +

The user must supply a lexical analyzer to read the +input stream and break it up into tokens, which are passed +to LLparse. It should be an integer valued function, +returning the token number. The name of this function can be +declared using the "%lexical" keyword. This +keyword can be used wherever a declaration is legal and may +appear only once in the grammar specification, f.i.:

+
%lexical scanner ;
+
+ +

declares "scanner" as the name of the lexical +analyzer. The default name for the lexical analyzer is +"yylex". The reason for this funny name is that a +useful tool for constructing lexical analyzers is the +Lex program, 5 which +generates a routine of that name.

+ +

The token numbers are chosen by LLgen. The token +number for a literal is the numerical value of the character +in the local character set. If the tokens have a name, the +"# define" mechanism of C is used to give them a +value and to allow the lexical analyzer to return their +token numbers symbolically. These "# define"s are +collected in the file Lpars.h which can be "# +include"d in any file that needs the token-names. The +maximum token number chosen is defined in the macro +LL_MAXTOKNO.

+ +

The lexical analyzer must signal the end of input to +LLparse by returning a number less than or equal to +zero.

+ +

8. Programs with more than one parser

+ +

LLgen offers a simple facility for having more +than one parser in a program: in this case, the user can +change the names of global procedures, variables, etc, by +giving a different prefix, like this:

+
%prefix XX ;
+
+ +

The effect of this is that all global names start with +XX instead of LL, for the parser that has this prefix. This +holds for the variables LLsymb, which now is called +XXsymb, for the routine LLmessage, which must +now be called XXmessage, and for the macro +LL_MAXTOKNO, which is now called XX_MAXTOKNO. +LL.output is now XX.output, and Lpars.c +and Lpars.h are now called XXpars.c and +XXpars.h.

+ +

References

+ +

References

+ + + + + + +
+ +

1.

+
+ +

S. I. Feldman, “Make - A Program for Maintaining +Computer Programs,” Software - Practice and +Experience, 10, 8, pp. 255-265 (August 1979).

+
+ + + + + + +
+ +

2.

+
+ +

M. Griffiths, “LL(1) Grammars and Analysers” +in Compiler Construction, An Advanced Course, ed. F. +L. Bauer and J. Eickel, Springer-Verlag, New York, N.Y. +(1974).

+
+ + + + + + +
+ +

3.

+
+ +

S. C. Johnson, “Yacc: Yet Another Compiler +Compiler,” Comp. Sci. Tech. Rep. No. 32, Bell +Laboratories, Murray Hill, New Jersey (1975).

+
+ + + + + + +
+ +

4.

+
+ +

B. W. Kernighan and D. M. Ritchie, The C Programming +Language, Prentice-Hall, Inc., Englewood Cliffs, New +Jersey (1978).

+
+ + + + + + +
+ +

5.

+
+ +

M. E. Lesk, “Lex - A Lexical Analyser +Generator,” Comp. Sci. Tech. Rep. No. 39, Bell +Laboratories, Murray Hill, New Jersey (October 1975).

+
+ + + + + + +
+ +

6.

+
+ +

D. R. Milton, L. W. Kirchhoff, and B. R. Rowland, +“An ALL(1) Compiler Generator,” SIGPLAN +Notices, 14, 8, pp. 152-157 (August 1979).

+
+ + + + + + +
+ +

7.

+
+ +

J. Rohrich, “Methods for the Automatic +Construction of Error Correcting Parsers,” Acta +Informatica, 13, pp. 115-139 (1980).

+
+ +

Appendix A : LLgen Input Syntax

+ +

This appendix has a description of the LLgen +input syntax, as a LLgen specification. As a matter +of fact, the current version of LLgen is written with +LLgen.

+
/*
+ * First the declarations of the terminals
+ * The order is not important
+ */
+
+%token  IDENTIFIER;            /* terminal or nonterminal name */
+%token  NUMBER;
+%token  LITERAL;
+
+/*
+ * Reserved words
+ */
+
+%token  TOKEN;         /* %token */
+%token  START;         /* %start */
+%token  PERSISTENT;    /* %persistent */
+%token  IF;            /* %if */
+%token  WHILE;         /* %while */
+%token  AVOID;         /* %avoid */
+%token  PREFER;        /* %prefer */
+%token  DEFAULT;       /* %default */
+%token  LEXICAL;       /* %lexical */
+%token  PREFIX;        /* %prefix */
+%token  ONERROR;       /* %onerror */
+%token  FIRST;         /* %first */
+
+/*
+ * Declare LLparse to be a C-routine that recognizes "specification"
+ */
+
+%start  LLparse, specification;
+
+specification
+        : declaration*
+        ;
+
+declaration
+        : START
+                IDENTIFIER ’,’ IDENTIFIER
+          ’;’
+        | ’{’
+                /* Read C-declaration here */
+          ’}’
+        | TOKEN
+                IDENTIFIER
+                [ ’,’ IDENTIFIER ]*
+          ’;’
+        | FIRST
+                IDENTIFIER ’,’ IDENTIFIER
+          ’;’
+        | LEXICAL
+                IDENTIFIER
+          ’;’
+        | PREFIX
+                IDENTIFIER
+          ’;’
+        | ONERROR
+                IDENTIFIER
+       ’;’
+        | rule
+        ;
+
+rule    : IDENTIFIER parameters? ldecl?
+                ’:’ productions
+          ’;’
+        ;
+
+ldecl   : ’{’
+                /* Read C-declaration here */
+          ’}’
+        ;
+
+productions
+        : simpleproduction
+          [ ’|’ simpleproduction ]*
+        ;
+
+simpleproduction
+        : DEFAULT?
+       [ IF ’(’ /* Read C-expression here */ ’)’
+          | PREFER
+          | AVOID
+          ]?
+          [ element repeats ]*
+        ;
+
+element : ’{’
+                /* Read action here */
+          ’}’
+        | ’[’ [ WHILE ’(’ /* Read C-expression here */ ’)’ ]?
+                PERSISTENT?
+                productions
+          ’]’
+        | LITERAL
+        | IDENTIFIER parameters?
+        ;
+
+parameters
+        : ’(’ /* Read C-parameters here */ ’)’
+        ;
+
+repeats : /* empty */
+        | [ ’*’ | ’+’ ] NUMBER?
+        | NUMBER
+        | ’?’
+        ;
+
+
+ +

Appendix B : An example

+ +

This example gives the complete LLgen +specification of a simple desk calculator. It has 26 +registers, labeled "a" through "z", and +accepts arithmetic expressions made up of the C operators +, +-, *, /, %, &, and |, with their usual priorities. The +value of the expression is printed. As in C, an integer that +begins with 0 is assumed to be octal; otherwise it is +assumed to be decimal.

+ +

Although the example is short and not very complicated, +it demonstrates the use of if and while conditions. In the +example they are in fact used to reduce the number of +nonterminals, and to reduce the overhead due to the +recursion that would be involved in parsing an expression +with an ordinary recursive descent parser. In an ordinary +LL(1) grammar there would be one nonterminal for each +operator priority. The example shows how we can do it all +with one nonterminal, no matter how many priority levels +there are.

+
{
+#include <stdio.h>
+#include <ctype.h>
+#define MAXPRIO      5
+#define prio(op)     (ptab[op])
+
+struct token {
+        int     t_tokno;        /* token number */
+        int     t_tval;         /* Its attribute */
+} stok = { 0,0 }, tok;
+
+int     nerrors = 0;
+int     regs[26];               /* Space for the registers */
+int     ptab[128];              /* Attribute table */
+
+struct token
+nexttok() {  /* Read next token and return it */
+        register        c;
+        struct token    new;
+
+       while ((c = getchar()) == ’ ’ || c == ’\t’) { /* nothing */ }
+        if (isdigit(c)) new.t_tokno = DIGIT;
+        else if (islower(c)) new.t_tokno = IDENT;
+        else new.t_tokno = c;
+        if (c >= 0) new.t_tval = ptab[c];
+        return new;
+}   }
+
+%token  DIGIT, IDENT;
+%start  parse, list;
+
+list    : stat* ;
+
+stat    {       int     ident, val; } :
+        %if (stok = nexttok(),
+             stok.t_tokno == ’=’)
+                    /* The conflict is resolved by looking one further
+                     * token ahead. The grammar is LL(2)
+                     */
+          IDENT
+                                {       ident = tok.t_tval; }
+          ’=’ expr(1,&val) ’\n’
+                                {       if (!nerrors) regs[ident] = val; }
+        | expr(1,&val) ’\n’
+                                {       if (!nerrors) printf("%d\n",val); }
+        | ’\n’
+        ;
+
+expr(int level; int *val;) {       int     expr; } :
+          factor(val)
+          [ %while (prio(tok.t_tokno) >= level)
+                    /* Swallow operators as long as their priority is
+                     * larger than or equal to the level of this invocation
+                     */
+              ’+’ expr(prio(’+’)+1,&expr)
+                                {       *val += expr; }
+                    /* This states that ’+’ groups left to right. If it
+                     * should group right to left, the rule should read:
+                     * ’+’ expr(prio(’+’),&expr)
+                     */
+            | ’-’ expr(prio(’-’)+1,&expr)
+                                {       *val -= expr; }
+            | ’*’ expr(prio(’*’)+1,&expr)
+                                {       *val *= expr; }
+            | ’/’ expr(prio(’/’)+1,&expr)
+                                {       *val /= expr; }
+            | ’%’ expr(prio(’%’)+1,&expr)
+                                {       *val %= expr; }
+            | ’&’ expr(prio(’&’)+1,&expr)
+                                {       *val &= expr; }
+            | ’|’ expr(prio(’|’)+1,&expr)
+                                {       *val |= expr; }
+          ]*
+                    /* Notice the "*" here. It is important.
+                     */
+     ;
+
+factor(int *val;):
+            ’(’ expr(1,val) ’)’
+          | ’-’ expr(MAXPRIO+1,val)
+                                {       *val = -*val; }
+          | number(val)
+          | IDENT
+                                {       *val = regs[tok.t_tval]; }
+        ;
+
+number(int *val;) {       int base; }
+        : DIGIT
+                                {       base = (*val=tok.t_tval)==0?8:10; }
+          [ DIGIT
+                                {       *val = base * *val + tok.t_tval; }
+          ]*        ;
+
+%lexical scanner ;
+{
+scanner() {
+        if (stok.t_tokno) { /* a token has been inserted or read ahead */
+                tok = stok;
+                stok.t_tokno = 0;
+                return tok.t_tokno;
+        }
+        if (nerrors && tok.t_tokno == ’\n’) {
+                printf("ERROR\n");
+                nerrors = 0;
+        }
+        tok = nexttok();
+        return tok.t_tokno;
+}
+
+LLmessage(insertedtok) {
+        nerrors++;
+        if (insertedtok) { /* token inserted, save old token */
+                stok = tok;
+                tok.t_tval = 0;
+                if (insertedtok < 128) tok.t_tval = ptab[insertedtok];
+        }
+}
+
+main() {
+        register *p;
+
+       for (p = ptab; p < &ptab[128]; p++) *p = 0;
+        /* for letters, their attribute is their index in the regs array */
+        for (p = &ptab[’a’]; p <= &ptab[’z’]; p++) *p = p - &ptab[’a’];
+        /* for digits, their attribute is their value */
+        for (p = &ptab[’0’]; p <= &ptab[’9’]; p++) *p = p - &ptab[’0’];
+        /* for operators, their attribute is their priority */
+        ptab[’*’] = 4;
+        ptab[’/’] = 4;
+        ptab[’%’] = 4;
+        ptab[’+’] = 3;
+        ptab[’-’] = 3;
+        ptab[’&’] = 2;
+        ptab[’|’] = 1;
+        parse();
+     exit(nerrors);
+}   }
+
+ +

Appendix C. How to use LLgen .

+ +

This appendix demonstrates how LLgen can be used +in combination with the make program, to make +effective use of the LLgen-feature that it only +changes output files when neccessary. Make uses a +"makefile", which is a file containing +dependencies and associated commands. A dependency usually +indicates that some files depend on other files. When a file +depends on another file and is older than that other file, +the commands associated with the dependency are +executed.

+ +

So, make seems just the program that we always +wanted. However, it is not very good in handling programs +that generate more than one file. As usual, there is a way +around this problem. A sample makefile follows:

+
# The grammar exists of the files decl.g, stat.g and expr.g.
+# The ".o"-files are the result of a C-compilation.
+
+GFILES = decl.g stat.g expr.g
+OFILES = decl.o stat.o expr.o Lpars.o
+LLOPT =
+
+# As make does’nt handle programs that generate more than one
+# file well, we just don’t tell make about it.
+# We just create a dummy file, and touch it whenever LLgen is
+# executed. This way, the dummy in fact depends on the grammar
+# files.
+# Then, we execute make again, to do the C-compilations and
+# such.
+
+all: dummy
+        make parser
+
+dummy:  $(GFILES)
+        LLgen $(LLOPT) $(GFILES)
+        touch dummy
+
+parser: $(OFILES)
+        $(CC) -o parser $(LDFLAGS) $(OFILES)
+
+# Some dependencies without actions :
+# make already knows what to do about them
+
+Lpars.o:        Lpars.h
+stat.o:         Lpars.h
+decl.o:         Lpars.h
+expr.o:         Lpars.h
+
+
+
+ + diff --git a/src/olddocs/LLgen.pdf b/src/olddocs/LLgen.pdf new file mode 100644 index 0000000000000000000000000000000000000000..222228092ffbc83dd6a58b23faa0b8e5bb94ffd1 GIT binary patch literal 110124 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

hemQXnv6TB8D_BYro~NA$^Rx}G5Aa(^?G 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/ack.html b/src/olddocs/ack.html new file mode 100644 index 000000000..df716ccca --- /dev/null +++ b/src/olddocs/ack.html @@ -0,0 +1,1353 @@ + + + + + + +Ack Description File + + + +

Ack Description File

+
1. Introduction
+2. Which descriptions are used
+3. Using the description file
+4. Conventions used in description files
+5. Example
+ +
+ +

Reference Manual

+ +

1. Introduction

+ +

The program ack(I) internally maintains a +table of possible transformations and a table of string +variables. The transformation table contains one entry for +each possible transformation of a file. Which +transformations are used depends on the suffix of the source +file. Each transformation table entry tells which input +suffixes are allowed and what suffix/name the output file +has. When the output file does not already satisfy the +request of the user (indicated with the flag +−c.suffix), the table is scanned starting with +the next transformation in the table for another +transformation that has as input suffix the output suffix of +the previous transformation. A few special transformations +are recognized, among them is the combiner, which is a +program combining several files into one. When no stop +suffix was specified (flag −c.suffix) +ack stops after executing the combiner with as +arguments the − possibly transformed − input +files and libraries. Ack will only perform the +transformations in the order in which they are presented in +the table.

+ +

The string variables are used while creating the +argument list and program call name for a particular +transformation.

+ +

2. Which descriptions are used

+ +

Ack always uses two description files: one +to define the front-end transformations and one for the +machine dependent back-end transformations. Each description +has a name. First the way of determining the name of the +descriptions needed is described.

+ +

When the shell environment variable ACKFE is set +ack uses that to determine the front-end table name, +otherwise it uses fe.

+ +

The way the backend table name is determined is +more convoluted.
+First, when the last filename in the program call name is +not one of ack or the front-end call-names, this +filename is used as the backend description name. Second, +when the −m is present the −m is +chopped of this flag and the rest is used as the backend +description name. Third, when both failed the shell +environment variable ACKM is used. Last, when also ACKM was +not present the default backend is used, determined by the +definition of ACKM in h/local.h. The presence and value of +the definition of ACKM is determined at compile time of +ack.

+ +

Now, we have the names, but that is only the +first step. Ack stores a few descriptions at compile +time. This descriptions are simply files read in at compile +time. At the moment of writing this document, the +descriptions included are: pdp, fe, i86, m68k2, vax2 and +int. The name of a description is first searched for +internally, then in lib/descr/name, then in +lib/name/descr, and finally in the current directory +of the user.

+ +

3. Using the description file

+ +

Before starting on a narrative of the description +file, the introduction of a few terms is necessary. All +these terms are used to describe the scanning of zero +terminated strings, thereby producing another string or +sequence of strings.

+ +

Backslashing

+ + + + + +
+

All characters preceded by \ are modified to +prevent recognition at further scanning. This modification +is undone before a string is passed to the outside world as +argument or message. When reading the description files the +sequences \\, \# and \<newline> have a special +meaning. \\ translates to a single \, \# translates to a +single # that is not recognized as the start of comment, but +can be used in recognition and finally, \<newline> +translates to nothing at all, thereby allowing continuation +lines.

+
+ +

Variable replacement

+ + + + + +
+

The scan recognizes the sequences {{, {NAME} and +{NAME?text} Where NAME can be any combination if characters +excluding ? and } and text may be anything excluding }. ( \} +is allowed of course ) The first sequence produces an +unescaped single {. The second produces the contents of the +NAME, definitions are done by ack and in description +files. When the NAME is not defined an error message is +produced on the diagnostic output. The last sequence +produces the contents of NAME if it is defined and text +otherwise.

+
+ +

Expression replacement

+ + + + + +
+

Syntax: (suffix sequence:suffix +sequence=text)
+Example: (.c.p.e:.e=tail_em)
+If the two suffix sequences have a common member − .e +in this case − the text is produced. When no common +member is present the empty string is produced. Thus the +example given is a constant expression. Normally, one of the +suffix sequences is produced by variable replacement. +Ack sets three variables while performing the diverse +transformations: HEAD, TAIL and RTS. All three variables +depend on the properties rts and need from the +transformations used. Whenever a transformation is used for +the first time, the text following the need is +appended to both the HEAD and TAIL variable. The value of +the variable RTS is determined by the first transformation +used with a rts property.

+ +

Two runtime flags have effect on the value of one +or more of these variables. The flag −.suffix +has the same effect on these three variables as if a file +with that suffix was included in the argument list +and had to be translated. The flag −r.suffix +only has that effect on the TAIL variable. The program call +names acc and cc have the effect of an +automatic −.c flag. Apc and pc +have the effect of an automatic −.p +flag.

+
+ +

Line splitting

+ + + + + +
+

The string is transformed into a sequence of +strings by replacing the blank space by string separators +(nulls).

+
+ +

IO replacement

+ + + + + +
+

The > in the string is replaced by the output +file name. The < in the string is replaced by the input +file name. When multiple input files are present the string +is duplicated for each input file name.

+
+ +

Each description is a sequence of variable +definitions followed by a sequence of transformation +definitions. Variable definitions use a line each, +transformations definitions consist of a sequence of lines. +Empty lines are discarded, as are lines with nothing but +comment. Comment is started by a # character, and continues +to the end of the line. Three special two-characters +sequences exist: \#, \\ and \<newline>. Their effect +is described under ’backslashing’ above. Each +− nonempty − line starts with a keyword, +possibly preceded by blank space. The keyword can be +followed by a further specification. The two are separated +by blank space.

+ +

Variable definitions use the keyword var +and look like this:

+
   var NAME=text
+
+ +

The name can be any identifier, the text may +contain any character. Blank space before the equal sign is +not part of the NAME. Blank space after the equal is +considered as part of the text. The text is scanned for +variable replacement before it is associated with the +variable name.

+ +

The start of a transformation definition is +indicated by the keyword name. The last line of such +a definition contains the keyword end. The lines in +between associate properties to a transformation and may be +presented in any order. The identifier after the name +keyword determines the name of the transformation. This name +is used for debugging and by the −R flag. The +keywords are used to specify which input suffices are +recognized by that transformation, the program to run, the +arguments to be handed to that program and the name or +suffix of the resulting output file. Two keywords are used +to indicate which run-time startoffs and libraries are +needed. The possible keywords are:

+ + + + + +
+ +

from

+
+
+ + + + + +
+

followed by a sequence of suffices. Each file with +one of these suffices is allowed as input file. Preprocessor +transformations do not need the from keyword. All +other transformations do.

+
+ + + + + +
+ +

to

+
+
+ + + + + +
+

followed by the suffix of the output file name or +in the case of a linker the output file name.

+
+ +

program

+ + + + + +
+

followed by name of the load file of the program, +a pathname most likely starts with either a / or {EM}. This +keyword must be present, the remainder of the line is +subject to backslashing and variable +replacement.

+
+ +

mapflag

+ + + + + +
+

The mapflags are used to grab flags given to +ack and pass them on to a specific transformation. +This feature uses a few simple pattern matching and +replacement facilities. Multiple occurrences of this keyword +are allowed. This text following the keyword is subjected to +backslashing. The keyword is followed by a match expression +and a variable assignment separated by blank space. As soon +as both description files are read, ack looks at all +transformations in these files to find a match for the flags +given to ack. The flags −m, +−o, −O, −r, +−v, −g, −−c, +−t, −k, −R and +−−. are specific to ack and not +handed down to any transformation. The matching is performed +in the order in which the entries appear in the definition. +The scanning stops after first match is found. When a match +is found, the variable assignment is executed. A * in the +match expression matches any sequence of characters, a * in +the right hand part of the assignment is replaced by the +characters matched by the * in the expression. The right +hand part is also subject to variable replacement. The +variable will probably be used in the program arguments. The +−l flags are special, the order in which they +are presented to ack must be preserved. The +identifier LNAME is used in conjunction with the scanning of +−l flags. The value assigned to LNAME is used +to replace the flag. The example further on shows the use of +all this.

+
+ + + + + +
+ +

args

+
+
+ + + + + +
+

The keyword is followed by the program call +arguments. It is subject to backslashing, variable +replacement, expression replacement, line splitting and IO +replacement. The variables assigned to by mapflags +will probably be used here. The flags not recognized by +ack or any of the transformations are passed to the +linker and inserted before all other arguments.

+
+ +

stdin

+ + + + + +
+

This keyword indicates that the transformation +reads from standard input.

+
+ +

stdout

+ + + + + +
+

This keyword indicates that the transformation +writes on standard output.

+
+ +

optimizer

+ + + + + +
+

The presence of this keyword indicates that this +transformation is an optimizer. It can be followed by a +number, indicating the "level" of the optimizer +(see description of the -O option in the ack(1ACK) manual +page).

+
+ +

priority

+ + + + + +
+

This − optional − keyword is followed +by a number. Positive priority means that the transformation +is likely to be used, negative priority means that the +transformation is unlikely to be used. Priorities can also +be set with a ack(1ACK) command line option. Priorities come +in handy when there are several implementations of a certain +transformation. They can then be used to select a default +one.

+
+ +

linker

+ + + + + +
+

This keyword indicates that this transformation is +the linker.

+
+ +

combiner

+ + + + + +
+

This keyword indicates that this transformation is +a combiner. A combiner is a program combining several files +into one, but is not a linker. An example of a combiner is +the global optimizer.

+
+ + + + + +
+ +

prep

+
+
+ + + + + +
+

This − optional − keyword is followed +an option indicating its relation to the preprocessor. The +possible options are:

+
+ + + + +

always

+ + + + + + + + + + + + + + + + + +
+ +

the input files must be preprocessed
+cond

+
+
+ +

the input files must be preprocessed when +starting with #
+is

+
+
+ +

this transformation is the +preprocessor

+
+
+ + + + + +
+ +

rts

+
+
+ + + + + +
+

This − optional − keyword indicates +that the rest of the line must be used to set the variable +RTS, if it was not already set. Thus the variable RTS is set +by the first transformation executed which such a property +or as a result from ack’s program call name +(acc, cc, apc or pc) or by the −.suffix +flag.

+
+ + + + + +
+ +

need

+
+
+ + + + + +
+

This − optional − keyword indicates +that the rest of the line must be concatenated to the HEAD +and TAIL variables. This is done once for every +transformation used or indicated by one of the program call +names mentioned above or indicated by the +−.suffix flag.

+ +

4. Conventions used in description files

+ +

Ack reads two description files. A few of +the variables defined in the machine specific file are used +by the descriptions of the front-ends. Other variables, set +by ack, are of use to all +transformations.

+ +

Ack sets the variable EM to the home +directory of the Amsterdam Compiler Kit. The variable SOURCE +is set to the name of the argument that is currently being +massaged, this is useful for debugging. The variable SUFFIX +is set to the suffix of the argument that is currently being +massaged.
+The variable M indicates the directory in lib/{M}/tail_..... +and NAME is the string to be defined by the preprocessor +with −D{NAME}. The definitions of {w}, {s}, {l}, {d}, +{f} and {p} indicate EM_WSIZE, EM_SSIZE, EM_LSIZE, EM_DSIZE, +EM_FSIZE and EM_PSIZE respectively.
+The variable INCLUDES is used as the last argument to +cpp. It is used to add directories to the list of +directories containing #include files.

+ +

The variables HEAD, TAIL and RTS are set by +ack and used to compose the arguments for the +linker.

+ +

5. Example

+ +

Description for front-end

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

name cpp

+
+ +

# the C-preprocessor

+
+ + + +

# no from, it’s governed by the P +property

+
+ + +

to .i

+
+ +

# result files have suffix i

+
+ + +

program {EM}/lib/cpp

+
+ +

# pathname of loadfile

+
+ + +

mapflag −I* CPP_F={CPP_F?} +−I*

+
+ +

# grab −I.. −U.. and

+
+ + +

mapflag −U* CPP_F={CPP_F?} +−U*

+
+ +

# −D.. to use as arguments

+
+ + +

mapflag −D* CPP_F={CPP_F?} +−D*

+
+ +

# in the variable CPP_F

+
+ +

args {CPP_F?} {INCLUDES?} −D{NAME} +−DEM_WSIZE={w} −DEM_PSIZE={p} \

+
+
+ +

−DEM_SSIZE={s} −DEM_LSIZE={l} +−DEM_FSIZE={f} −DEM_DSIZE={d} <

+
+
+ + + +

# The arguments are: first the +−[IUD]...

+
+ + + +

# then the include dir’s for this +machine

+
+ + + +

# then the NAME and size values +finally

+
+ + + +

# followed by the input file name

+
+ + +

stdout

+
+ +

# Output on stdout

+
+ + +

prep is

+
+ +

# Is preprocessor

+
+ +

end

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

name cem

+
+ +

# the C-compiler proper

+
+ + +

from .c

+
+ +

# used for files with suffix .c

+
+ + +

to .k

+
+ +

# produces compact code files

+
+ + +

program {EM}/lib/em_cem

+
+ +

# pathname of loadfile

+
+ + +

mapflag −p CEM_F={CEM_F?} +−Xp

+
+ +

# pass −p as −Xp to cem

+
+ + +

mapflag −L CEM_F={CEM_F?} +−l

+
+ +

# pass −L as −l to cem

+
+ +

args −Vw{w}i{w}p{p}f{f}s{s}l{l}d{d} +{CEM_F?}

+
+
+ + + +

# the arguments are the object sizes +in

+
+ + + +

# the −V... flag and possibly −l and +−Xp

+
+ + +

stdin

+
+ +

# input from stdin

+
+ + +

stdout

+
+ +

# output on stdout

+
+ + +

prep always

+
+ +

# use cpp

+
+ + +

rts .c

+
+ +

# use the C run-time system

+
+ + +

need .c

+
+ +

# use the C libraries

+
+ +

end

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

name decode

+
+ +

# make human readable files from compact +code

+
+ + +

from .k.m

+
+ +

# accept files with suffix .k or .m

+
+ + +

to .e

+
+ +

# produce .e files

+
+ + +

program {EM}/lib/em_decode

+
+ +

# pathname of loadfile

+
+ + +

args <

+
+ +

# the input file name is the only +argument

+
+ + +

stdout

+
+ +

# the output comes on stdout

+
+ +

end

+
Example of a backend, in this case the EM assembler/loader.
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

var w=2

+
+ +

# wordsize 2

+
+ +

var p=2

+
+ +

# pointersize 2

+
+ +

var s=2

+
+ +

# short size 2

+
+ +

var l=4

+
+ +

# long size 4

+
+ +

var f=4

+
+ +

# float size 4

+
+ +

var d=8

+
+ +

# double size 8

+
+ +

var M=em22

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

var NAME=em22

+
+ +

# for cpp (NAME=em22 results in #define em22 +1)

+
+ +

var LIB=lib/{M}/tail_

+
+ +

# part of file name for libraries

+
+ +

var RT=lib/{M}/head_

+
+ +

# part of file name for run-time +startoff

+
+ +

var SIZE_FLAG=−sm

+
+ +

# default internal table size flag

+
+ +

var INCLUDES=−I{EM}/include

+
+ +

# use {EM}/include for #include files

+
+ +

name asld

+
+ +

# Assembler/loader

+
+ + +

from .k.m.a

+
+ +

# accepts compact code and archives

+
+ + +

to e.out

+
+ +

# output file name

+
+ + +

program {EM}/lib/em_ass

+
+ +

# load file pathname

+
+ + +

mapflag −l* LNAME={EM}/{LIB}*

+
+ +

# e.g. −ly becomes

+
+ + + +

#{EM}/mach/int/lib/tail_y

+
+ +

mapflag −+* ASS_F={ASS_F?} −+* # +recognize −+ and −−

+
+
+ +

mapflag −−* ASS_F={ASS_F?} +−−*

+
+
+ + +

mapflag −s* SIZE_FLAG=−s*

+
+ +

# overwrite old value of SIZE_FLAG

+
+ +

args {SIZE_FLAG} \

+
+
+ +

({RTS}:.c={EM}/{RT}cc) ({RTS}:.p={EM}/{RT}pc) +−o > < \

+
+
+ +

(.p:{TAIL}={EM}/{LIB}pc) \

+
+
+ +

(.c:{TAIL}={EM}/{LIB}cc.1s {EM}/{LIB}cc.2g) +\

+
+
+ +

(.c.p:{TAIL}={EM}/{LIB}mon)

+
+
+ + + +

# −s[sml] must be first +argument

+
+ + + +

# the next line contains the choice for head_cc +or head_pc

+
+ + + +

# and the specification of in- and +output.

+
+ + + +

# the last three args lines choose +libraries

+
+ +

linker

+
+
+ +

end

+ +

The command ack −mem22 −v −v +−I../h −L −ly prog.c would result in +the following calls (with exec(II)):

+ + + + + + + + + + + + + + + + + + + + +
+ +

1)

+
+ +

/lib/cpp −I../h −I/usr/em/include +−Dem22 −DEM_WSIZE=2 −DEM_PSIZE=2 +\

+
+ +

−DEM_SSIZE=2 −DEM_LSIZE=4 +−DEM_FSIZE=4 −DEM_DSIZE=8 prog.c

+
+ +

2)

+
+ +

/usr/em/lib/em_cem −Vw2i2p2f4s2l4d8 +−l

+
+ +

3)

+
+ +

/usr/em/lib/em_ass −sm +/usr/em/lib/em22/head_cc −o e.out prog.k

+
+ +

/usr/em/lib/em22/tail_y +/usr/em/lib/em22/tail_cc.1s

+
+ +

/usr/em/lib/em22/tail_cc.2g +/usr/em/lib/em22/tail_mon

+
+
+ + diff --git a/src/olddocs/ack.pdf b/src/olddocs/ack.pdf new file mode 100644 index 0000000000000000000000000000000000000000..24da57fa097b763d5cfea06688701c88c708d082 GIT binary patch literal 37936 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/ansi_C.html b/src/olddocs/ansi_C.html new file mode 100644 index 000000000..4dadd4744 --- /dev/null +++ b/src/olddocs/ansi_C.html @@ -0,0 +1,1254 @@ + + + + + + +Amsterdam Compiler Kit-ANSI C compiler compliance statements + + + +

Amsterdam Compiler Kit-ANSI C compiler compliance statements

+References
+ +
+ +

This document specifies the implementation-defined +behaviour of the ANSI-C front end of the Amsterdam Compiler +Kit as required by ANS X3.159-1989. Since the +implementation-defined behaviour sometimes depends on the +machine compiling on or for, some items will be left +unspecified in this document†.

+ +

+ +

The compiler assumes that it runs on a UNIX system.

+ +

ANS A.6.3.1:

+ + + + + + +
+ +

-

+
+ +

Diagnostics are placed on the standard error output. +They have the following specification:

+
+ + + + + +
+

"<file>", line <nr>: +[(<class>)] <diagnostic>
+There are three classes of diagnostics: "error", +"strict" and "warning". When the class +is "error", the <class> is absent.
+The class "strict" is used for violations of the +standard which are not severe enough to stop compilation. An +example is the the occurrence of non white-space after an +’#else’ or ’#endif’ pre-processing +directive. The class "warning" is used for legal +but dubious constructions. An example is overflow of +constant expressions.

+
+ +

ANS A.6.3.2:

+ + + + + + +
+ +

-

+
+ +

The function ’main’ can have two arguments. +The first argument is an integer specifying the number of +arguments on the command line. The second argument is a +pointer to an array of pointers to the arguments (as +strings).

+
+ + + + + + + +
+ +

-

+
+ +

Interactive devices are terminals.

+
+
+ +

ANS A.6.3.3:

+ + + + + + +
+ +

-

+
+ +

The number of significant characters is an option. By +default it is 64. There is a distinction between upper and +lower case.

+
+ +

ANS A.6.3.4:

+ + + + + + +
+ +

-

+
+ +

The compiler assumes ASCII-characters in both the source +and execution character set.

+
+ + + + + + + +
+ +

-

+
+ +

There are no multi-byte characters.

+
+
+ + + + + + + +
+ +

-

+
+ +

There 8 bits in a character.

+
+
+ + + + + + +
+ +

-

+
+ +

Character constants with values that can not be +represented in 8 bits are truncated.

+
+ + + + + + +
+ +

-

+
+ +

Character constants that are more than 1 character wide +will have the first character specified in the least +significant byte.

+
+ + + + + + + +
+ +

-

+
+ +

The only supported locale is "C".

+
+
+ + + + + + +
+ +

-

+
+ +

A plain ’char’ has the same range of values +as ’signed char’.

+
+ +

ANS A.6.3.5:

+ + + + + + +
+ +

-

+
+ +

The compiler assumes that it works on and compiles for a +2-complement binary-number system. Shorts will use 2 bytes +and longs will use 4 bytes. The size of integers are machine +dependent.

+
+ + + + + + +
+ +

-

+
+ +

Converting an integer to a shorter signed integer is +implemented by ignoring the high-order byte(s) of the +former. Converting a unsigned integer to a signed integer of +the same type is only done in administration. This means +that the bit-pattern remains unchanged.

+
+ + + + + + +
+ +

-

+
+ +

The result of bitwise operations on signed integers are +what can be expected on a 2-complement machine.

+
+ + + + + + +
+ +

-

+
+ +

If either operand is negative, whether the result of the +/ operator is the largest integer less than or equal to the +algebraic quotient or the smallest integer greater than or +equal to the algebraic quotient is machine dependent, as is +the sign of the result of the % operator.

+
+ + + + + + +
+ +

-

+
+ +

The right-shift of a negative value is negative.

+
+ +

ANS A.6.3.6:

+ + + + + + +
+ +

-

+
+ +

The representation of floating-point values is +machine-dependent. When native floating-point is not present +an IEEE-emulation is used. The compiler uses high-precision +floating-point for constant folding.

+
+ + + + + + +
+ +

-

+
+ +

Truncation is always to the nearest floating-point +number that can be represented.

+
+ +

ANS A.6.3.7:

+ + + + + + +
+ +

-

+
+ +

The type returned by the sizeof-operator (also known as +size_t) is ’unsigned int’. This is done for +backward compatibility reasons.

+
+ + + + + + +
+ +

-

+
+ +

Casting an integer to a pointer or vice versa has no +effect in bit-pattern when the sizes are equal. Otherwise +the value will be truncated or zero-extended (depending on +the direction of the conversion and the relative sizes).

+
+ + + + + + +
+ +

-

+
+ +

When a pointer is as large as an integer, the type of a +’ptrdiff_t’ will be ’int’. Otherwise +the type will be ’long’.

+
+ +

ANS A.6.3.8:

+ + + + + + +
+ +

-

+
+ +

Since the front end has only limited control over the +registers, it can only make it more likely that variables +that are declared as registers also end up in registers. The +only things that can possibly be put into registers are : +’int’, ’long’, ’float’, +’double’, ’long double’ and +pointers.

+
+ +

ANS A.6.3.9:

+ + + + + + +
+ +

-

+
+ +

When a member of a union object is accessed using a +member of a different type, the resulting value will usually +be garbage. The compiler makes no effort to catch these +errors.

+
+ + + + + + +
+ +

-

+
+ +

The alignment of types is a compile-time option. The +alignment of a structure-member is the alignment of its +type. Usually, the alignment is passed on to the compiler by +the ’ack’ program. When a user wants to do this +manually, he/she should be prepared for trouble.

+
+ + + + + + +
+ +

-

+
+ +

A "plain" ’int’ bit-field is taken +as a ’signed int’. This means that a field with +a size of 1 bit can only store the values 0 and -1.

+
+ + + + + + +
+ +

-

+
+ +

The order of allocation of bit-fields is a compile-time +option. By default, high-order bits are allocated first.

+
+ + + + + + + +
+ +

-

+
+ +

An enum has the same size as a "plain" +’int’.

+
+
+ +

ANS A.6.3.10:

+ + + + + + +
+ +

-

+
+ +

An access to a volatile declared variable is done by +just mentioning the variable. E.g. the statement +"x;" where x is declared volatile, constitutes an +access.

+
+ + + + + + +
+ +

-

+
+ +

There is no fixed limit on the number of declarators +that may modify an arithmetic, structure or union type, +although specifying too many may cause the compiler to run +out of memory.

+
+ +

ANS A.6.3.12:

+ + + + + + +
+ +

-

+
+ +

The maximum number of cases in a switch-statement is in +the order of 1e9, although the compiler may run out of +memory somewhat earlier.

+
+ +

ANS A.6.3.13:

+ + + + + + +
+ +

-

+
+ +

Since both the pre-processor and the compiler assume +ASCII-characters, a single character constant in a +conditional-inclusion directive matches the same value in +the execution character set.

+
+ + + + + + +
+ +

-

+
+ +

The pre-processor recognizes -I... command-line options. +The directories thus specified are searched first. After +that, depending on the command that the preprocessor is +called with, machine/system-dependant directories are +searched. After that, ~em/include/_tail_ac and /usr/include +are visited.

+
+ + + + + + +
+ +

-

+
+ +

Quoted names are first looked for in the directory in +which the file which does the include resides.

+
+ + + + + + +
+ +

-

+
+ +

The characters in a h- or q- char-sequence are taken to +be UNIX paths.

+
+ + + + + + +
+ +

-

+
+ +

Neither the compiler nor the preprocessor know any +pragmas.

+
+ + + + + + +
+ +

-

+
+ +

Since the compiler runs on UNIX, __DATE__ and __TIME__ +will always be defined.

+
+ +

ANS A.6.3.14:

+ + + + + + +
+ +

-

+
+ +

NULL is defined as ((void *)0). This in order to flag +dubious constructions like "int x = NULL;".

+
+ + + + + + +
+ +

-

+
+ +

The diagnostic printed by ’assert’ is as +follows:

+ + + + + +
+

"Assertion "<expr>" failed, file +"<file>", line <line>",

+
+ +

where <expr> is the argument to the assert macro, +printed as string. (the <file> and <line> should +be clear)

+ + + + + + + +
+ +

-

+
+ +

The sets for character test macros.

+
+
+ +

+ +

As an addition, there is an isascii() macro, which tests +whether a character is an ascii character. Characters in the +range from \000 to \177 are ascii characters.

+ + + + + + +
+ +

-

+
+ +

The behaviour of mathematic functions on domain +error:

+
+ +

+ + + + + + +
+ +

-

+
+ +

Underflow range errors do not cause errno to be set.

+
+ + + + + + +
+ +

-

+
+ +

The function fmod() returns 0.0 and sets errno to EDOM +when the second argument is 0.0.

+
+ + + + + + +
+ +

-

+
+ +

The set of signals for the signal() function depends on +the UNIX-system which the compiler is compiling for. The +default handling, semantics and behaviour of these signals +are those specified by the operating system vendor. The +default handling is not reset when SIGILL is received.

+
+ + + + + + +
+ +

-

+
+ +

A text-stream need not end in a new-line character.

+
+ + + + + + +
+ +

-

+
+ +

White space characters before a new-line appear when +read in.

+
+ + + + + + +
+ +

-

+
+ +

There may be any number of null characters appended to a +binary stream.

+
+ + + + + + +
+ +

-

+
+ +

The file position indicator of an append mode stream is +initially positioned at the beginning of the file.

+
+ + + + + + +
+ +

-

+
+ +

A write on a text stream does not cause the associated +file to be truncated beyond that point.

+
+ + + + + + +
+ +

-

+
+ +

The buffering intended by the standard is fully +supported.

+
+ + + + + + + +
+ +

-

+
+ +

A zero-length file actually exists.

+
+
+ + + + + + +
+ +

-

+
+ +

A file name can consist of any character, except for the +’\0’ and the ’/’.

+
+ + + + + + + +
+ +

-

+
+ +

A file can be open multiple times.

+
+
+ + + + + + +
+ +

-

+
+ +

When a remove() is done on an open file, reading and +writing behave just as can be expected from a non-removed +file. When the associated stream is closed, all written data +will be lost.

+
+ + + + + + +
+ +

-

+
+ +

When a file exists prior to a call to rename(), the +behaviour is that of the underlying UNIX system. Normally, +the call would fail.

+
+ + + + + + +
+ +

-

+
+ +

The %p conversion in fprintf() has the same effect as +%#x or %#lx, depending on the sizes of pointer and +integer.

+
+ + + + + + +
+ +

-

+
+ +

The %p conversion in fscanf() has the same effect as %x +or %lx, depending on the sizes of pointer and integer.

+
+ + + + + + +
+ +

-

+
+ +

A - character that is neither the first nor the last +character in the scanlist for %[ conversion is taken to be a +range indicator. When the first character has a higher +ASCII-value than the second, the - will just be put into the +scanlist.

+
+ + + + + + +
+ +

-

+
+ +

The value of errno when fgetpos() or ftell() failed is +that of lseek(). This means:

+
+ + + + + + + + +
+ +

EBADF −

+
+ +

when the stream is not valid

+
+
+ + + + + + + +
+ +

ESPIPE −

+
+ +

when fildes is associated with a pipe (and on some +systems: sockets)

+
+ + + + + + + +
+ +

EINVAL −

+
+ +

the resulting file pointer would be negative

+
+ + + + + + +
+ +

-

+
+ +

The messages generated by perror() depend on the value +of errno. The mapping of errors to strings is done by +strerror().

+
+ + + + + + +
+ +

-

+
+ +

When the requested size is zero, malloc(), calloc() and +realloc() return a null-pointer.

+
+ + + + + + +
+ +

-

+
+ +

When abort() is called, output buffers will be flushed. +Temporary files (made with the tmpfile() function) will have +disappeared when SIGABRT is not caught or ignored.

+
+ + + + + + +
+ +

-

+
+ +

The exit() function returns the low-order eight bits of +its argument to the environment.

+
+ + + + + + +
+ +

-

+
+ +

The predefined environment names are controlled by the +user. Setting environment variables is done through the +putenv() function. This function accepts a pointer to char +as its argument. To set f.i. the environment variable TERM +to a230 one writes

+ + + + + +
+

putenv("TERM=a230");

+
+ +

The argument to putenv() is stored in an internal table, +so malloc’ed strings can not be freed until another +call to putenv() (which sets the same environment variable) +is made. The function returns 1 if it fails, 0 +otherwise.

+ + + + + + +
+ +

-

+
+ +

The argument to system is passed as argument to /bin/sh +-c.

+
+ + + + + + +
+ +

-

+
+ +

The strings returned by strerror() depend on errno in +the following way:

+
+ +

+ + + + + +
+

everything else causes strerror() to return "unknown +error"

+
+ + + + + + +
+ +

-

+
+ +

The local time zone is per default MET (GMT + 1:00:00). +This can be changed through the TZ environment variable, or +by some changes in the sources.

+
+ + + + + + +
+ +

-

+
+ +

The clock() function returns the number of ticks since +process startup.

+
+ +

References

+ + + + + + +
+ +

[1]

+
+ +

ANS X3.159-1989 American National Standard for +Information Systems - Programming Language C

+
+
+ + diff --git a/src/olddocs/ansi_C.pdf b/src/olddocs/ansi_C.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9447fa88fb7c1651979b0a2ebb9e2714da960012 GIT binary patch literal 32598 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/basic.html b/src/olddocs/basic.html new file mode 100644 index 000000000..f2c105742 --- /dev/null +++ b/src/olddocs/basic.html @@ -0,0 +1,3850 @@ + + + + + + +The ABC compiler + + + +

The ABC compiler

+INTRODUCTION.
+SYNTAX NOTATION
+1. GENERAL INFORMATION
+1.1. LINE FORMAT
+1.2. CONSTANTS
+1.3. VARIABLES
+1.4. EXPRESSIONS
+Arithmetic
+Relational
+Logical
+Functional
+String operations
+1.5. ERROR MESSAGES
+2. B-EM STATEMENTS
+2.1. CALL
+2.2. CLOSE
+2.3. DATA
+2.4. DEF FN
+2.5. DEFINT/SNG/DBL/STR
+2.6. DIM
+2.7. END
+2.8. ERR and ERL
+2.9. ERROR
+2.10. FIELD
+2.11. FOR...NEXT
+2.12. GET
+2.13. GOSUB...RETURN
+2.14. GOTO
+2.15. IF...THEN
+2.16. INPUT
+2.17. INPUT [#]
+2.18. LET
+2.19. LINE INPUT
+2.20. LINE INPUT [#]
+2.21. LSET and RSET
+2.22. MID$
+2.23. ON ERROR GOTO
+2.24. ON...GOSUB and ON ...GOTO
+2.25. OPEN
+2.26. OPTION BASE
+2.27. POKE
+2.28. PRINT
+2.29. PRINT USING
+2.30. PUT
+2.31. RANDOMIZE
+2.32. READ
+2.33. REM
+2.34. RESTORE
+2.35. STOP
+2.36. SWAP
+2.37. TRON/TROFF
+2.38. WHILE...WEND
+2.39. WRITE
+2.40. WRITE #
+3. FUNCTIONS
+APPENDIX A DIFFERENCES WITH MICROSOFT BASIC
+APPENDIX B RESERVED WORDS IN BASIC-EM
+ +
+ +

ABSTRACT

+ +

Martin L. Kersten
+Gert-Jan Akkerman
+Marcel Worring
+Edo Westerhuis
+Frans Kunst
+Ronnie Lachniet

+Department of Mathematics and Computer Science.
+Free University
+Amsterdam

+ +

This manual describes the programming language BASIC and +its compiler included in the Amsterdam Compiler Kit.

+ +

INTRODUCTION.

+ +

The BASIC-EM compiler is an extensive implementation of +the programming language BASIC. The language structure and +semantics are modelled after the BASIC interpreter/compiler +of Microsoft (tr), a short comparison is provided in +appendix A.

+ +

The compiler generates code for a virtual machine, the +EM machine [[ACM, etc]]. Using EM as an intermediate machine +results in a highly portable compiler and BASIC code.
+The drawback of EM is that it does not directly reflect one +particular hardware design, which means that many of the low +level operations available within BASIC are ill-defined or +even inapplicable. To mention a few, the peek and poke +instructions are likely to be behave errorneous, while line +printer and tapedeck primitives are unknown.

+ +

This manual is divided into three chapters.
+Chapter 1 discusses the general language syntax and +semantics.
+Chapter 2 describes the statements available in +BASIC-EM.
+Chapter 3 describes the predefined functions, ordered +alphabetically.

+ +

Appendix A discusses the differences with Microsoft +BASIC.
+Appendix B describes all reserved symbols.

+ +

SYNTAX NOTATION

+ +

The conventions for syntax presentation are as +follows:

+ + + + + + +
+ +

CAPS

+
+ +

Items are reserved words, must be input as shown.

+
+ + + + + + +
+ +

<>

+
+ +

Items in lowercase letters enclosed in angular brackets +are to be supplied by the user.

+
+ + + + + + + +
+ +

[]

+
+ +

Items are optional.

+
+
+ + + + + +
+ +

Items may be repeated any number of times

+
+
+ + + + + + +
+ +

{}

+
+ +

A choice between two or more alternatives. At least one +of the entries must be chosen.

+
+ + + + + + +
+ +

|

+
+ +

Vertical bars separate the choices within braces.

+
+ +

All punctuation must be included where shown.

+ +

1. GENERAL INFORMATION

+ +

The BASIC-EM compiler is designed for a UNIX based +environment. It accepts a text file with a BASIC program +(suffix .b) and generates an executable file, called +a.out.

+ +

1.1. LINE FORMAT

+ +

A BASIC program consists of a series of lines, starting +with a positive line number in the range 0 to 32767. A line +may consists of more than one physical line on a terminal, +but is limited to 1024 characters. Multiple BASIC statements +may be placed on a single line, provided they are separated +by a colon (:).

+ +

1.2. CONSTANTS

+ +

The BASIC compiler character set is comprised of +alphabetic characters, numeric characters, and special +characters shown below.

+
     = + - * / ^ ( ) % # $ \ _
+     ! [ ] , . ; : & ’ ? > <  \ (blanc)
+
+ +

BASIC uses two different types of constants during +processing: numeric and string constants.
+A string constant is a sequence of characters taken from the +ASCII character set enclosed by double quotation marks.
+Numeric constants are positive or negative numbers, grouped +into five different classes.

+ + + + + +
+ +

a) integer constants

+
+
+ + + + + +
+

Whole numbers in the range of -32768 and 32767. Integer +constants do not contain decimal points.

+
+ + + + + +
+ +

b) fixed point constants

+
+
+ + + + + +
+

Positive or negative real numbers, i.e. numbers with a +decimal point.

+
+ +

c) floating point constants

+ + + + + +
+

Real numbers in scientific notation. A floating point +constant consists of an optional signed integer or fixed +point number followed by the letter E (or D) and an optional +signed integer (the exponent). The allowable range of +floating point constants is 10^-38 to 10^+38.

+
+ + + + + +
+ +

d) Hex constants

+
+
+ + + + + +
+

Hexadecimal numbers, denoted by the prefix &H.

+
+ + + + + +
+ +

e) Octal constants

+
+
+ + + + + +
+

Octal numbers, denoted by the prefix &O.

+ +

1.3. VARIABLES

+ +

Variables are names used to represent values in a BASIC +program. A variable is assigned a value by assigment +specified in the program. Before a variable is assigned its +value is assumed to be zero.
+Variable names are composed of letters, digits or the +decimal point, starting with a letter. Up to 40 characters +are significant. A variable name can be followed by any of +the following type declaration characters:

+ + + + + + + +
+ +

%

+
+ +

Defines an integer variable

+
+
+ + + + + + +
+ +

!

+
+ +

Defines a single precision variable (see below)

+
+ + + + + + + +
+ +

#

+
+ +

Defines a double precision variable

+
+
+ + + + + + + +
+ +

$

+
+ +

Defines a string variable.

+
+
+ +

Beside single valued variables, values may be grouped +into tables or arrays. Each element in an array is +referenced by the array name and an index, such a variable +is called a subscripted variable. An array has as many +subscripts as there are dimensions in the array, the maximum +of which is 11.
+If a variable starts with FN it is assumed to be a call to a +user defined function.
+A variable name may not be a reserved word nor the name of a +predefined function. A list of all reserved identifiers is +included as Appendix B.

+ +

NOTES:
+Two variables with the same name but different type is +considered illegal.
+The type of a variable without typedeclaration-character is +set, at it’s first occurence in the program, to the +defaulttype which is (in this implementation) double +precision.
+Multi-dimensional array’s must be declared before use +(see DIM-statement ).
+BASIC-EM differs from Microsoft BASIC in supporting floats +in one precision only (due to EM), eg doubles and floats +have the same precision.

+ +

1.4. EXPRESSIONS

+ +

When necessary the compiler will convert a numeric value +from one type to another. A value is always converted to the +precision of the variable it is assigned to. When a floating +point value is converted to an integer the fractional +portion is rounded. In an expression all values are +converted to the same degree of precision, i.e. that of the +most precise operand.
+Division by zero results in the message "Division by +zero". If overflow (or underflow) occurs, the +"Overflow (underflow)" message is displayed and +execution is terminated (contrary to Microsoft).

+ +

Arithmetic

+ +

The arithmetic operators in order of precedence,a +re:

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

^

+
+ + +

Exponentiation

+
+
+ +

-

+
+ + +

Negation

+
+
+ +

*,/,\\\\,MOD

+
+ +

Multiplication, Division, Remainder

+
+
+ +

+,-

+
+ + +

Addition, Substraction

+
+
+ +

The operator \\ denotes integer division, its operands +are rounded to integers before the operator is applied. +Modulus arithmetic is denoted by the operator MOD, which +yields the integer value that is the remainder of an integer +division.
+The order in which operators are performed can be changed +with parentheses.

+ +

Relational

+ +

The relational operators in order of precedence, +are:

+ + + + +

=

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

Equality
+<>

+
+
+ +

Inequality
+<

+
+
+ +

Less than
+>

+
+
+ +

Greater than
+<=

+
+
+ +

Less than or equal to
+>=

+
+
+ +

Greater than or equal to

+
+
+ +

The relational operators are used to compare two values +and returns either "true" (-1) or +"false" (0) (See IF statement). The precedence of +the relational operators is lower then the arithmetic +operators.

+ +

Logical

+ +

The logical operators performs tests on multiple +relations, bit manipulations, or boolean operations. The +logical operators returns a bitwise result ("true" +or "false"). In an expression, logical operators +are performed after the relational and arithmetic operators. +The logical operators work by converting their operands to +signed two-complement integers in the range -32768 to +32767.

+ + + + +

NOT

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

Bitwise negation
+AND

+
+
+ + +

Bitwise and
+OR

+
+
+ + +

Bitwise or
+XOR

+
+
+ + +

Bitwise exclusive or
+EQV

+
+
+ + +

Bitwise equivalence
+IMP

+
+
+ + +

Bitwise implies

+
+
+ +

Functional

+ +

A function is used in an expression to call a system or +user defined function. A list of predefined functions is +presented in chapter 3.

+ +

String operations

+ +

Strings can be concatenated by using +. Strings can be +compared with the relational operators. String comparison is +performed in lexicographic order.

+ +

1.5. ERROR MESSAGES

+ +

The occurence of an error results in termination of the +program unless an ON....ERROR statement has been +encountered.

+ +

2. B-EM STATEMENTS

+ +

This chapter describes the statements available within +the BASIC-EM compiler. Each description is formatted as +follows:

+ + + + + + +
+ +

syntax

+
+ +

Shows the correct syntax for the statement. See +introduction of syntax notation above.

+
+ + + + + + +
+ +

purpose

+
+ +

Describes the purpose and details of the +instructions.

+
+ + + + + + +
+ +

remarks

+
+ +

Describes special cases, deviation from Microsoft BASIC +etc.

+
+ +

2.1. CALL

+ + + + + + + +
+ +

syntax

+
+ +

CALL <variable name>[(<argument list>)]

+
+
+ + + + + + +
+ +

purpose

+
+ +

The CALL statement provides the means to execute +procedures and functions written in another language +included in the Amsterdam Compiler Kit. The argument list +consist of (subscripted) variables. The BASIC compiler +pushes the address of the arguments on the stack in order of +encounter.

+
+ + + + + + + +
+ +

remarks

+
+ +

Not yet available.

+
+
+ +

2.2. CLOSE

+ + + + + + +
+ +

syntax

+
+ +

CLOSE [[#]<file number>[,[#]<file +number...>]]

+
+ + + + + + +
+ +

purpose

+
+ +

To terminate I/O on a disk file. <file number> is +the number associated with the file when it was OPENed (See +OPEN-statement). Ommission of parameters results in closing +all files.

+
+ +

The END statement and STOP statement always issue a +CLOSE of all files.

+ +

2.3. DATA

+ + + + + + + +
+ +

syntax

+
+ +

DATA <list of constants>

+
+
+ + + + + + +
+ +

purpose

+
+ +

DATA statements are used to construct a data bank of +values that are accessed by the program’s READ +statement. DATA statements are non-executable, the data +items are assembled in a data file by the BASIC compiler. +This file can be replaced, provided the layout remains the +same (otherwise the RESTORE won’t function +properly).

+
+ +

The list of data items consists of numeric and string +constants as discussed in section 1. Moreover, string +constants starting with a letter and not containing blancs, +newlines, commas, colon need not be enclosed with the string +quotes.

+ +

DATA statements can be reread using the RESTORE +statement.

+ +

2.4. DEF FN

+ + + + + + +
+ +

syntax

+
+ +

DEF FN<name> +[(<parameterlist>)]=<expression>

+
+ + + + + + +
+ +

purpose

+
+ +

To define and name a function that is written by the +user. <name> must be an identifier and should be +preceded by FN, which is considered integral part of the +function name. <expression> defines the expression to +be evaluated upon function call.

+
+ +

The parameter list is comprised of a comma separated +list of variable names, used within the function definition, +that are to replaced by values upon function call. The +variable names defined in the parameterlist, called formal +parameters, do not affect the definition and use of +variables defined with the same name in the rest of the +BASIC program.

+ +

A type declaration character may be suffixed to the +function name to designate the data type of the function +result.

+ +

2.5. DEFINT/SNG/DBL/STR

+ + + + + + + +
+ +

syntax

+
+ +

DEF<type> <range of letters>

+
+
+ + + + + + +
+ +

purpose

+
+ +

Any undefined variable starting with the letter included +in the range of letters is declared of type <type> +unless a type declaration character is appended. The range +of letters is a comma separated list of characters and +character ranges (<letter>-<letter>).

+
+ +

2.6. DIM

+ + + + + + + +
+ +

syntax

+
+ +

DIM <list of subscripted variable>

+
+
+ + + + + + +
+ +

purpose

+
+ +

The DIM statement allocates storage for subscripted +variables. If an undefined subscripted variable is used the +maximum value of the array subscript is assumed to be 10. A +subscript out of range is signalled by the program (when ACK +works) The minimum subscript value is 0, unless the OPTION +BASE statement has been encountered.

+
+ +

All variables in a subscripted variable are initially +zero.

+ +

BUGS. Multi-dimensional arrays MUST be defined. +Subscript out of range is left unnotified.

+ +

2.7. END

+ + + + + + + +
+ +

syntax

+
+ +

END

+
+
+ + + + + + +
+ +

purpose

+
+ +

END terminates a BASIC program and returns to the UNIX +shell. An END statement at the end of the BASIC program is +optional.

+
+ +

2.8. ERR and ERL

+ + + + + + + +
+ +

syntax

+
+ +

<identifier name>= ERR

+
+
+ + + + + +
+

<identifier name>= ERL

+
+ + + + + + +
+ +

purpose

+
+ +

Whenever an error occurs the variable ERR contains the +error number and ERL the BASIC line where the error +occurred. The variables are usually used in error handling +routines provided by the user.

+
+ +

2.9. ERROR

+ + + + + + + +
+ +

syntax

+
+ +

ERROR <integer expression>

+
+
+ + + + + + +
+ +

purpose

+
+ +

To simulate the occurrence of a BASIC error. To define a +private error code a value must be used that is not already +in use by the BASIC runtime system. The list of error +messages currently in use can be found in appendix B.

+
+ +

2.10. FIELD

+ + + + + + + +
+ +

purpose

+
+ +

To be implemented.

+
+
+ +

2.11. FOR...NEXT

+ + + + + + +
+ +

syntax

+
+ +

FOR <variable>= +<low>TO<high>[STEP<size>]

+
+ + + + + +
+

......
+NEXT [<variable>][,<variable>...]

+
+ + + + + + +
+ +

purpose

+
+ +

The FOR statements allows a series of statements to be +performed repeatedly. <variable> is used as a counter. +During the first execution pass it is assigned the value +<low>, an arithmetic expression. After each pass the +counter is incremented (decremented) with the step size +<size>, an expression. Ommission of the step size is +intepreted as an increment of 1.

+
+ + + + + +
+

Execution of the program lines specified between the FOR +and the NEXT statement is terminated as soon as <low> +is greater (less) than <high>

+ +

The NEXT statement is labeled with the name(s) of the +counter to be incremented.

+ +

The variables mentioned in the NEXT statement may be +ommitted, in which case the variable of increment the +counter of the most recent FOR statement. If a NEXT +statement is encountered before its corresponding FOR +statement, the error message "NEXT without FOR" is +generated.

+ +

2.12. GET

+ + + + + + + +
+ +

syntax

+
+ +

GET [#]<file number>[, <record number>]

+
+
+ + + + + + + +
+ +

purpose

+
+ +

To be implemented.

+
+
+ +

2.13. GOSUB...RETURN

+ + + + + + + +
+ +

syntax

+
+ +

GOSUB <line number> ...

+
+
+ + + + + +
+

RETURN

+
+ + + + + + +
+ +

purpose

+
+ +

The GOSUB statement branches to the first statement of a +subroutine. The RETURN statement cause a branch back to the +statement following the most recent GOSUB statement. A +subroutine may contain more than one RETURN statement.

+
+ +

Subroutines may be called recursively. Nesting of +subroutine calls is limited, upon exceeding the maximum +depth the error message "XXXXX" is displayed.

+ +

2.14. GOTO

+ + + + + + + +
+ +

syntax

+
+ +

GOTO <line number>

+
+
+ + + + + + +
+ +

purpose

+
+ +

To branch unconditionally to a specified line in the +program. If <line number> does not exists, the +compilation error message "Line not defined" is +displayed.

+
+ + + + + + +
+ +

remarks

+
+ +

Microsoft BASIC continues at the first line equal or +greater then the line specified.

+
+ +

2.15. IF...THEN

+ + + + + +
+ +

syntax

+
+
+ + + + + +
+

IF <expression> THEN {<statements>|<line +number>} [ELSE {<statements>|<line +number>}]

+
+ + + + + + +
+ +

syntax

+
+ +

IF <expression> GOTO <line number> [ELSE +{<statements>|<line number>}]

+
+ + + + + + +
+ +

purpose

+
+ +

The IF statement is used to make a decision regarding +the program flow based on the result of the expressions. If +the expression is not zero, the THEN or GOTO clause is +executed. If the result of <expression> is zero, the +THEN or GOTO clause is ignored and the ELSE clause, if +present is executed.

+
+ + + + + +
+

IF..THEN..ELSE statements may be nested. Nesting is +limited by the length of the line. The ELSE clause matches +with the closests unmatched THEN.

+ +

When using IF to test equality for a value that is the +result of a floating point expression, remember that the +internal representation of the value may not be exact. +Therefore, the test should be against a range to handle the +relative error.

+
+ + + + + + +
+ +

remarks

+
+ +

Microsoft BASIC allows a comma before THEN.

+
+ +

2.16. INPUT

+ + + + + + +
+ +

syntax

+
+ +

INPUT [;][<"prompt string">;]<list of +variables>

+
+ + + + + + +
+ +

purpose

+
+ +

An INPUT statement can be used to obtain values from the +user at the terminal. When an INPUT statement is encountered +a question mark is printed to indicate the program is +awaiting data. IF <"prompt string"> is +included, the string is printed before the the question +mark. The question mark is suppressed when the prompt string +is followed by a comma, rather then a semicolon.

+
+ +

For each variable in the variable a list a value should +be supplied. Data items presented should be separated by a +comma.

+ +

The type of the variable in the variable list must +aggree with the type of the data item entered. Responding +with too few or too many data items causes the message +"?Redo". No assignment of input values is made +until an acceptable response is given.

+ + + + + + +
+ +

remarks

+
+ +

The option to disgard the carriage return with the +semicolon after the input symbol is not yet implemented.

+
+ +

2.17. INPUT [#]

+ + + + + + + +
+ +

syntax

+
+ +

INPUT #<file number>,<list of variables>

+
+
+ + + + + + +
+ +

purpose

+
+ +

The purpose of the INPUT# statement is to read data +items from a sequential file and assign them to program +variables. <file number> is the number used to open +the file for input. The variables mentioned are +(subscripted) variables. The type of the data items read +should aggree with the type of the variables. A type +mismatch results in the error message "XXXXX".

+
+ +

The data items on the sequential file are separated by +commas and newlines. In scanning the file, leading spaces, +new lines, tabs, and carriage returns are ignored. The first +character encountered is assumed to be the state of a new +item. String items need not be enclosed with double quotes, +provided it does not contain spaces, tabs, newlines and +commas,

+ + + + + + +
+ +

remarks

+
+ +

Microsoft BASIC won’t assign values until the end +of input statement. This means that the user has to supply +all the information.

+
+ +

2.18. LET

+ + + + + + + +
+ +

syntax

+
+ +

[LET]<variable>=<expression>

+
+
+ + + + + + +
+ +

purpose

+
+ +

To assign the value of an expression to a (subscribted) +variable. The type convertions as dictated in chapter 1 +apply.

+
+ +

2.19. LINE INPUT

+ + + + + + +
+ +

syntax

+
+ +

LINE INPUT [;][<"prompt +string">;]<string variable>

+
+ + + + + + +
+ +

purpose

+
+ +

An entire line of input is assigned to the string +variable. See INPUT for the meaning of the <"prompt +string"> option.

+
+ +

2.20. LINE INPUT [#]

+ + + + + + +
+ +

syntax

+
+ +

LINE INPUT #<file number>,<string +variable>

+
+ + + + + + +
+ +

purpose

+
+ +

Read an entire line of text from a sequential file +<file number> and assign it to a string variable.

+
+ +

2.21. LSET and RSET

+ + + + + + + +
+ +

purpose

+
+ +

To be implemented

+
+
+ +

2.22. MID$

+ + + + + + +
+ +

syntax

+
+ +

MID$(<string expr1>,n[,m])=<string +expr2>

+
+ + + + + + +
+ +

purpose

+
+ +

To replace a portion of a string with another string +value. The characters of <string expr2> replaces +characters in <string expr1> starting at position n. +If m is present, at most m characters are copied, otherwise +all characters are copied. However, the string obtained +never exceeds the length of string expr1.

+
+ +

2.23. ON ERROR GOTO

+ + + + + + + +
+ +

syntax

+
+ +

ON ERROR GOTO <line number>

+
+
+ + + + + + +
+ +

purpose

+
+ +

To enable error handling within the BASIC program. An +error may result from arithmetic errors, disk problems, +interrupts, or as a result of the ERROR statement. After +printing an error message the program is continued at the +statements associated with <line number>.

+
+ +

Error handling is disabled using ON ERROR GOTO 0. +Subsequent errors result in an error message and program +termination.

+ +

2.24. ON...GOSUB and ON ...GOTO

+ + + + + + +
+ +

syntax

+
+ +

ON <expression> GOSUB <list of line +numbers>

+
+ + + + + +
+

ON <expression> GOTO <list of line +numbers>

+
+ + + + + + +
+ +

purpose

+
+ +

To branch to one of several specified line numbers or +subroutines, based on the result of the <expression>. +The list of line numbers are considered the first, second, +etc alternative. Branching to the first occurs when the +expression evaluates to one, to the second alternative on +two, etc. If the value of the expression is zero or greater +than the number of alternatives, processing continues at the +first statement following the ON..GOTO (ON GOSUB) +statement.

+
+ +

When the expression results in a negative number the an +"Illegal function call" error occurs.

+ +

BUG If the value of the expression is zero or greater +than the number of alternatives, processing does NOT +continue at the first statement following the ON..GOTO (ON +GOSUB) statement.

+ +

2.25. OPEN

+ + + + + + +
+ +

syntax

+
+ +

OPEN {"i" | "o" | "r" } , +[#]<file number> , <file-name>

+
+ + + + + + +
+ +

purpose

+
+ +

To open <file-name> (filename should be quoted) +for input/reading or output. If file is not opened for +output it has to be existent, otherwise an "file not +found" error will occur.

+
+ +

2.26. OPTION BASE

+ + + + + + + +
+ +

syntax

+
+ +

OPTION BASE n

+
+
+ + + + + + +
+ +

purpose

+
+ +

To declare the lower bound of subsequent array +subscripts as either 0 or 1. The default lower bound is +zero.

+
+ +

2.27. POKE

+ + + + + + + +
+ +

syntax

+
+ +

POKE <expr1>,<expr2>

+
+
+ + + + + + +
+ +

purpose

+
+ +

To poke around in memory. The use of this statement is +not recommended, because it requires full understanding of +both the implementation of the Amsterdam Compiler Kit and +the hardware characteristics.

+
+ +

2.28. PRINT

+ + + + + + +
+ +

syntax

+
+ +

PRINT <list of variables and/or constants>

+
+ + + + + + +
+ +

purpose

+
+ +

To print constants or the contents of variables on the +terminal-device. If the variables or constants are seperated +by comma’s the values will be printed seperated by +tabs. If the variables or constants are seperated by +semi-colon’s the values will be printed without spaces +in between. The new-line generated at the end of the +print-statement can be suppressed by a semi-colon at the end +of list of variables or constants.

+
+ +

2.29. PRINT USING

+ + + + + + + +
+ +

purpose

+
+ +

To be implemented

+
+
+ +

2.30. PUT

+ + + + + + + +
+ +

purpose

+
+ +

To be implemented

+
+
+ +

2.31. RANDOMIZE

+ + + + + + + +
+ +

syntax

+
+ +

RANDOMIZE [<expression>]

+
+
+ + + + + + +
+ +

purpose

+
+ +

To reset the random seed. When the expression is +ommitted, the system will ask for a value between -32768 and +32767. The random number generator returns the same sequence +of values provided the same seed is used.

+
+ +

2.32. READ

+ + + + + + + +
+ +

syntax

+
+ +

READ <list of variables>

+
+
+ + + + + + +
+ +

purpose

+
+ +

To read values from the DATA statements and assign them +to variables. The type of the variables should match to the +type of the items being read, otherwise a "Syntax +error" occurs. If all data is read the message +"Out of data" will be displayed.

+
+ +

2.33. REM

+ + + + + + + +
+ +

syntax

+
+ +

REM <remark>

+
+
+ + + + + + +
+ +

purpose

+
+ +

To include explantory information in a program. The REM +statements are not executed. A single quote has the same +effect as : REM, which allows for the inclusion of comment +at the end of the line.

+
+ + + + + + +
+ +

remarks

+
+ +

Microsoft BASIC does not allow REM statements as part of +DATA lines.

+
+ +

2.34. RESTORE

+ + + + + + + +
+ +

syntax

+
+ +

RESTORE [<line number>]

+
+
+ + + + + + +
+ +

purpose

+
+ +

To allow DATA statements to be re-read from a specific +line. After a RESTORE statement is executed, the next READ +accesses the first item of the DATA statements. If <line +number> is specified, the next READ accesses the first +item in the specified line.

+
+ +

Note that data statements result in a sequential +datafile generated by the compiler, being read by the read +statements. This data file may be replaced using the +operating system functions with a modified version, provided +the same layout of items (same number of lines and items per +line) is used.

+ +

2.35. STOP

+ + + + + + + +
+ +

syntax

+
+ +

STOP

+
+
+ + + + + + +
+ +

purpose

+
+ +

To terminate the execution of a program and return to +the operating system command interpreter. A STOP statement +results in the message "Break in line ???"

+
+ +

2.36. SWAP

+ + + + + + + +
+ +

syntax

+
+ +

SWAP <variable>,<variable>

+
+
+ + + + + + + +
+ +

purpose

+
+ +

To exchange the values of two variables.

+
+
+ +

BUG. Strings cannot be swapped !

+ +

2.37. TRON/TROFF

+ + + + + + + +
+ +

syntax

+
+ +

TRON

+
+
+ + + + + + + +
+ +

syntax

+
+ +

TROFF

+
+
+ + + + + + +
+ +

purpose

+
+ +

As an aid in debugging the TRON statement results in a +program listing each line being interpreted. TROFF disables +generation of this code.

+
+ +

2.38. WHILE...WEND

+ + + + + + + +
+ +

syntax

+
+ +

WHILE <expression> ..... WEND

+
+
+ + + + + + +
+ +

purpose

+
+ +

To execute a series of BASIC statements as long as a +conditional expression is true. WHILE...WEND loops may be +nested.

+
+ +

2.39. WRITE

+ + + + + + + +
+ +

syntax

+
+ +

WRITE [<list of expressions>]

+
+
+ + + + + + +
+ +

purpose

+
+ +

To write data at the terminal in DATA statement layout +conventions. The expressions should be separated by +commas.

+
+ +

2.40. WRITE #

+ + + + + + +
+ +

syntax

+
+ +

WRITE #<file number> ,<list of +expressions>

+
+ + + + + + +
+ +

purpose

+
+ +

To write a sequential data file, being opened with the +"O" mode. The values are being writting using the +DATA statements layout conventions.

+
+ +

3. FUNCTIONS

+ + + + + + +
+ +

ABS(X)

+
+ +

Returns the absolute value of expression X

+
+ + + + + + +
+ +

ASC(X$)

+
+ +

Returns the numeric value of the first character of the +string. If X$ is not initialized an "Illegal function +call" error is returned.

+
+ + + + + + +
+ +

ATN(X)

+
+ +

Returns the arctangent of X in radians. Result is in the +range of -pi/2 to pi/2.

+
+ + + + + + +
+ +

CDBL(X)

+
+ +

Converts X to a double precision number.

+
+ + + + + + +
+ +

CHR$(X)

+
+ +

Converts the integer value X to its ASCII character. X +must be in the range of 0 to 257. It is used for cursor +addressing and generating bel signals.

+
+ + + + + + +
+ +

CINT(X)

+
+ +

Converts X to an integer by rounding the fractional +portion. If X is not in the range -32768 to 32767 an +"Overflow" error occurs.

+
+ + + + + + +
+ +

COS(X)

+
+ +

Returns the cosine of X in radians.

+
+ + + + + + +
+ +

CSNG(X)

+
+ +

Converts X to a single precision number.

+
+ + + + + + +
+ +

CVI(<2-bytes>)

+
+ +

Convert two byte string value to integer number.

+
+ + + + + + +
+ +

CVS(<4-bytes>)

+
+ +

Convert four byte string value to single precision +number.

+
+ + + + + + +
+ +

CVD(<8-bytes>)

+
+ +

Convert eight byte string value to double precision +number.

+
+ + + + + + +
+ +

EOF[(<file-number>)]

+
+ +

Returns -1 (true) if the end of a sequential file has +been reached.

+
+ + + + + + +
+ +

EXP(X)

+
+ +

Returns e(base of natural logarithm) to the power of X. +X should be less then 10000.0.

+
+ + + + + + +
+ +

FIX(X)

+
+ +

Returns the truncated integer part of X. FIX(X) is +equivalent to SGN(X)*INT(ABS(X)). The major difference +between FIX and INT is that FIX does not return the next +lower number for negative X.

+
+ + + + + + +
+ +

HEX$(X)

+
+ +

Returns the string which represents the hexadecimal +value of the decimal argument. X is rounded to an integer +using CINT before HEX$ is evaluated.

+
+ + + + + + +
+ +

INT(X)

+
+ +

Returns the largest integer <= X.

+
+ + + + + + +
+ +

INP$(X[,[#]Y])

+
+ +

Returns the string of X characters read from the +terminal or the designated file.

+
+ + + + + + +
+ +

LEN(X$)

+
+ +

Returns the number of characters in the string X$. Non +printable and blancs are counted too.

+
+ + + + + + +
+ +

LOC(<file number>)

+
+ +

For sequential files LOC returns position of the +read/write head, counted in number of bytes. For random +files the function returns the record number just read or +written from a GET or PUT statement. If nothing was read or +written 0 is returned.

+
+ + + + + + +
+ +

LOG(X)

+
+ +

Returns the natural logarithm of X. X must be greater +than zero.

+
+ + + + + + +
+ +

MID$(X,I,[J])

+
+ +

Returns first J characters from string X starting at +position I in X. If J is omitted all characters starting of +from position I in X are returned.

+
+ + + + + + +
+ +

MKI$(X)

+
+ +

Converts an integer expression to a two-byte string.

+
+ + + + + + +
+ +

MKS$(X)

+
+ +

Converts a single precision expression to a four-byte +string.

+
+ + + + + + +
+ +

MKD$(X)

+
+ +

Converts a double precision expression to a eight-byte +string.

+
+ + + + + + +
+ +

OCT$(X)

+
+ +

Returns the string which represents the octal value of +the decimal argument. X is rounded to an integer using CINT +before OCTS is evaluated.

+
+ + + + + + +
+ +

PEEK(I)

+
+ +

Returns the byte read from the indicated memory. (Of +limited use in the context of ACK)

+
+ + + + + + +
+ +

POS(I)

+
+ +

Returns the current cursor position. To be +implemented.

+
+ + + + + + +
+ +

RIGHT$(X$,I)

+
+ +

Returns the right most I characters of string X$. If I=0 +then the empty string is returned.

+
+ + + + + + +
+ +

RND(X)

+
+ +

Returns a random number between 0 and 1. X is a dummy +argument.

+
+ + + + + + +
+ +

SGN(X)

+
+ +

If X>0 , SGN(X) returns 1.

+
+ + + + + +
+

if X=0, SGN(X) returns 0.
+if X<0, SGN(X) returns -1.

+
+ + + + + + +
+ +

SIN(X)

+
+ +

Returns the sine of X in radians.

+
+ + + + + + +
+ +

SPACE$(X)

+
+ +

Returns a string of spaces length X. The expression X is +rounded to an integer using CINT.

+
+ + + + + + +
+ +

STR$(X)

+
+ +

Returns the string representation value of X.

+
+ + + + + + +
+ +

STRING$(I,J)

+
+ +

Returns thes string of length Iwhose characters all have +ASCII code J. (or first character when J is a string)

+
+ + + + + + +
+ +

TAB(I)

+
+ +

Spaces to position I on the terminal. If the current +print position is already beyond space I,TAB goes to that +position on the next line. Space 1 is leftmost position, and +the rightmost position is width minus 1. To be used within +PRINT statements only.

+
+ + + + + + +
+ +

TAN(X)

+
+ +

Returns the tangent of X in radians. If TAN overflows +the "Overflow" message is displayed.

+
+ + + + + + +
+ +

VAL(X$)

+
+ +

Returns the numerical value of string X$. The VAL +function strips leading blanks and tabs from the argument +string.

+
+ +

APPENDIX A DIFFERENCES WITH MICROSOFT BASIC

+ +

The following list of Microsoft commands and statements +are not recognized by the compiler.

+
     SPC
+     USR
+     VARPTR
+     AUTO
+     CHAIN
+     CLEAR
+     CLOAD
+     COMMON
+     CONT
+     CSAVE
+     DELETE
+     EDIT
+     ERASE
+     FRE
+     KILL
+     LIST
+     LLIST
+     LOAD
+     LPRINT
+     MERGE
+     NAME
+     NEW
+     NULL
+     RENUM
+     RESUME
+     RUN
+     SAVE
+     WAIT
+     WIDTH LPRINT
+
+ +

Some statements are in the current implementation not +available, but will be soon. These include:

+
     CALL
+     DEFUSR
+     FIELD
+     GET
+     INKEY
+     INPUT$
+     INSTR$
+     LEFT$
+     LSET
+     RSET
+     PUT
+
+ +

APPENDIX B RESERVED WORDS IN BASIC-EM

+ +

The following list of words/symbols/names/identifiers +are reserved, which means that they can not be used for +variable-names.

+ + + + +

ABS

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

AND

+
+ + +

ASC

+
+ + +

AS
+ATN

+
+
+ + +

AUTO

+
+ + +

BASE

+
+ + +

CALL
+CDBL

+
+
+ + +

CHAIN

+
+ + +

CHR

+
+ + +

CINT
+CLEAR

+
+
+ + +

CLOAD

+
+ +

CLOSE

+
+ + +

COMMON
+CONT

+
+
+ + +

COS

+
+ + +

CSNG

+
+ + +

CSAVE
+CVI

+
+
+ + +

CVS

+
+ + +

CVD

+
+ + +

DATA
+DEFINT

+
+
+ +

DEFSNG

+
+ +

DEFDBL

+
+ +

DEFSTR
+DEF

+
+
+ + +

DELETE

+
+ +

DIM

+
+ + +

EDIT
+ELSE

+
+
+ + +

END

+
+ + +

EOF

+
+ + +

ERASE
+ERROR

+
+
+ + +

ERR

+
+ + +

ERL

+
+ + +

ELSE
+EQV

+
+
+ + +

EXP

+
+ + +

FIELD

+
+ + +

FIX
+FOR

+
+
+ + +

FRE

+
+ + +

GET

+
+ + +

GOSUB
+GOTO

+
+
+ + +

HEX

+
+ + +

IF

+
+ + +

IMP
+INKEY

+
+
+ + +

INPUT

+
+ + +

INP

+
+ + +

INSTR
+INT

+
+
+ + +

KILL

+
+ + +

LEFT

+
+ + +

LEN

+
+ + +

LET

+
+
+ + +

LINE

+
+ + +

LIST

+
+ + +

LLIST
+LOAD

+
+
+ + +

LOC

+
+ + +

LOG

+
+ + +

LPOS
+LPRINT

+
+
+ +

LSET

+
+ + +

MERGE

+
+ +

MID
+MKI

+
+
+ + +

MKS

+
+ + +

MKD

+
+ + +

MOD
+NAME

+
+
+ + +

NEW

+
+ + +

NEXT

+
+ + +

NOT

+
+ + +

NULL

+
+
+ + +

ON

+
+ + +

OCT

+
+ + +

OPEN
+OPTION

+
+
+ +

OR

+
+ + +

OUT

+
+ + +

PEEK
+POKE

+
+
+ + +

PRINT

+
+ + +

POS

+
+ + +

PUT
+RANDOMIZE

+
+
+ +

READ

+
+ + +

REM

+
+ + +

RENUM
+REN

+
+
+ + +

RESTORE

+
+ +

RESUME

+
+ +

RETURN
+RIGHT

+
+
+ + +

RND

+
+ + +

RUN

+
+ + +

SAVE
+STEP

+
+
+ + +

SGN

+
+ + +

SIN

+
+ + +

SPACE
+SPC

+
+
+ + +

SQR

+
+ + +

STOP

+
+ + +

STRING
+STR

+
+
+ + +

SWAP

+
+ + +

TAB

+
+ + +

TAN
+THEN

+
+
+ + +

TO

+
+ + +

TRON

+
+ + +

TROFF
+USING

+
+
+ + +

USR

+
+ + +

VAL

+
+ + +

VARPTR
+WAIT

+
+
+ + +

WHILE

+
+ + +

WEND

+
+ + +

WIDTH
+WRITE

+
+
+ + +

XOR

+
+
+
+ + diff --git a/src/olddocs/basic.pdf b/src/olddocs/basic.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0848c96d13d224f4623389f94e3d3577cb225852 GIT binary patch literal 55643 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�#OZF2UNBc@=lM6h{$A$;=#Dq_`)-Uu7lBBrzxO zY>mfA5#9Eo?Z$=K3z=DnipyzAsk*pnBI3{^Vy5P!p|ZZ-nD?rg;dEj0zeY<2*$n-c zdkH_^!(s#fhgz5u^5WrNFA4qc?=8ARG=>@5|@6u>;!Rj$>>+d3@a-OO^>TR zN4t!TQj|TujfIng4=08i7G>2_=iUcb&5Jk+U%C{?V@-RF51dwQGRo*Q3bf1lIp`es z$d_HvycQ8j!+CNFgFu$@#4|QCtL8-8##aDI}@ekfu z_{Mjz%U z)ZH%uB829%DAif&$|taleqmQmpkrd<==tdIQ7bwbhf$-+x2b8hBn(w{+}7K(I?(8vBUisXe*5*gWoln-T2se(YVqx5y^sygb4ebJcaoDqjAG$(tM)ziWufd)vsTOc+bjx z#)b>Aj#i9l+^U>k8+A4I?7a}zw>e^TNB%5y+iR%@KW((TMg3U7&f`NbqK&K;|54D6 z_Y~cfT&A?gaYbsaX29IxTd(+1nHB1s9$o%iI~OOCnBt_jQbF(J74`EvQ(g+avqvEOb=idxHb-Bg5#~5z$F>(*Hu~%llu;ykpVRaVdw_jP zoX@}t)0UlerGuLz&9nE!FA>%HY9$QJit+H2nEHoFIC?1U@b8m`Pvd2dzQi97+os!_ zj4dcI1{tl>m!Ah!iFRjzvdE0L`w^@D5@AKqth|bDPSdHCuTqYnlkwYDLh>D+j&8m zGf`2s#@Zx~l5b3 zM)LAWTOpwnPop9c>HEMr#5fEO=t}ZSOUC@r4G4T4ZYTbl(;H704Y|>8jxbZMtupnwT=Yj)V@RzB0ePk z%*}fZ+h5|=t!7GN$bQ&1m>+iP6ukIJbNS_|u5yI7S*CA$Y>TL% z1}@#@+i(I}li`fhh-zTBG_>1axZRI`irVMFx~cvCQU|ZTng#wUQbbRH|5-#I`)P9; zJk0D+R0oUcJ2C@hoch5RCQZFgGMoH;MR+s>mtyl`(F%E()Qkpqsd-Vkr&0?*_sOB7DMhS_m4 z#&e-e1bf0={%E~Ukd|aXFBEtr5#Iaz)hjS|U2wGIv0J}K1h=RHmP<(wZdn_0{Q1GL zWXt{cdS6De36SF6ZK+;_sxCPZsP|wdAs2ir@#9f60W~Vv(KHXsB7)KgOiR7)p!m@((Nu zLTk;PSwx|hRC+VKhpo$kNvh{^K`Ow0mu<7bVVwQwtyJ_dtO0J5aG17`u3DUCU<||O z4AlVhX=8^q+WKY*%Pw8>lv00{bWymuLzCyc!9qKcVxW8P#bMv~_M7|TS(>~+n`fzI zn{Z6*=`N+6^wiTm?}E7w@+*iFlEAJ(of^g&&ljjoB?{G}d{U*E$&`;rIrnNpnO5fM zXumOKz;#Bf;)?Tk2Yl_4B9Efit8#CH>N7tlyyU37z!y%MN_XI2mME{w43<%(a!G&x zf`8*Z#d8k{-1zLlP*Kg{ulp(4DNWpXFvod3K?P4ak3Nc#zik`O&;IlEj!McHy?uiaDz01? zqs09q#UkLnEw>PD@ss#8eY=k#iIN}MSDe2Q(!f7yd!JR4UzGpOwBsgI-wgkjU;Ulr zhV3(=H`ddztsfube#hI`AykR$c3+Vvd`ixP@U;7u@I%1E`yCE?#9vjh3b`M-APY$5 z!S1zv0SCMyf^DLB=!B`}x+0gmyH4VQ&VAu0(t2slcuB52hG(rO6FC^=!HSiU4ur~MVAA}4S3~TgPmK@6PmUKCqa^;1o4YM{o zDGQfhHzD=y+VjZRqs%PP^&{2R`#^^kykus68g@YL#Q(0-_o-N)xosY^pv2K*f-l;y z6@snH%fs=^4_uT~jNVOjQ@MP3-JdtP#aFUNji8L$8qixe;EmKS0PEsUQ0F}YuaGQF zw7;j@f;8ldl^1+tP`HX4CbyFLg=zU6UXO4g8EFl#;ggIy&puD(^ad)Gkzy;BG#PJp zCXvvuIZHXTwHRtWHl2Hqs~@}0mg-^C_Lg~apN?Je4ED#_wy7*Yn78t(8TV7bW>-HVQG#tt&F~GmqCk z1UA^Vex#))_M94baAsg!+P)Q9L-;OyFHtime=~4f?Ad5$N?S;}TLoJ#jukPj|!A_}ygbC_tDxJ^Xn2#gohK}J{%~W{y(cWglV7t7TW2cEj ziHs7c?D07ar*varw0i;KQ8ZvI%YSN=Uzzo!jPXlc1yRM~eACexPxej5JM1!&@ai0< z$r0-VD=XH=?0qFY?6m8?%sFe0)gk-ejjEo)sh>}bnn+`-)1(j;T-@T99AX5hgEd5R z#4L2xj!SQj6>2^f$kvgH;F&&cwJHxXEn#gN%q10eGbZ{Pth06Y*h9PVMom+g1m7?; zizS2eh@*a$!Y}yTVdu;=piQ`npVc8z-m2x2Bpe!H_R;-zA6(&we3g;6e!^?H>v8s# zVoq+tue`q1^7#!}jRlK6rd?4~p0PlhQBV&c=NY;`@h;eO?jZyDG|x#^^hY%I(~Wv# zirGH?F2WGW`6j;n0$oP5y0}wrXjPm9&UUyAUg7Ow-zMFeH~2-uBsV5R-Yx&-*Crp77h$42907$&Eu-}!R37|dtEs9$0y>A5QS#tYKMqzZDsC}csW5${P) zU$ddSFq}yVsf=(R@3UU<*?^`X_mAQlhk?XI4hMXDouF ziWi)Qy>)1#cO+fjwhVN>aExH8RaIfndZrY=nC3-RP2HIJu=8ZZWQl)Qps7UBZ)4sg z7c>$z*khfx-^}W&f$RKq0ej@3!3-U#nEhtt`(ZuY8(hgO!j%BvwH}hR-YnsQEq?>7 z-Tk1#swa*aYlvnbHT?bid1rn>ZahNjlGP_`PAW_<6&TWhs&H!>Wa9TE`1xQ8Lg$WR(hC34yoACEYS8|UCCMchyZZt>!uec;R1bQpOcqv-X zXc(`?$ie~>JJ7ft!Bk%3y|?BjlL=efBg3XjLB%NNQr$B?6X1h&jkCAA5!KqD>Neuk zO)Gn`7L9IFCunU&d2O}lrhR2SV(^B&(#-frSiGXWHf=oB(yHEGbkC#cMDzJY(*=@r zys_)oHW`rF#`Ld<4DgZ>D^B#Zm~ad7Dr=R5`j#g?W(cLin6nZHp-hKJ5aOcSDdRMyo)xPWiHsRL)# z6DYYGVLjtE_lIYy;mI*mA_l67-C38kI!Y2eHu>Ef>sw9AYtQ&jeX;KwI8<_sSlt_X zA#~wvv9*64goVZ7o>o3?IFZ?M0l(^Yj)8&}XH8WvS#7a^4@&8}QN8LG9>V9v?QZ9d*dg#Gk?-+$Z=hmM8@Z=hiFb)+%M$*c1SuhvcG3!=Twp#+imSKH}>6^ zD+Qv$5|9g4MGhL1#!0UO;|LgzB%$-=rvjNRk4dU`LD&z6Rbw$!(sca#yXV~-&ZX@n zMU6x!w)RGGoT^cc?uQamN%xTrUVNWUZ)SarVsQNMSoI`EG5#p|0>3LwxrVewOvp3v ziN?aPlB$)JX|buuuB5|n58Jf;V4Gdcw}J7wb|&aX7pOo zaS9p@t`bt@)qNTQa1}+90^RERjUzEvD}lQmxjjm zW=7{l?#CdmSF*p(ONLk0214$VRj5e^^e3%zFt( zir%jE{Q&}zqku$*Yl`>1+Y7I+1!;bcGpZHI&N+;`8NR-Jh<4Ro!mEDiBTh#lDA7|Q zyNx(U*skrE(MvO3bNn4|Py;I;7mgQ6)3mylepKIm_}P0G+U7-)rX)gY;T5*5%escl z9`>aS0>||U>Z6d*KF+GpSv_<=j~3)IXY18+=~@cA0dHRKYBb{L@`z76EmY!%zCDZA zu&hfxXCyD4urLojWIXWW&h&(RAN`&SGjr9t_F{#~^{Lot_RECrJZaHFiW6dYU+VPYvtyNp~)m|+E zm)-4W;?{1hw?>YEd>$(uGxX`=Dwjr7`7o;vl7dudf>jGR_13e-PKP=Nhf=!QrCXbg zOw=wY7QWa*nLt1SFtXc+8}5yoPz^nP#AEVgR2T%}B%ZHmrMJi530f&)%FFjf9~z)t zkL$}_Kgh7Pp$c)=?AxAO^>h7BU$*j!nZdD*sB~C9B~>>jy{K=D!dd)-liCBzy`z(_ zVg^qmKM-m*BU*{r!Np#RzvTL;SRQhs8br+PNxr*VzmUOdl1ME+M-W%uxZhsoLC#Mo zYb&*t1D3h|(oA*Ad>^wcFUKzBQTXj%-}@bsIN2AkrvsY0Vh%_mqWmrvTdpOLiCC%o z$&-fB zWgO6T3UD%0(@k))n3L#zlfw0UF>8#I%(AmB3{T3#^5j^qziT}{ zGMy-Duv5qpE`990izIwAyr#+4FHmAVy=uYNz(I|n%WOVaeEa!`&MIcfLPq=kvhJF* zh5_N`gC|q7?(c>21B0C36>A#?Bun_Wu0m72gx4HN@?AoSZ3#slM#4ex5g(+1*(d9V z^Evdmx2`AaZ9*9#%&%S~ZP%Gnbqd=-Jg$u(2lo~XF58-|KS?5Tjq+4FNPmujY;)-7 zR|^-Es29tXQ9xI~Kuc>~RHHghHmMW8`R>v3qt(Q;ZOI5YfssxII$8Gk@9C|48f=1{ z2T&TY$uEMC%lvF*rMfJ;yI%#W@yeMB;(Rx#yW(({`+Bu~4t6@UwRe5V%f_aT-I!$c zj>r16s?`rZMtF))CsheA97EoBkn?!hPZ?dvl|!fF@u5_p%xL=C%z`*I$f4PPKlgW&oo0H?`dVk%*f2!wT1YryY zsmTZdfAmUbRz?nt&jFS^YeDcGwXukigMq!7t)q=SDf16zKM2v+UD96!fDoENF*ADy zM`2Svdw@|{TJNt@W;SM!s+pmqse>jGgsbuY^8Y`kvjF^utN@7|8<>lf9Skrz0|ysy z%?bP<0g?Ya?$Ut3IzRJ6K3O=q0Q$rqI{(urkQb7llpQGJ=fTFt2DFb8plsv-NGKu4 z-8n!-$PUCrg`7iF8>W@G#N93qF518KoOdIZ!C zwBfGL|NMmH_}QPo+YR&+at;}nztaBh`_C5M_3y9ofVARg8IZEsxBz`14e|;6|LeR! zdI1~|Mr>;X8$&Z|6Vf}4=b&GH75Wbm-CgQmsJlbZPdyL>gMVMBnpq23JDB}_En;SD zYy>cL1C-pFNUYo-J0}}QBYQIwQ%59jHjsgty@8XJv89nK5;GeZWNZd9w$%Plop-#E zzaw2(_8&->1gI~~4E_t$A>6Caf6#Q_*~bsAOMr{=U!cy+`TrH_|7I$8;DAtp{_Dj2 zr3s`%z;t&2p!?4iWWphNAd~$Qju1ooStdl|4iLZuL-PHVc6a`tvLQKs1?7Lt3j(hn zX?H;U55Vr)%nFzVi(0)czVtK=R}N=ez==^0&GE%=>SjKXrjmU}Pcl`qMT2JcrCB#1Y&% zNnp%@T)-71*WXSDs1K6shyI;w`pdmR%3uZq(+oNJSsIV!UMMBOXFuL;@VDOzc`~i?VF#MGQ>CRtW{eJ<)KNu#5U_{?e%8SPq;IchU}5BFX=LmOaxilR*;+a|fE;Y~42&TDRv$=o zu+(!f1vwZw8v*UNv9i(w0X#>RdRBll{;B<=;JYCMnY!7U0y*zIxuL!#$lA=>2xJRX zW@8AlcCykpvUe~uu?9I=8vehzns4ax}F! z0$K$b6i9KjcK`y|e2suD$K5vQAFIsoJl&853_4)pZ59t*g>olVw)C#IsVfWRe#vuozeYnYd_5Fhh_bh_FpXNUkvCMd%3d` zh&e!@e+TYgrs;Ms`7bh{ zTJY~}0dsOf_Nu?+V+8}9`%T8e1$5*$8KBGZyDqRN`lHQ2d4G&O3l|6YcdP-rf6NCn z3-cdy36uxft^Lww7A{T*+4wIqK=%(!GPAJ&L5_aS#|nmQXMUBj09E`xA3#g~up?#; zcF2PFOT9pOkQWVqk+E=tA#Ciw$N=3x+5)(RKW&Q{3<-<{#y;{bBon?jQXH%n}mh;g_}myP|`|rA}%q)M{7ArG=^56Qw24?%irU4lw5XLY4Wn*LK{(TGp?+3X*^-Df> z@SpyLotc&8A7k%muLo@E?130qq<0Y?fOUox2o7cgM9% + + + + + +The Code Expander Generator + + + +

The Code Expander Generator

+1. Introduction
+2. The code expander generator
+3. Description of the EM_table
+3.1. Grammar
+3.2. Semantics
+3.2.1. Actions
+3.2.2. Labels
+3.2.3. Arguments of an EM instruction
+3.2.4. Conditionals
+3.2.5. Abbreviations
+3.2.6. Implicit arguments
+3.2.7. Pseudo instructions
+3.2.8. Storage instructions
+3.3. User supplied definitions and functions
+3.4. Generating assembly code
+4. Description of the as_table
+4.1. Grammar
+4.2. Semantics
+4.2.1. Rules
+4.2.2. Declaration of types.
+4.2.3. The function of the @-sign and the if-statement.
+4.2.4. References to operands
+4.2.5. The functions assemble() and block_assemble()
+4.3. Generating assembly code
+5. Building a code expander
+5.1. Phase one
+5.2. Phase two
+6. Acknowledgements
+7. References
+References
+Appendix A, the back -primitives
+Appendix B, description of ACK-a.out library
+ +
+ +

1. Introduction

+ +

A code expander (ce for short) is a part +of the Amsterdam Compiler Kit +1 (ACK) and +provides the user with high-speed generation of +medium-quality code. Although conceptually equivalent to the +more usual code generator, it differs in some +aspects.

+ +

Normally, a program to be compiled with ACK is +first fed to the preprocessor. The output of the +preprocessor goes into the appropriate front end, which +produces EM 2 (a +machine independent low level intermediate code). The +generated EM code is fed into the peephole optimizer, which +scans it with a window of a few instructions, replacing +certain inefficient code sequences by better ones. After the +peephole optimizer a back end follows, which produces +high-quality assembly code. The assembly code goes via the +target optimizer into the assembler and the object code then +goes into the linker/loader, the final component in the +pipeline.

+ +

For various applications this scheme is too slow. When +debugging, for example, compile time is more important than +execution time of a program. For this purpose a new scheme +is introduced:

+ + + + + + + +
+ +

1:

+
+ +

The code generator and assembler are replaced by a +library, the code expander, consisting of a set of +routines, one for every EM-instruction. Each routine expands +its EM-instruction into relocatable object code. In +contrast, the usual ACK code generator uses expensive +pattern matching on sequences of EM-instructions. The +peephole and target optimizer are not used.

+
+ + + + + + + +
+ +

2:

+
+ +

These routines replace the usual EM-generating routines +in the front end; this eliminates the overhead of +intermediate files.

+
+ +

This results in a fast compiler producing object file, +ready to be linked and loaded, at the cost of unoptimized +object code.

+ +

Because of the simple nature of the code expander, it is +much easier to build, to debug, and to test. Experience has +demonstrated that a code expander can be constructed, +debugged, and tested in less than two weeks.

+ +

This document describes the tools for automatically +generating a ce (a library of C files) from two +tables and a few machine-dependent functions. A thorough +knowledge of EM is necessary to understand this +document.

+ +

2. The code expander generator

+ +

The code expander generator (ceg) generates a +code expander from two tables and a few machine-dependent +functions. This section explains how ceg works. The +first half describes the transformations that are done on +the two tables. The second half tells how these +transformations are done by the ceg.

+ +

A code expander consists of a set of routines that +convert EM-instructions directly to relocatable object code. +These routines are called by a front end through the +EM_CODE(3ACK) 3 +interface. To free the table writer of the burden of +building an object file, we supply a set of routines that +build an object file in the ACK.OUT(5ACK) +4 format (see +appendix B). This set of routines is called the +back-primitives (see appendix A). In short, a code +expander consists of a set of routines that map the EM_CODE +interface on the back-primitives interface.

+ +

To avoid repetition of the same sequences of +back-primitives in different EM-instructions and to +improve readability, the EM-to-object information must be +supplied in two tables. The EM_table maps EM to an assembly +language, and the as_table maps assembly code to +back-primitives. The assembly language is chosen by +the table writer. It can either be an actual assembly +language or his ad-hoc designed language.

+ +

The following picture shows the dependencies between the +different components:

+ +

+ +

The picture suggests that, during compilation, the EM +instructions are first transformed into assembly +instructions and then the assembly instructions are +transformed into object-generating calls. This is not what +happens in practice, although the user is free to think it +does. Actually, however the EM_table and the as_table are +combined during code expander generation time, yielding an +imaginary compound table that results in routines from the +EM_CODE interface that generate object code directly.

+ +

As already indicated, the compound table does not exist +either. Instead, each assembly instruction in the as_table +is converted to a routine generating C +5 code to generate +C code to call the back-primitives. The EM_table is +converted into a program that for each EM instruction +generates a routine, using the routines generated from the +as_table. Execution of the latter program will then generate +the code expander.

+ +

This scheme allows great flexibility in the table +writing, while still resulting in a very efficient code +expander. One implication is that the as_table is +interpreted twice and the EM_table only once. This has +consequences for their structure.

+ +

To illustrate what happens, we give an example. The +example is an entry in the tables for the VAX-machine. The +assembly language chosen is a subset of the VAX assembly +language.

+ +

One of the most fundamental operations in EM is +‘‘loc c’’, load the value of c on +the stack. To expand this instruction the tables contain the +following information:

+
     EM_table   :
+        C_loc   ==>   "pushl $$$1".
+          /* $1 refers to the first argument of C_loc.
+           * $$ is a quoted $. */
+
+
+
+
+     as_table   :
+        pushl  src : CONST   ==>
+                              @text1( 0xd0);
+                              @text1( 0xef);
+                              @text4( %$( src->num)).
+
+ +

The as_table is transformed in the following +routine:

+
     pushl_instr(src)
+     t_operand *src;
+     /* ‘‘t_operand’’ is a struct defined by the
+      * table writer. */
+     {
+        printf("swtxt();");
+        printf("text1( 0xd0 );");
+        printf("text1( 0xef );");
+        printf("text4(%s);", substitute_dollar( src->num));
+     }
+
+ +

Using ‘‘pushl_instr()’’, the +following routine is generated from the EM_table:

+
     C_loc( c)
+     arith c;
+     /* text1() and text4() are library routines that fill the
+      * text segment. */
+     {
+         swtxt();
+         text1( 0xd0);
+         text1( 0xef);
+         text4( c);
+     }
+
+ +

A compiler call to ‘‘C_loc()’’ +will cause the 1-byte numbers +‘‘0xd0’’ and +‘‘0xef’’ and the 4-byte value of the +variable ‘‘c’’ to be stored in the +text segment.

+ +

The transformations on the tables are done automatically +by the code expander generator. The code expander generator +is made up of two tools: emg and asg. +Asg transforms each assembly instruction into a C +routine. These C routines generate calls to the +back-primitives. The generated C routines are used by +emg to generate the actual code expander from the +EM_table.

+ +

The link between emg and asg is an +assembly language. We did not enforce a specific syntax for +the assembly language; instead we have given the table +writer the freedom to make an ad-hoc assembly language or to +use an actual assembly language suitable for his purpose. +Apart from a greater flexibility this has another advantage; +if the table writer adopts the assembly language that runs +on the machine at hand, he can test the EM_table +independently from the as_table. Of course there is a price +to pay: the table writer has to do the decoding of the +operands himself. See section 4 for more details.

+ +

Before we describe the structure of the tables in +detail, we will give an overview of the four main +phases.

+ +

phase 1:

+ + + + + +
+

The as_table is transformed by asg. This results +in a set of C routines. Each assembly-opcode generates one C +routine. Note that a call to such a routine does not +generate the corresponding object code; it generates C code, +which, when executed, generates the desired object code.

+
+ +

phase 2:

+ + + + + +
+

The C routines generated by asg are used by emg to +expand the EM_table. This results in a set of C routines, +the code expander, which conform to the procedural interface +EM_CODE(3ACK). A call to such a routine does indeed generate +the desired object code.

+
+ +

phase 3:

+ + + + + +
+

The front end that uses the procedural interface is +linked/loaded with the code expander generated in phase 2 +and the back-primitives (a supplied library). This +results in a compiler.

+
+ +

phase 4:

+ + + + + +
+

The compiler runs. The routines in the code expander are +executed and produce object code.

+
+ +

3. Description of the EM_table

+ +

This section describes the EM_table. It contains four +subsections. The first 3 sections describe the syntax of the +EM_table, the semantics of the EM_table, and the functions +and constants that must be present in the EM_table, in the +file ‘‘mach.c’’ or in the file +‘‘mach.h’’. The last section +explains how a table writer can generate assembly code +instead of object code. The section on semantics contains +many examples.

+ +

3.1. Grammar

+ +

The following grammar describes the syntax of the +EM_table.

+ +

+ +

The ‘‘(’’ +‘‘)’’ brackets are used for +grouping, ‘‘[’’ ... +‘‘]’’ means ... 0 or 1 time, a +‘‘*’’ means zero or more times, and +a ‘‘|’’ means a choice between left +or right. A C_instr is a name in the EM_CODE(3ACK) +interface. condition is a C expression. +function-call is a call of a C function. +label, mnemonic, and operand are +arbitrary strings. If an operand contains brackets, +the brackets must match. There is an upper bound on the +number of operands; the maximum number is defined by the +constant MAX_OPERANDS in de file +‘‘const.h’’ in the directory +assemble.c. Comments in the table should be placed between +‘‘/*’’ and +‘‘*/’’. The table is processed by +the C preprocessor, before being parsed by emg.

+ +

3.2. Semantics

+ +

The EM_table is processed by emg. Emg +generates a C function for every instruction in the +EM_CODE(3ACK). For every EM-instruction not mentioned in the +EM_table, a C function that prints an error message is +generated. It is possible to divide the +EM_CODE(3ACK)-interface into four parts :

+ + + + + + + +
+ +

1:

+
+ +

text instructions (e.g., C_loc, C_adi, ..)

+
+ + + + + + + +
+ +

2:

+
+ +

pseudo instructions (e.g., C_open, C_df_ilb, ..)

+
+ + + + + + + +
+ +

3:

+
+ +

storage instructions (e.g., C_rom_icon, ..)

+
+ + + + + + + +
+ +

4:

+
+ +

message instructions (e.g., C_mes_begin, ..)

+
+ +

This section starts with giving the semantics of the +grammar. The examples are text instructions. The section +ends with remarks on the pseudo instructions and the storage +instructions. Since message instructions are not useful for +a code expander, they are ignored.

+ +

3.2.1. Actions

+ +

The EM_table is made up of rules describing how to +expand a C_instr defined by the +EM_CODE(3ACK)-interface (corresponding to an EM instruction) +into actions. There are two kinds of actions: assembly +instructions and C function calls. An assembly instruction +is defined as a mnemonic followed by zero or more operands +separated by commas. The semantics of an assembly +instruction is defined by the table writer. When the +assembly language is not expressive enough, then, as an +escape route, function calls can be made. However, this +reduces the speed of the actual code expander. Finally, +actions can be grouped into a list of actions; actions are +separated by a semicolon and terminated by a +‘‘.’’.

+
     C_nop   ==> .
+            /* Empty action list : no operation. */
+
+
+     C_inc   ==> "incl (sp)".
+            /* Assembler instruction, which is evaluated
+             * during expansion of the EM_table */
+
+
+     C_slu   ==> C_sli( $1).
+            /* Function call, which is evaluated during
+             *  execution of the compiler. */
+
+ +

3.2.2. Labels

+ +

Since an assembly language without instruction labels is +a rather weak language, labels inside a contiguous block of +assembly instructions are allowed. When using labels two +rules must be observed:

+ + + + + + + +
+ +

1:

+
+ +

The name of a label should be unique inside an action +list.

+
+ + + + + + + +
+ +

2:

+
+ +

The labels used in an assembler instruction should be +defined in the same action list.

+
+ +

The following example illustrates the usage of +labels.

+
        /* Compare the two top elements on the stack. */
+     C_cmp      ==>     "pop bx";
+                        "pop cx";
+                        "xor ax, ax";
+                        "cmp cx, bx";
+                     /* Forward jump to local label */
+                        "je 2f";
+                        "jb 1f";
+                        "inc ax";
+                        "jmp 2f";
+                        "1: dec ax";
+                        "2: push ax".
+
+ +

We will come back to labels in the section on the +as_table.

+ +

3.2.3. Arguments of an EM instruction

+ +

In most cases the translation of a C_instr +depends on its arguments. The arguments of a C_instr +are numbered from 1 to n, where n is the total +number of arguments of the current C_instr (there are +a few exceptions, see Implicit arguments). The table writer +may refer to an argument as $i. If a plain $-sign is +needed in an assembly instruction, it must be preceded by a +extra $-sign.

+ +

There are two groups of C_instrs whose arguments +are handled specially:

+ + + + + +
+

1: Instructions dealing with local offsets

+ + + + + +
+

The value of the $i argument referring to a +parameter ($i >= 0) is increased by +‘‘EM_BSIZE’’. +‘‘EM_BSIZE’’ is the size of the +return status block and must be defined in the file +‘‘mach.h’’ (see section 3.3). For +example :

+ +
     C_lol   ==>     "push $1(bp)".
+            /* automatic conversion of $1 */
+
+
+ + + + + + +
+

2: Instructions using global names or instruction +labels

+ + + + + +
+

All the arguments referring to global names or +instruction labels will be transformed into a unique +assembly name. To prevent name clashes with library names +the table writer has to provide the conversions in the file +‘‘mach.h’’. For example :

+ +
     C_bra   ==>     "jmp $1".
+             /* automatic conversion of $1 */
+             /* type arith is converted to string */
+
+
+ +

3.2.4. Conditionals

+ +

The rules in the EM_table can be divided into two +groups: simple rules and conditional rules. The simple rules +are made up of a C_instr followed by a list of +actions, as described above. The conditional rules +(COND_SEQUENCE) allow the table writer to select an action +list depending on the value of a condition.

+ +

A CONDITIONAL is a list of a boolean expression with the +corresponding simple rule. If the expression evaluates to +true then the corresponding simple rule is carried out. If +more than one condition evaluates to true, the first one is +chosen. The last case of a COND_SEQUENCE of a C_instr +must handle the default case. The boolean expressions in a +COND_SEQUENCE must be C expressions. Besides the ordinary C +operators and constants, $i references can be used in +an expression.

+
         /* Load address of LB $1 levels back. */
+     C_lxl
+         $1 == 0    ==>    "pushl fp".
+         $1 == 1    ==>    "pushl 4(ap)".
+         default    ==>    "movl $$$1, r0";
+                           "jsb .lxl";
+                           "pushl r0".
+
+ +

3.2.5. Abbreviations

+ +

EM instructions with an external as an argument come in +three variants in the EM_CODE(3ACK) interface. In most cases +it will be possible to take these variants together. For +this purpose the ‘‘..’’ notation is +introduced. For the code expander there is no difference +between the following instructions.

+
     C_loe_dlb    ==>    "pushl $1 + $2".
+     C_loe_dnam   ==>    "pushl $1 + $2".
+     C_loe        ==>    "pushl $1 + $2".
+
+ +

So it can be written in the following way.

+
     C_loe..      ==>    "pushl $1 + $2".
+
+ +

3.2.6. Implicit arguments

+ +

In the last example ‘‘C_loe’’ +has two arguments, but in the EM_CODE interface it has one +argument. This argument depends on the current +‘‘hol’’ block; in the EM_table this +is made explicit. Every C_instr whose argument +depends on a ‘‘hol’’ block has one +extra argument; argument 1 refers to the +‘‘hol’’ block.

+ +

3.2.7. Pseudo instructions

+ +

Most pseudo instructions are machine independent and are +provided by ceg. The table writer has only to supply +the following functions, which are used to build a +stackframe:

+
     C_prolog()
+     /* Performs the prolog, for example save
+      * return address */
+
+
+     C_locals( n)
+     arith n;
+     /* Allocate n bytes for locals on the stack */
+
+
+     C_jump( label)
+     char *label;
+     /* Generates code for a jump to ‘‘label’’ */
+
+ +

These functions can be defined in +‘‘mach.c’’ or in the EM_table (see +section 3.3).

+ +

3.2.8. Storage instructions

+ +

The storage instructions +‘‘C_bss_cstp()’’, +‘‘C_hol_cstp()’’, dealing +with constants of type string (C_..._icon, C_..._ucon, +C_..._fcon), are generated automatically. No information is +needed in the table. To generate the C_..._icon, C_..._ucon, +C_..._fcon instructions ceg only has to know how to +convert a number of type string to bytes; this can be +defined with the constants ONE_BYTE, TWO_BYTES, and +FOUR_BYTES. C_rom_icon, C_con_icon, C_bss_icon, C_hol_icon +can be abbreviated by ..icon. This also holds for ..ucon and +..fcon. For example :

+
     \.\.icon
+         $2 == 1   ==>  gen1( (ONE_BYTE) atoi( $1)).
+         $2 == 2   ==>  gen2( (TWO_BYTES) atoi( $1)).
+         $2 == 4   ==>  gen4( (FOUR_BYTES) atol( $1)).
+         default   ==>   arg_error( "..icon", $2).
+
+ +

Gen1(), gen2() and gen4() are back-primitives +(see appendix A), and generate one, two, or four byte +constants. Atoi() is a C library function that converts +strings to integers. The constants +‘‘ONE_BYTE’’, +‘‘TWO_BYTES’’, and +‘‘FOUR_BYTES’’ must be defined in +the file ‘‘mach.h’’.

+ +

3.3. User supplied definitions and functions

+ +

If the table writer uses all the default functions he +has only to supply the following constants and functions +:

+ +

+ +

An example of the file +‘‘mach.h’’ for the vax4.

+ +

+ +

Notice that EM_BSIZE is zero. The vax +‘‘call’’ instruction takes +automatically care of the base block.

+ +

There are three primitives that have to be defined by +the table writer, either as functions in the file +‘‘mach.c’’ or as rules in the +EM_table. For example, for the 8086 they look like this:

+
     C_jump       ==>       "jmp $1".
+
+
+     C_prolog     ==>       "push bp";
+                          "mov bp, sp".
+
+
+     C_locals
+       $1  == 0   ==>     .
+       $1  == 2   ==>     "push ax".
+       $1  == 4   ==>     "push ax";
+                          "push ax".
+       default    ==>     "sub sp, $1".
+
+ +

3.4. Generating assembly code

+ +

When the code expander generator is used for generating +assembly instead of object code (see section 5), additional +print formats have to be defined in +‘‘mach.h’’. The following table +lists these formats.

+ +

+ +

4. Description of the as_table

+ +

This section describes the as_table. Like the previous +section, it is divided into four parts: the first two parts +describe the grammar and the semantics of the as_table; the +third part gives an overview of the functions and the +constants that must be present in the as_table (in the file +‘‘as.h’’ or in the file +‘‘as.c’’); the last part describes +the case when assembly is generated instead of object code. +The part on semantics contains examples that appear in the +as_table for the VAX or for the 8086.

+ +

4.1. Grammar

+ +

The form of the as_table is given by the following +grammar :

+ +

+ +

mnemonic, operand, and type are all +C identifiers; condition is a normal C expression; +function-call must be a C function call. A function +can be called with standard C arguments or with a reference +(see section 4.2.4). Since the as_table is interpreted +during code expander generation as well as during code +expander execution, two levels of calls are present in it. A +‘‘function-call’’ is done during +code expander generation, a +‘‘@function-call’’ during code +expander execution.

+ +

4.2. Semantics

+ +

The as_table is made up of rules that map assembly +instructions onto back-primitives, a set of functions +that construct an object file. The table is processed by +asg, which generates a C functions for each assembler +mnemonic. The names of these functions are the assembler +mnemonics postfixed with ‘‘_instr’’ +(e.g., ‘‘add’’ becomes +‘‘add_instr()’’). These functions +will be used by the function assemble() during the expansion +of the EM_table. After explaining the semantics of the +as_table the function assemble() will be described.

+ +

4.2.1. Rules

+ +

A rule in the as_table is made up of a left and a right +hand side; the left hand side describes an assembler +instruction (mnemonic and operands); the right hand side +gives the corresponding actions as back-primitives or +as functions defined by the table writer, which call +back-primitives. Two simple examples from the VAX +as_table and the 8086 as_table, resp.:

+
     movl src, dst  ==> @text1( 0xd0);
+                        gen_operand( src);
+                        gen_operand( dst).
+         /* ‘‘gen_operand’’ is a function that encodes
+          * operands by calling back-primitives. */
+
+
+     rep ens:MOVS   ==>  @text1( 0xf3);
+                         @text1( 0xa5).
+
+
+
+ +

4.2.2. Declaration of types.

+ +

In general, a machine instruction is encoded as an +opcode followed by zero or more the operands. There are two +methods for mapping assembler mnemonics onto opcodes: the +mnemonic determines the opcode, or mnemonic and operands +together determine the opcode. Both cases can be easily +expressed in the as_table. The first case is obvious. The +second case is handled by introducing type fields for the +operands.

+ +

When mnemonic and operands together determine the +opcode, the table writer has to give several rules for each +combination of mnemonic and operands. The rules differ in +the type fields of the operands. The table writer has to +supply functions that check the type of the operand. The +name of such a function is the name of the type; it has one +argument: a pointer to a struct of type t_operand; it +returns non-zero when the operand is of this type, otherwise +it returns 0.

+ +

This will usually lead to a list of rules per mnemonic. +To reduce the amount of work an abbreviation is supplied. +Once the mnemonic is specified it can be referred to in the +following rules by ‘‘...’’. One has +to make sure that each mnemonic is mentioned only once in +the as_table, otherwise asg will generate more than +one function with the same name.

+ +

The following example shows the usage of type +fields.

+
      mov dst:REG, src:EADDR  ==>
+               @text1( 0x8b);                /* opcode */
+               mod_RM( %d(dst->reg), src). /* operands */
+
+
+      ... dst:EADDR, src:REG  ==>
+               @text1( 0x89);                /* opcode */
+               mod_RM( %d(src->reg), dst). /* operands */
+
+ +

The table-writer must supply the restriction functions, +REG and EADDR in the previous example, in +‘‘as.c’’ or +’’as.h’’.

+ +

4.2.3. The function of the @-sign and the if-statement.

+ +

The right hand side of a rule is made up of function +calls. Since the as_table is interpreted on two levels, +during code expander generation and during code expander +execution, two levels of calls are present in it. A +function-call without an ‘‘@’’-sign +is called during code expander generation (e.g., the +gen_operand() in the first example). A function +call with an ‘‘@’’-sign is called +during code expander execution (e.g., the +back-primitives). So the last group will be part of +the compiler.

+ +

The need for the ‘‘@’’-sign +construction arises, for example, when implementing push/pop +optimization (e.g., ‘‘push x’’ +followed by ‘‘pop y’’ can be +replaced by ‘‘move x, y’’). In this +case flags need to be set, unset, and tested during the +execution of the compiler:

+
PUSH src  ==>   /* save in ax */
+                mov_instr( AX_oper, src);
+                /* set flag */
+                @assign( push_waiting, TRUE).
+
+
     POP dst   ==>   @if ( push_waiting)
+                            /* ‘‘mov_instr’’ is asg-generated */
+                            mov_instr( dst, AX_oper);
+                            @assign( push_waiting, FALSE).
+                     @else
+                            /* ‘‘pop_instr’’ is asg-generated */
+                            pop_instr( dst).
+                     @fi.
+
+ +

Although the @-sign is followed syntactically by a +function name, this function can very well be the name of a +macro defined in C. This is in fact the case with +‘‘@assign()’’ in the above +example.

+ +

The case may arise when information is needed that is +not known until execution of the compiler. For example one +needs to know if a ‘‘$i’’ +argument fits in one byte. In this case one can use a +special if-statement provided by asg: @if, @elsif, +@else, @fi. This means that the conditions will be evaluated +at run time of the ce. In such a condition one may of +course refer to the ’’$i’’ +arguments. For example, constants can be packed into one or +two byte arguments as follows:

+
     mov dst:ACCU, src:DATA ==>
+                            @if ( fits_byte( %$(dst->expr)))
+                                 @text1( 0xc0);
+                                 @text1( %$(dst->expr)).
+                            @else
+                                 @text1( 0xc8);
+                                 @text2( %$(dst->expr)).
+                            @fi.
+
+ +

4.2.4. References to operands

+ +

As noted before, the operands of an assembler +instruction may be used as pointers to the struct +t_operand in the right hand side of the table. +Because of the free format assembler, the types of the +fields in the struct t_operand are unknown to +asg. As these fields can appear in calls to +functions, asg must know these types. This section +explains how these types must be specified.

+ +

References to operands come in three forms: ordinary +operands, operands that contain +‘‘$i’’ references, and +operands that refer to names of local labels. The +‘‘$i’’ in operands represent +names or numbers of a C_instr and must be given as +arguments to the back-primitives. Labels in operands +must be converted to a number that tells the distance, the +number of bytes, between the label and the current position +in the text-segment.

+ +

All these three cases are treated in an uniform way. +When the table writer makes a reference to an operand of an +assembly instruction, he must describe the type of the +operand in the following way.

+ +

+ +

The three cases differ only in the conversion field. The +printformat conversion applies to ordinary operands. The +‘‘%$’’ applies to operands that +contain a ‘‘$i’’. The +expression between parentheses must result in a pointer to a +char. The result of ‘‘%$’’ is of the +type of ‘‘$i’’. The +‘‘%dist’’ applies to operands that +refer to a local label. The expression between the brackets +must result in a pointer to a char. The result of +‘‘%dist’’ is of type arith.

+ +

The following example illustrates the usage of +‘‘%$’’. (For an example that +illustrates the usage of ordinary fields see the section on +‘‘User supplied definitions and +functions’’).

+
     jmp dst ==>
+         @text1( 0xe9);
+         @reloc2( %$(dst->lab), %$(dst->off), PC_REL).
+
+ +

A useful function concerning $is is arg_type(), +which takes as input a string starting with $i and +returns the type of the i’’th argument of +the current EM-instruction, which can be STRING, ARITH or +INT. One may need this function while decoding operands if +the context of the $i does not give enough +information. If the function arg_type() is used, the file +arg_type.h must contain the definition of STRING, ARITH and +INT.

+ +

%dist is only guaranteed to work when called as a +parameter of text1(), text2() or text4(). The goal of the +%dist conversion is to reduce the number of reloc1(), +reloc2() and reloc4() calls, saving space and time (no +relocation at compiler run time). The following example +illustrates the usage of +‘‘%dist’’.

+
      jmp dst:ILB    ==> /* label in an instruction list */
+          @text1( 0xeb);
+          @text1( %dist( dst->lab)).
+
+
+      ... dst:LABEL  ==> /* global label */
+          @text1( 0xe9);
+          @reloc2( %$(dst->lab), %$(dst->off), PC_REL).
+
+ + + +

4.2.5. The functions assemble() and block_assemble()

+ +

The functions assemble() and block_assemble() are +provided by ceg. If, however, the table writer is not +satisfied with the way they work he can supply his own +assemble() or block_assemble(). The default function +assemble() splits an assembly string into a label, mnemonic, +and operands and performs the following actions on them:

+ + + + + + + +
+ +

1:

+
+ +

It processes the local label; it records the name and +current position. Thereafter it calls the function +process_label() with one argument of type string, the label. +The table writer has to define this function.

+
+ + + + + + + +
+ +

2:

+
+ +

Thereafter it calls the function process_mnemonic() with +one argument of type string, the mnemonic. The table writer +has to define this function.

+
+ + + + + + + +
+ +

3:

+
+ +

It calls process_operand() for each operand. +Process_operand() must be written by the table-writer since +no fixed representation for operands is enforced. It has two +arguments: a string (the operand to decode) and a pointer to +the struct t_operand. The declaration of the struct +t_operand must be given in the file +‘‘as.h’’, and the table-writer can +put all the information needed for encoding the operand in +machine format in it.

+
+ + + + + + + +
+ +

4:

+
+ +

It examines the mnemonic and calls the associated +function, generated by asg, with pointers to the +decoded operands as arguments. This makes it possible to use +the decoded operands in the right hand side of a rule (see +below).

+
+ +

If the default assemble() does not work the way the +table writer wants, he can supply his own version of it. +Assemble() has the following arguments:

+
     assemble( instruction )
+         char *instruction;
+
+ +

instruction points to a null-terminated +string.

+ +

The default function block_assemble() is called with a +sequence of assembly instructions that belong to one action +list. It calls assemble() for every assembly instruction in +this block. But if a special action is required on a block +of assembly instructions, the table writer only has to +rewrite this function to get a new ceg that obliges +to his wishes. The function block_assemble has the following +arguments:

+
     block_assemble( instructions, nr, first, last)
+           char   **instruction;
+           int      nr, first, last;
+
+ +

Instruction point to an array of pointers to +strings representing assembly instructions. Nr is the +number of instructions that must be assembled. First +and last have no function in the default +block_assemble(), but are useful when optimizations are done +in block_assemble().

+ +

Four things have to be specified in +‘‘as.h’’ and +‘‘as.c’’. First the user must give +the declaration of struct t_operand in +‘‘as.h’’, and the functions +process_operand(), process_mnemonic(), and process_label() +must be given in ‘‘as.c’’. If the +right hand side of the as_table contains function calls +other than the back-primitives, these functions must +also be present in ‘‘as.c’’. Note +that both the ‘‘@’’-sign (see 4.2.3) +and ‘‘references’’ (see 4.2.4) also +work in the functions defined in +‘‘as.c’’.

+ +

The following example shows the representative and +essential parts of the 8086 ‘‘as.h’’ +and ‘‘as.c’’ files.

+
/* Constants and type definitions in as.h */
+
+
+#define        UNKNOWN                0
+#define        IS_REG                 0x1
+#define        IS_ACCU                0x2
+#define        IS_DATA                0x4
+#define        IS_LABEL               0x8
+#define        IS_MEM                 0x10
+#define        IS_ADDR                0x20
+#define        IS_ILB                 0x40
+
+
+#define AX                0
+#define BX                3
+#define CL                1
+#define SP                4
+#define BP                5
+#define SI                6
+#define DI                7
+
+
+#define REG( op)         ( op->type & IS_REG)
+#define ACCU( op)        ( op->type & IS_REG  &&  op->reg == AX)
+#define REG_CL( op)      ( op->type & IS_REG  &&  op->reg == CL)
+#define DATA( op)        ( op->type & IS_DATA)
+#define LABEL( op)       ( op->type & IS_LABEL)
+#define ILB( op)         ( op->type & IS_ILB)
+#define MEM( op)         ( op->type & IS_MEM)
+#define ADDR( op)        ( op->type & IS_ADDR)
+#define EADDR( op)       ( op->type & ( IS_ADDR | IS_MEM | IS_REG))
+#define CONST1( op)      ( op->type & IS_DATA  && strcmp( "1", op->expr) == 0)
+#define MOVS( op)        ( op->type & IS_LABEL&&strcmp("
+#define IMMEDIATE( op)   ( op->type & ( IS_DATA | IS_LABEL))
+
+
+struct t_operand {
+        unsigned type;
+        int reg;
+        char *expr, *lab, *off;
+       };
+
+
+extern struct t_operand saved_op, *AX_oper;
+
+
/* Some functions in as.c. */
+
+
+#include "arg_type.h"
+#include "as.h"
+
+
+#define last( s)     ( s + strlen( s) - 1)
+#define LEFT         ’(’
+#define RIGHT        ’)’
+#define DOLLAR       ’$’
+
+
+process_operand( str, op)
+char *str;
+struct t_operand *op;
+
+
+/*        expr            ->        IS_DATA en IS_LABEL
+ *        reg             ->        IS_REG en IS_ACCU
+ *        (expr)          ->        IS_ADDR
+ *        expr(reg)       ->        IS_MEM
+ */
+{
+        char *ptr, *index();
+
+
+        op->type = UNKNOWN;
+        if ( *last( str) == RIGHT) {
+                ptr = index( str, LEFT);
+                *last( str) = ’ ’;
+                *ptr = ’ ’;
+                if ( is_reg( ptr+1, op)) {
+                        op->type = IS_MEM;
+                        op->expr = ( *str == ’ ’ ? "0" : str);
+                }
+                else {
+                        set_label( ptr+1, op);
+                        op->type = IS_ADDR;
+                }
+        }
+        else
+                if ( is_reg( str, op))
+                        op->type = IS_REG;
+                else {
+                        if ( contains_label( str))
+                                set_label( str, op);
+                        else {
+                                op->type = IS_DATA;
+                                op->expr = str;
+                        }
+                }
+}
+
+
+/*********************************************************************/
+
+
+mod_RM( reg, op)
+int reg;
+struct t_operand *op;
+
+
+/* This function helps to decode operands in machine format.
+ * Note the $-operators
+ */
+{
+      if ( REG( op))
+              R233( 0x3, reg, op->reg);
+      else if ( ADDR( op)) {
+              R233( 0x0, reg, 0x6);
+              @reloc2( %$(op->lab), %$(op->off), ABSOLUTE);
+      }
+      else if ( strcmp( op->expr, "0") == 0)
+              switch( op->reg) {
+                case SI : R233( 0x0, reg, 0x4);
+                          break;
+
+
+                case DI : R233( 0x0, reg, 0x5);
+                          break;
+
+
+                case BP : R233( 0x1, reg, 0x6);        /* exception! */
+                          @text1( 0);
+                          break;
+
+
+                case BX : R233( 0x0, reg, 0x7);
+                          break;
+
+
+                default : fprint( STDERR, "Wrong index register %d\n",
+                                  op->reg);
+              }
+      else {
+              @if ( fit_byte( %$(op->expr)))
+                      switch( op->reg) {
+                          case SI : R233( 0x1, reg, 0x4);
+                                  break;
+
+
+                        case DI : R233( 0x1, reg, 0x5);
+                                  break;
+
+
+                        case BP : R233( 0x1, reg, 0x6);
+                                  break;
+
+
+                        case BX : R233( 0x1, reg, 0x7);
+                                  break;
+
+
+                        default : fprint( STDERR, "Wrong index register %d\n",
+                                          op->reg);
+                      }
+                      @text1( %$(op->expr));
+              @else
+                      switch( op->reg) {
+                        case SI : R233( 0x2, reg, 0x4);
+                                  break;
+
+
+                        case DI : R233( 0x2, reg, 0x5);
+                                  break;
+
+
+                        case BP : R233( 0x2, reg, 0x6);
+                                  break;
+
+
+                        case BX : R233( 0x2, reg, 0x7);
+                                  break;
+
+
+                        default : fprint( STDERR, "Wrong index register %d\n",
+                                          op->reg);
+                      }
+                      @text2( %$(op->expr));
+              @fi
+      }
+}
+
+ +

4.3. Generating assembly code

+ +

It is possible to generate assembly instead of object +files (see section 5), in which case there is no need to +supply ‘‘as_table’’, +‘‘as.h’’, and +‘‘as.c’’. This option is useful for +debugging the EM_table.

+ +

5. Building a code expander

+ +

This section describes how to generate a code expander +in two phases. In phase one, the EM_table is written and +assembly code is generated. If the assembly code is an +actual language, the EM_table can be tested by assembling +and running the generated code. If an ad-hoc assembly +language is used by the table writer, it is not possible to +test the EM_table, but the code generated is at least in +readable form. In the second phase, the as_table is written +and object code is generated. After the generated object +code is fed into the loader, it can be tested.

+ +

5.1. Phase one

+ +

The following is a list of instructions to make a code +expander that generates assembly instructions.

+ + + + + + + + +
+ +

1:

+
+ +

Create a new directory.

+
+
+ + + + + + + +
+ +

2:

+
+ +

Create the ‘‘EM_table’’, +‘‘mach.h’’, and +‘‘mach.c’’ files; there is no need +for ‘‘as_table’’, +‘‘as.h’’, and +‘‘as.c’’ at this moment.

+
+ + + + + + + + +
+ +

3:

+
+ +

type

+
+
+ + + + + +
+

install_ceg -as
+install_ceg will create a Makefile and three directories : +ceg, ce, and back. Ceg will contain the program ceg; this +program will be used to turn +‘‘EM_table’’ into a set of C source +files (in the ce directory), one for each EM-instruction. +All these files will be compiled and put in a library called +ce.a.
+The option -as means that a back-library +will be generated (in the directory +‘‘back’’) that supports the +generation of assembly language. The library is named +‘‘back.a’’.

+
+ + + + + + + +
+ +

4:

+
+ +

Link a front end, ‘‘ce.a’’, and +‘‘back.a’’ together resulting in a +compiler that generates assembly code.

+
+ +

If the table writer has chosen an actual assembly +language, the EM_table can be tested (e.g., by running the +compiler on the EM test set). If an error occurs, change the +EM_table and type

+ + + + + +
+

update_ceg C_instr

+
+ +

where C_instr stands for the name of the +erroneous EM-instruction. If the table writer has chosen an +ad-hoc assembly language, he can at least read the generated +code and look for possible errors. If an error is found, the +same procedure as described above can be followed.

+ +

5.2. Phase two

+ +

The next phase is to generate a ce that produces +relocatable object code.

+ + + + + + + +
+ +

1:

+
+ +

Remove the ‘‘ce’’, +‘‘ceg’’, and +‘‘back’’ directories.

+
+ + + + + + + +
+ +

2:

+
+ +

Write the ‘‘as_table’’, +‘‘as.h’’, and +‘‘as.c’’ files.

+
+ + + + + + + + +
+ +

3:

+
+ +

type

+
+
+ +

install_ceg -obj

+ +

The option -obj means that +‘‘back.a’’ will contain a library +for generating ACK.OUT(5ACK) object files, see appendix B. +If the writer does not want to use the default +‘‘back.a’’, the -obj flag +must omitted and a ‘‘back.a’’ should +be supplied that generates the generates object code in the +desired format.

+ + + + + + + +
+ +

4:

+
+ +

Link a front end, ‘‘ce.a’’, and +‘‘back.a’’ together resulting in a +compiler that generates object code.

+
+ +

The as_table is ready to be tested. If an error occurs, +adapt the table. Then there are two ways to proceed:

+ + + + + + + + +
+ +

1:

+
+ +

recompile the whole EM_table,

+
+
+ +

update_ceg ALL

+ + + + + + + +
+ +

2:

+
+ +

recompile just the few EM-instructions that contained +the error,

+
+ +

update_ceg C_instr

+ +

where C_instr is an erroneous EM-instruction. +This has to be done for every EM-instruction that contained +the erroneous assembly instruction.

+ +

6. Acknowledgements

+ +

We want to thank Henri Bal, Dick Grune, and Ceriel +Jacobs for their valuable suggestions and the critical +reading of this paper.

+ +

7. References

+ +

References

+ + + + + + +
+ +

1.

+
+ +

A.S. Tanenbaum, H. v. Staveren, E.G. Keizer, and J.W. +Stevenson, “APractical Toolkit For Making +Compilers,” Communications of the ACM, 26, 9 +(September 1983).

+
+ + + + + + +
+ +

2.

+
+ +

A.S. Tanenbuum, H. v. Staveren, E.G. Keizer, and J.W. +Stevenson, “Description of a Machine Architecture for +Use with Block Structured Languages,” IR-81, Dept. +Mathematics and Computer Science, Vrije Universiteit, +Amsterdam (August 1983).

+
+ + + + + + +
+ +

3.

+
+ +

ACK Documentation, EM_CODE(3ACK), Dept. +Mathematics and Computer Science, Vrije Universiteit, +Amsterdam.

+
+ + + + + + +
+ +

4.

+
+ +

ACK Documentation, ACK.OUT(5ACK), Dept. +Mathematics and Computer Science, Vrije Universiteit, +Amsterdam.

+
+ + + + + + +
+ +

5.

+
+ +

B.W. Kernighan and D.M. Ritchie, The C Programming +Language, Prentice-Hall Inc., Englewood Cliffs, New +Jersey (1978).

+
+ + + + + + +
+ +

6.

+
+ +

ACK Documentation, PRINT(3ACK), Dept. Mathematics +and Computer Science, Vrije Universiteit, Amsterdam.

+
+ +

Appendix A, the back -primitives

+ +

This appendix describes the routines available to +generate relocatable object code. If the default back.a is +used, the object code is in ACK.OUT(5ACK) format. In de +default back.a, the names defined here are remapped to more +hidden names, to avoid name conflicts with for instance +names used in the front-end. This remapping is done in an +include-file, "back.h". A user-implemented back.a +should do the same thing.

+ + + + + + +
+ +

A1.

+
+ +

Text and data generation; with ONE_BYTE b; +TWO_BYTES w; FOUR_BYTES l; arith n;

+
+ + +

+ + + + + + + +
+ +

A2.

+
+ +

Relocation; with char *s; arith o; int +r;

+
+
+ + +

+ + + + + + +
+ +

A3.

+
+ +

Symbol table interaction; with int seg; char +*s;

+
+ + +

+ + + + + + + +
+ +

A4.

+
+ +

Start/end actions; with char *f;

+
+
+ + +

+ + + + + + +
+ +

A5.

+
+ +

Label generation routines; with int n; arith g; +char *l; These routines all return a "char *" to a +static area, which is overwritten at each call.

+
+ + +

+ + + + + + + +
+ +

A6.

+
+ +

Some miscellaneous routines, with char +*l;

+
+
+ + +

+ +

Appendix B, description of ACK-a.out library

+ +

The object file produced by ce is by default in +ACK.OUT(5ACK) format. The object file is made up of one +header, followed by four segment headers, followed by text, +data, relocation information, symbol table, and the string +area. The object file is tuned for the ACK-LED, so there are +some special things done just before the object file is +dumped. First, four relocation records are added which +contain the names of the four segments. Second, all the +local relocation is resolved. This is done by the function +do_relo(). If there is a record belonging to a local name +this address is relocated in the segment to which the record +belongs. Besides doing the local relocation, do_relo() +changes the ‘‘nami’’-field of the +local relocation records. This field receives the index of +one of the four relocation records belonging to a segment. +After the local relocation has been resolved the routine +output_back() dumps the ACK object file.

+ +

If a different a.out format is wanted, one can choose +between three strategies:

+ + + + + + + +
+ +

1:

+
+ +

The most simple one is to use a conversion program, +which converts the ACK a.out format to the wanted a.out +format. This program exists for all most all machines on +which ACK runs. However, not all conversion programs can +generate relocation information. The disadvantage is that +the compiler will become slower.

+
+ + + + + + + +
+ +

2:

+
+ +

A better solution is to change the functions +output_back(), do_relo(), open_back(), and close_back() in +such a way that they produce the wanted a.out format. This +strategy saves a lot of I/O.

+
+ + + + + + + +
+ +

3:

+
+ +

If this still is not satisfactory, the +back-primitives can be adapted to produce the wanted +a.out format.

+
+
+ + diff --git a/src/olddocs/ceg.pdf b/src/olddocs/ceg.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2f4b0f7b43e922523f893d8be1fc180094c6a07d GIT binary patch literal 86871 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 i6oEGee+^3d-UQh#J=%T} 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

=ik#a`)~C8 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ξ|gajhPgeN)MzEdx!0u%?zytf31#nV&+?=Hh+bh7hZNTu_d< zQHev)b?Xc4N45>xoYoA33&A`jib63vecp(My`xme$0{j6F!v;hP(TI}ks)1#t-~mh z=Xm?4bqHjHuSvE%(Q+JzAuqqie zoq5b~KqlmAYxh_A7&-_$HZTkq0V3u}EE8Ly7X0}EqgPW) zQv`Q(s2FE!Ij90oY2bJ0NVh3@#V{-Pa=4H^z$WDW4@b5Rb47?ox`|8kI5Ao#T znF(nLt~yme5nJQt#%K$2R?1n>Va62mC!(O(q-LyTRycSULYnPT8C}{YMlu4u_$brM&!PU-G6q1($ykaQo=Ql5HkIE0co5A_kRcaRzZbr3(rk_bB(kmjjr9bj)D7*XTS} z7O{*e*#emn<-3CtbV6QNw{wgFS!P$Tc;Cf$$=55P#R7-Mr)n(&8hy!qC(-$+QuK;+ zz%~A6o?<=xF-?3w2RUbVXFH*=w~Z|7GYDRwg>X~1DY#-(@z~>@_KN-MAbe7}PJy-Q zf@%1c%(T(7@s5)9YK{8Jb;9NGv<+BTv0HKQWGHu9_-BT?!;DsG$ndQmAyF>7wUjWX}T)@ zJ7w>dgkZKbsZ4-9Y*n;Oa6UkR6_3V$7kFE)3V;-l9_>UUz}Lq!pX4o*WC;NFXS-5= z!yIo{c!1or?A*fVhoXBgHxu%<%YcbW%=8{|;ensDOpZo;D20iYbZH#qn&0YeF7g9R zd4sx-TK-3;aQU!PiN^Hbw6VJ7g@IFCHu0VEZhGHxg{J|43})q~fhg-=ds&T3=S-*> z)4Io`$jgDl$^Wjt6ya!X05&x)7#Up}847@5$`1{P20SQ;!+oN4-uDG8O|!a)#9Ra+ zZIYB-ESo!i3U`!FMGLHCo+`NL%#{29@UABw5DogG*h@=0%Nr&O&MX^?nu9ihV5jig zLC!jI@+b_HDjGD%e=^jcHrRt0Kw))#5|Yf^CxlSu8mAEuS{#$^8R_7G9@eYhUx

Q|{)a`na^1WK`pvR{6!|@rhCN=2q8nGe;M1O-t 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/cg.html b/src/olddocs/cg.html new file mode 100644 index 000000000..b8dbcbe26 --- /dev/null +++ b/src/olddocs/cg.html @@ -0,0 +1,4597 @@ + + + + + + +The table driven code generator from + + + +

The table driven code generator from

+1. Introduction
+2. Global overview of the workings of the code generator.
+3. Description of the machine table
+3.1. Some constants
+3.2. Register definition
+3.3. Stack token definition
+3.4. Token expressions
+3.5. Expressions
+3.6. Code rules
+3.6.1. The EM pattern
+3.6.2. The stack pattern
+3.6.3. The code part
+3.6.3.1. Stack cleanup
+3.6.3.2. Register allocation
+3.6.3.3. Code
+3.6.4. Stack replacement
+3.6.5. EM replacement
+3.6.6. Cost
+3.6.7. Examples
+3.7. Move code rules
+3.8. Test code rules
+3.9. Stacking code rules.
+4. The files mach.h and mach.c
+4.1. Types in the code generator
+4.2. Global variables to work with
+4.3. Macros in mach.h
+4.3.1. Example mach.h for the PDP-11
+4.4. Functions in mach.c
+4.4.1. Example mach.c for the PDP-11
+5. Coercions
+6. Internal workings of the code generator.
+6.1. Description of tables.c and tables.h contents
+6.1.1. Tables.c
+6.1.2. tables.h
+6.2. Other important data structures
+6.3. A tour through the sources
+6.3.1. codegen.c
+6.3.1.1. DO_NEXTEM
+6.3.1.2. DO_COERC
+6.3.1.3. DO_XMATCH
+6.3.1.4. DO_MATCH
+6.3.1.5. DO_REMOVE
+6.3.1.6. DO_DEALLOCATE
+6.3.1.7. DO_REALLOCATE
+6.3.1.8. DO_ALLOCATE
+6.3.1.9. DO_LOUTPUT
+6.3.1.10. DO_ROUTPUT
+6.3.1.11. DO_MOVE
+6.3.1.12. DO_ERASE
+6.3.1.13. DO_TOKREPLACE
+6.3.1.14. DO_EMREPLACE
+6.3.1.15. DO_COST
+6.3.1.16. DO_RETURN
+6.3.2. compute.c
+6.3.3. equiv.c
+6.3.4. fillem.c
+6.3.5. gencode.c
+6.3.6. glosym.c
+6.3.7. main.c
+6.3.8. move.c
+6.3.9. nextem.c
+6.3.10. reg.c
+6.3.11. salloc.c
+6.3.12. state.c
+6.3.13. subr.c
+6.3.13.1. match
+6.3.13.2. instance,cinstance
+6.3.13.3. eqtoken
+6.3.13.4. distance
+6.3.13.5. split
+6.3.13.6. docoerc
+6.3.13.7. stackupto
+6.3.13.8. findcoerc
+6.3.14. var.c
+ +
+ +

the Amsterdam Compiler Kit

+ +

ABSTRACT

+ +

Hans van +Staveren
+Dept. of Mathematics and Computer Science
+Vrije Universiteit
+Amsterdam, The Netherlands

+ +

It is possible to automate the process of +compiler building to a great extent using collections of +tools. The Amsterdam Compiler Kit is such a collection of +tools. This document provides a description of the internal +workings of the table driven code generator in the Amsterdam +Compiler Kit, and a description of syntax and semantics of +the driving table.

+ +

>>> NOTE <<<
+This document pertains to the old code generator. +Refer to the "Second Revised Edition" for the new +code generator.

+ +

1. Introduction

+ +

Part of the Amsterdam Compiler Kit is a code +generator system consisting of a code generator generator +(cgg for short) and some machine independent C code. +Cgg reads a machine description table and creates two +files, tables.h and tables.c. These are then used together +with other C code to produce a code generator for the +machine at hand.

+ +

This in turn reads compact EM code and produces +assembly code. The remainder of this document will first +broadly describe the working of the code generator, then a +description of the machine table follows after which the +internal workings of the code generator will be +explained.

+ +

The reader is assumed to have at least a vague +notion about the semantics of the intermediary EM code. +Someone wishing to write a table for a new machine should be +thoroughly acquainted with EM code and the assembly code of +the machine at hand.

+ +

2. Global overview of the workings of the code generator.

+ +

The code generator or cg tries to generate +good code by simulating the runtime stack of the program +compiled and delaying emission of code as long as possible. +It also keeps track of register contents, which enables it +to eliminate redundant moves, and tries to eliminate +redundant tests by keeping information about condition code +status, if applicable for the machine.

+ +

Cg maintains a ‘fakestack’ +containing ‘tokens’ that are built by executing +the pseudo code contained in the code rules given by the +table writer. One can think of the fakestack as a logical +extension of the real stack the program compiled will have +when run. During code generation tokens will be kept on the +fakestack as long as possible but when they are moved to the +real stack, by generating code for the push, all tokens +above*

+ + +

+ +

the tokens pushed will be pushed also, so that +the fakestack will not contain holes.

+ +

The main loop of cg is this:

+ + + + + + +
+ +

1)

+
+ +

find a pattern of EM instructions starting at the +current one to generate code for. This pattern will usually +be of length one but longer patterns can be +used.

+
+ + + + + + +
+ +

2)

+
+ +

Select one of the possibly many stack patterns +that go with this EM pattern on the basis of heuristics +and/or lookahead.

+
+ + + + + + +
+ +

3)

+
+ +

Force the current fakestack contents to match the +pattern. This may involve copying tokens to registers, +making dummy transformations, e.g. to transform a +"local" into an "register offsetted" or +might even cause to have the complete fakestack contents put +to the real stack and then back into registers if no +suitable transformations were provided by the table +writer.

+
+ + + + + + +
+ +

4)

+
+ +

Execute the pseudocode associated with the code +rule just selected, this may cause registers to be +allocated, code to be emitted etc..

+
+ + + + + + +
+ +

5)

+
+ +

Put tokens onto the fakestack to reflect the +result of the operation.

+
+ + + + + + +
+ +

6)

+
+ +

Insert some EM instructions into the stream, this +is possible but not common.

+
+ + + + + + +
+ +

7)

+
+ +

Account for the cost. The cost is kept in a +(space, time) vector and lookahead decisions are based on a +linear combination of these.

+
+ +

The table that drives cg is not read in +every time, but instead is used at compiletime of cg +to set parameters and to load pseudocode tables. A program +called cgg reads the table and produces large lists +of numbers that are compiled together with machine +independent code to produce a code generator for the machine +at hand.

+ +

3. Description of the machine table

+ +

The machine description table consists of the +following sections:

+ + + + + + + +
+ +

1)

+
+ +

Constant definitions

+
+
+ + + + + + + +
+ +

2)

+
+ +

Register definitions

+
+
+ + + + + + + +
+ +

3)

+
+ +

Token definitions

+
+
+ + + + + + + +
+ +

4)

+
+ +

Token expression definitions

+
+
+ + + + + + + +
+ +

5)

+
+ +

Code rules

+
+
+ + + + + + + +
+ +

6)

+
+ +

Move definitions

+
+
+ + + + + + + +
+ +

7)

+
+ +

Test definitions

+
+
+ + + + + + + +
+ +

8)

+
+ +

Stacking definitions

+
+
+ +

Input is in free format, white space and newlines +may be used at will to improve legibility. Identifiers used +in the table have the same syntax as C identifiers, upper +and lower case considered different, all characters +significant. There is however one exception: identifiers +must be more than one character long for parsing reasons. C +style comments are accepted

+ + + + +

/* this is a comment */

+
+ +

and #define macros may be used if the need +arises.

+ +

3.1. Some constants

+ +

Before anything else three constants must be +defined, all with the syntax NAME=value, value being an +integer. These constants are:

+ + + + + + +
+ +

EM_WSIZE

+
+ +

Number of bytes in a machine word. This is the +number of bytes a simple loc instruction will put on +the stack.

+
+ + + + + + +
+ +

EM_PSIZE

+
+ +

Number of bytes in a pointer. This is the number +of bytes a lal instruction will put on the +stack.

+
+ + + + + + +
+ +

EM_BSIZE

+
+ +

Number of bytes in the hole between AB and LB. If +the calling sequence just saves PC and LB this size will be +twice the pointersize.

+
+ +

EM_WSIZE and EM_PSIZE are checked when a program +is compiled with the resulting code generator. EM_BSIZE is +used by cg to add to the offset of instructions +dealing with locals having positive offsets, i.e. +parameters.

+ +

Optionally one can give here the factors with +which the size and time parts of the cost function have to +be multiplied to ensure they have the same order of +magnitude. This can be done as

+
     TIMEFACTOR = C1/C2
+     SIZEFACTOR = C3/C4
+
+ +

Above numbers must be read as rational numbers. +Defaults are 1/1 for both of them. These constants set the +default size/time tradeoff in the code generator, so if +TIMEFACTOR and SIZEFACTOR are both 1 the code generator will +choose at random between two codesequences where one has +cost (10,4) and the other has cost (8,6). See also the +description of the cost field below.

+ +

Also optional is the definition of a printformat +for integers in the codefile. This is given as

+
     FORMAT = string
+
+ +

The default for string is "%ld". For +example on the PDP 11 one can use

+
     FORMAT= "0%lo"
+
+ +

to satisfy the old UNIX assembler that reads +octal unless followed by a period, and the ACK assembler +that follows C conventions.

+ +

3.2. Register definition

+ +

The next part of the tables describes the various +registers of the machine and defines identifiers to be used +in later parts of the tables. Example for the +PDP-11:

+
REGISTERS:
+R0 = ( "r0",2), REG.
+R1 = ( "r1",2), REG, ODDREG.
+R2 = ( "r2",2), REG.
+R3 = ( "r3",2), REG, ODDREG.
+R4 = ( "r4",2), REG.
+LB = ( "r5",2), LOCALBASE.
+R01= ( "r0",4,R0,R1), REGPAIR.
+R23= ( "r2",4,R2,R3), REGPAIR.
+FR0= ( "r0",4), FREG.
+FR1= ( "r1",4), FREG.
+FR2= ( "r2",4), FREG.
+FR3= ( "r3",4), FREG.
+DR0= ( "r0",8,FR0), DREG.
+DR1= ( "r1",8,FR1), DREG.
+DR2= ( "r2",8,FR2), DREG.
+DR3= ( "r3",8,FR3), DREG.
+
+ +

The identifier before the ’=’ sign is +the name of the register as used further on in the table. +The string is the name of the register as far as the +assembler is concerned. The number is the size of the +register in bytes. Identifiers following the number but +within the parentheses are previously defined registernames +that are contained in the register being defined. The +identifiers following the closing parenthesis are properties +of the register. So for example R23 is a register with +assembler name r2, 4 bytes long, contains the registers R2 +and R3 and has the property REGPAIR.

+ +

It might seem wise to list each and every +property of a register, so one might give R0 the extra +property MFPTREG named after the not too well known MFPT +instruction on newer PDP-11 types, but this is not a good +idea. Every extra property means the registerset is more +unorthogonal and cg execution time is influenced by +that, because it has to take into account a larger set of +registers that are not equivalent.

+ +

There is a predefined property SCRATCH that is +dynamic, i.e. a register can have the property SCRATCH one +time, and loose it the next. A register has the property +SCRATCH when it has a reference count of one. One needs to +be able to discriminate between SCRATCH registers and +others, because it is only allowed to do arithmetic on +SCRATCH registers.

+ +

3.3. Stack token definition

+ +

The next part describes all possible tokens that +can reside on the fakestack during code generation. +Attributes of a token are described in the form of a C +struct declaration, this is followed by the size in bytes of +the token, optionally followed by the cost of the token when +used as an addressing mode and the format to be used on +output.

+ +

Tokens should usually be declared for every +addressing mode of the machine at hand and for every size +directly usable in a machine instruction. Example for the +PDP-11 (incomplete):

+
TOKENS:
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

IREG2 =

+
+ + +

{ REGISTER reg; } 2 "*%[reg]" /* +indirect register */

+
+
+ +

REGCONST =

+
+ +

{ REGISTER reg; STRING off; } 2 /* not really +addressable */

+
+
+ +

REGOFF2 =

+
+ +

{ REGISTER reg; STRING off; } 2 +"%[off](%[reg])"

+
+
+ +

IREGOFF2 =

+
+ +

{ REGISTER reg; STRING off; } 2 +"*%[off](%[reg])"

+
+
+ +

CONST =

+
+ + +

{ INT off; } 2 cost=(2,850) +"$%[off]."

+
+
+ +

EXTERN2 =

+
+ +

{ STRING off; } 2 "%[off]"

+
+
+ +

IEXTERN2 =

+
+ +

{ STRING off; } 2 "*%[off]"

+
+
+ +

PAIRSIGNED =

+
+ +

{ REGISTER regeven,regodd; } 2 +"%[regeven]"

+
+
+ +

Types allowed in the struct are REGISTER, INT and +STRING. Tokens without a printformat should never be +output.

+ +

Notice that tokens need not correspond to +addressing modes, the REGCONST token listed above, meaning +the sum of the contents of the register and the constant, +has no corresponding addressing mode on the PDP-11, but is +included so that a sequence of add constant, load indirect, +can be handled efficiently. This REGCONST token is needed as +part of the path

+
     REGISTER -> REGCONST -> REGOFF
+
+ +

of which the first and the last "exist" +and the middle is needed only as an intermediate +step.

+ +

3.4. Token expressions

+ +

Usually machines have certain collections of +addressing modes that can be used with certain instructions. +The stack patterns in the table are lists of these +collections and since it is cumbersome to write out these +long lists every time, there is a section here to give names +to these collections. Please note that it is not forbidden +to write out a token expression in the remainder of the +table, but for clarity it is usually better not to. Example +for the PDP-11 (incomplete):

+
TOKENEXPRESSIONS:
+SOURCE2 = REG + IREG2 + REGOFF2 + IREGOFF2 + CONST + EXTERN2 +
+
+ + + + + + + +
+ +

IEXTERN2

+
+
+ +

SREG = REG * SCRATCH

+ +

Permissible in the expressions are all PASCAL set +operators, i.e.

+ + + + + + + +
+ +

+

+
+ +

set union

+
+
+ + + + + + + +
+ +

-

+
+ +

set difference

+
+
+ + + + + + + +
+ +

*

+
+ +

set intersection

+
+
+ +

Every tokenidentifier is also a token expression +identifier denoting the singleton collection of tokens +containing just itself. Every register property as defined +above is also a token expression matching all registers with +that property when on the fakestack. The standard token +expression identifier ALL denotes the collection of all +tokens.

+ +

3.5. Expressions

+ +

Throughout the rest of the table expressions can +be used in some places. This section will give the syntax +and semantics of expressions. There are four types of +expressions: integer, string, register and undefined. Type +checking is performed by cgg. An operator with at +least one undefined operand returns undefined except for the +defined() function mentioned below. An undefined expression +is interpreted as FALSE when it is needed as a truth value. +Basic terms in an expression are

+ + + + + + +
+ +

number

+
+ +

A number is a constant of type +integer.

+
+ + + + + + +
+ +

string

+
+ +

A string within double quotes is a constant of +type string. All the normal C style escapes may be used +within the string.

+
+ + + + + + +
+ +

REGIDENT

+
+ +

The name of a register is a constant of type +register.

+
+ + + + + + +
+ +

$i

+
+ +

A dollarsign followed by a number is the +representation of the argument of EM instruction . The type +of the operand is dependent on the instruction, sometimes it +is integer, sometimes it is string. It is undefined when the +instruction has no operand.

+
+ + + + + +
+

Although an exhaustive list could be given +describing all the types the following rule of thumb will +suffice. If it is unimaginable for the operand of the +instruction ever to be something different from a plain +integer, the type is integer, otherwise it is string.
+Cg
makes all necessary conversions, like adding EM_BSIZE +to positive arguments of instructions dealing with locals, +prepending underlines to global names, converting codelabels +into a unique representation etc. Details about this can be +found in the section about machine dependent C +code.

+
+ + + + + + +
+ +

%[1]

+
+ +

This in general means the token mentioned first +in the stack pattern. When used inside an expression the +token must be a simple register. Type of this is +register.

+
+ + + + + + +
+ +

%[1.off]

+
+ +

This means field "off" of the first +stack pattern token. Type is the same as that of field +"off". To use this expression implies a check that +all tokens in the token expression used have the same +attributes.

+
+ + + + + + +
+ +

%[1.1]

+
+ +

This is the first subregister of the first token. +Previous comments apply.

+
+ + + + + + + +
+ +

%[b]

+
+ +

The second allocated register.

+
+
+ + + + + + +
+ +

%[a.2]

+
+ +

The second subregister of the first allocated +register.

+
+ +

All normal C operators apply to integers, the + +operator serves for string concatenation and register +expressions can only be compared to each other. Furthermore +there are some special "functions":

+ + + + + + +
+ +

tostring(e)

+
+ +

Converts an integer expression e to a +string.

+
+ + + + + + +
+ +

defined(e)

+
+ +

Returns 1 if expression e is defined, 0 +otherwise.

+
+ + + + + + +
+ +

samesign(e1,e2)

+
+ +

Returns 1 if integer expression e1 and e2 have +the same sign.

+
+ + + + + + +
+ +

sfit(e1,e2)

+
+ +

Returns 1 if integer expression e1 fits as a +signed integer into a field of e2 bits, 0 +otherwise.

+
+ + + + + + +
+ +

ufit(e1,e2)

+
+ +

Same as above but now for unsigned +e1.

+
+ + + + + + +
+ +

rom(a,n)

+
+ +

Integer expression giving the n’th argument +from the rom descriptor pointed at by the a’th +EM instruction. Undefined if that descriptor does not +exist.

+
+ + + + + + +
+ +

loww(a)

+
+ +

Returns the lower half of the argument of the +a’th EM instruction. This is used to split the +arguments of a ldc instruction.

+
+ + + + + + + +
+ +

highw(a)

+
+ +

Same for upper half.

+
+
+ +

3.6. Code rules

+ +

The largest section of the tables consists of the +code generation rules. They specify EM patterns, stack +patterns, code to be generated etc. Syntax is

+
code rule : EM pattern ’|’ stack pattern ’|’ code ’|’
+
+ + + + + + + +
+ +

stack replacement ’|’ EM replacement +’|’ cost ;

+
+
+ +

All parts are optional, however there must be at +least one pattern present. If the empattern is missing the +rule becomes a rewriting rule or coercion to be used +when code generation cannot continue because of an invalid +stack pattern. The code rules are preceded by the +word

+
     CODE:
+
+ +

The next paragraphs describe the various parts in +detail.

+ +

3.6.1. The EM pattern

+ +

The EM pattern consists of a list of EM mnemonics +followed by a boolean expression. Examples:

+
     loe
+
+ +

will match a single loe +instruction,

+
     loc loc cif $1==2 && $2==8
+
+ +

is a pattern that will match

+
     loc 2
+     loc 8
+     cif
+
+ +

and

+
     lol inc stl $1==$3
+
+ +

will match for example

+ + + + +

lol 6

+ + + + + + + + + + + + + + + + + + + + +
+ +

lol -2

+
+ + +

lol 4
+inc

+
+
+ +

inc

+
+ +

but not

+
+ +

inc
+stl
6

+
+
+ +

stl -2

+
+ + +

stl -4

+
+
+ +

A missing boolean expression evaluates to +TRUE.

+ +

When the EM pattern is the same as in the +previous code rule the pattern should be given as +‘...’. The code generator will match the longest +EM pattern on every occasion, if two patterns of the same +length match the first in the table will be chosen, while +all patterns of length greater than or equal to three are +considered to be of the same length.

+ +

3.6.2. The stack pattern

+ +

The stack pattern is a list of token expressions, +usually token expression identifiers for clarity. No boolean +expression is allowed here. The first expression is the one +that matches the top of the stack.

+ +

The pattern can be followed by the word STACK in +which case the pattern only matches if there is nothing else +on the fakestack. The code generator will stack everything +not matched at the start of the rule.

+ +

The pattern can be preceded with the +word

+
     nocoercions:
+
+ +

which tells the code generator not to try to +coerce to the pattern but only to use it when it is already +there. There are two reasons for this construction, +correctness and speed. It is needed for correctness when the +pattern contains a register that is not transparent when +data is moved through it.

+ +

Example: on the PDP-11 the shortest code +for

+
     lae a
+     loi 8
+     lae b
+     sti 8
+
+ +

is

+
     movf _a,fr0
+     movf fr0,_b
+
+ +

assuming that the floating point processor is in +double precision mode and fr0 is free. Unfortunately this is +not correct since a trap can occur on certain kinds of data. +This could happen if there was a pattern for sti 8 +that allowed one to move a floating point register not +preceded by nocoercions: . The code generator would then +find that moving the 8-byte global _a to a floating point +register and then storing it to _b was the cheapest, +assuming that the space/time knob was turned far enough to +space. It is unfortunate that the type information is no +longer present, since if _a really is a floating point +number the move could be made without error.

+ +

The second reason for the nocoercions: construct +is speed. When the code generator has a long list of +possible stack patterns for one EM pattern it can waste a +lot of time trying to find coercions to all of them, while +the mere presence of such a long list indicates that the +table writer has given a lot of special cases. In this case +prepending all the special cases by nocoercions: will stop +the code generator from trying to find things there +aren’t.

+ +

3.6.3. The code part

+ +

The code part consists of three parts, stack +cleanup, register allocation and code to generate. All of +these may be omitted.

+ +

3.6.3.1. Stack cleanup

+ +

The stack cleanup part describes certain +stacktokens that should neither remain on the fakestack, nor +remembered as contents of registers. This is usually only +required with store operations. The entire fakestack, except +for the part matched in the stack pattern, is searched for +tokens matching the expression and they are copied to the +real stack. Every register that contains the stacktoken is +marked as empty.

+ +

Syntax is

+
     remove(token expression) or
+     remove(token expression, boolean expression)
+
+ +

Example:

+
     remove(REGOFF2,%[reg] != LB || %[off] == $1)
+
+ +

is part of a remove() call for use in the +stl code rule. It removes all register offsetted +tokens where the register is not the localbase plus the +local wherein the store is done. The necessity for this can +be seen from the following example:

+
     lol 4
+     inl 4
+     stl 6
+
+ +

Without a proper remove() call in the rule for +inl code would be generated as here

+
     inc 4(r5)
+     mov 4(r5),6(r5)
+
+ +

so local 6 would be given the new value of local +4 instead of the old as the EM code prescribed.

+ +

When generating something like a branch +instruction it might be needed to empty the fakestack +completely. This can of course be done with

+
     remove(ALL)
+
+ +

3.6.3.2. Register allocation

+ +

The register allocation part describes the kind +of registers needed. Syntax for allocate() is

+
     allocate(itemlist)
+
+ +

where itemlist is a list of three kinds of +things:

+ + + + + + + +
+ +

1)

+
+ +

a tokendescription, for example %[1].

+
+
+ + + + + +
+

This will instruct the code generator to +temporarily decrement the reference count of all registers +contained in the token, so that they are available for +allocation in this allocate() call if they were only used in +that token. See example below.

+
+ + + + + + + +
+ +

2)

+
+ +

a register property.

+
+
+ + + + + +
+

This will allocate a register with that property. +The register will be marked as empty at this point. +Lookahead will be performed if necessary.

+
+ + + + + + + +
+ +

3)

+
+ +

a register property with +initialization.

+
+
+ + + + + +
+

This will allocate the register as in 2) but will +also initialize it. This eases the task of the code +generator because it can find a register already filled with +the right value if it exists.

+
+ +

Examples:

+
     allocate(OREG)
+
+ +

will allocate an odd register, while

+
     allocate(REG={REGOFF2,LB,$1})
+
+ +

will allocate a register while simultaneously +filling it with the asked value.
+Inside the coercion from SOURCE2 to REGISTER in the PDP-11 +table the following allocate() can be found.

+
     allocate(%[1],REG=%[1])
+
+ +

This tells the code generator that registers +contained in %[1] can be used again and asks to fill the +register allocated with %[1]. So if +%[1]={REGOFF2,R3,"4"} and R3 has a reference count +of 1 the following code might be generated.

+
     mov 4(r3),r3
+
+ +

In the rest of the line the registers allocated +can be named by %[a] and %[b.1],%[b.2], i.e. with lower case +letters in order of allocation.

+ +

Warning:

+
     allocate(R3)
+
+ +

is not the way to allocate R3. R3 is not a +register property, so it will be seen as a token description +and the effect is that R3 will have its reference count +decremented.

+ +

3.6.3.3. Code

+ +

Code to be generated is specified as a list of +items of the following kind:

+ + + + + + +
+ +

1)

+
+ +

a string in double quotes ("This is a +string").

+
+ + + + + +
+

This is copied to the codefile and a newline ( \n +) is appended. Inside the string all normal C string +conventions are allowed, and substitutions can be made of +the following sorts.

+
+ + + + + + + +
+ +

a)

+
+ +

$1, $2 etc. These are the operands of the +corresponding EM instructions and are printed according to +their type. To put a real ’$’ inside the string +it must be doubled (’$$’).

+
+ + + + + + + +
+ +

b)

+
+ +

%[1], %[2.reg], %[b.1] etc. These have their +obvious meaning. If they describe a complete token ( %[1] ) +the printformat for the token is used. If they stand for a +basic term in an expression they will be printed according +to their type. To put a real ’%’ inside the +string it must be doubled (’%%’).

+
+ + + + + + + +
+ +

c)

+
+ +

%( arbitrary expression %). This allows inclusion +of arbitrary expressions inside strings. Usually not needed +very often, so that the awkward notation is not too bad. +Note that %(%[1]%) is equivalent to %[1].

+
+ + + + + + +
+ +

2)

+
+ +

a move() call. This has the following +syntax:

+
+ + + + + +
+
     move(token description, token description)
+
+ +

Moves are handled specially since that enables the +code generator to keep track of register contents. +Example:

+ +
     move(R3,{REGOFF2,LB,$1})
+
+ +

will generate code to move R3 to $1(r5) except +when R3 already was a copy of $1(r5). Then the code will be +omitted. The rules describing how to move things to each +other can be found in the MOVES section described +below.

+
+ + + + + + +
+ +

3)

+
+ +

an erase() call. This has the following +syntax:

+
+ + + + + +
+
     erase(register expression)
+
+ +

This tells the code generator that the register +mentioned no longer has any useful value. This is +necessary after code in the table has changed the +contents of registers. For example, after an add to a +register the register must be erased, because the contents +do no longer match any token.

+
+ + + + + + +
+ +

4)

+
+ +

For machines that have condition codes, alas most +of them do, there are provisions to remember condition code +setting and prevent needless testing. To set the condition +code to a token put in the code the following +call:

+
+ + + + + +
+
     test(token)
+
+ +

where token can be all of the standard forms that +can also be used in move(). This will generate a test if the +condition codes were not already set to that token. It is +also possible to tell cg that a certain operation, +like a preceding add has set the condition codes to some +token with the call

+ +
     setcc(token)
+
+ +

So a sequence of a setcc and a test on the same +token will generate no code. Another allowed call within the +code is

+ +
     samecc
+
+ +

which tells the code generator that condition +codes were unaffected in this rule. If no setcc or samecc +has been given the default is

+ +
     nocc
+
+ +

when a piece of code contained strings, which +tells the code generator that the condition codes have no +useful value any more.

+ +

3.6.4. Stack replacement

+ +

The stack replacement is a possibly empty list of +items to be pushed onto the fakestack. Three kinds of items +are possible:

+ + + + + + +
+ +

1)

+
+ +

An item of the form %[1]. This will push the +stacktoken mentioned back onto the stack +unchanged.

+
+ + + + + + +
+ +

2)

+
+ +

A register expression. This will push the +register mentioned onto the fakestack.

+
+ + + + + + +
+ +

3)

+
+ +

An item of the form { REGOFF2,%[1.reg],$1 }. This +generates a token with tokenidentifier REGOFF2 and +attributes in order of declaration.

+
+ +

All tokens matched by the stack pattern at the +beginning of the code rule are first removed and their +registers deallocated. Items are pushed in the order of +appearance. This means that the last item will be on the top +of the stack after the push. So if the stack pattern +contained two token expressions and they must be pushed back +unchanged, they have to be specified as stack +replacement

+
     %[2] %[1]
+
+ +

and not the other way around.

+ +

3.6.5. EM replacement

+ +

In exceptional cases it might be useful to leave +part of an empattern undone. For example, a sdl +instruction might be split into two stl instructions +when there is no 4-byte quantity on the stack. The +emreplacement part allows one to express this. +Example:

+
     stl $1 stl $1+2
+
+ +

The instructions are inserted in the stream so +that they can match the first part of a pattern in the next +step. Note that since the code generator traverses the EM +instructions in a strict linear fashion, it is impossible to +let the EM replacement match later parts of a pattern. So if +there is a pattern

+
     loc stl $1==0
+
+ +

and the input is

+
     loc 0 sdl 4
+
+ +

the loc 0 will be processed first, then +the sdl might be split into two stl’s +but the pattern cannot match now.

+ +

3.6.6. Cost

+ +

The cost field can be specified when there is +more than one code rule with the same empattern. If the code +generator has a choice between two possibilities to generate +code it will choose the cheapest according to the cost +field. The cost for a code generation is the sum of the +costs of all the coercions needed, plus the cost for freeing +registers plus the cost of the code rule itself.

+ +

The format of the costfield is

+ + + + +

( nbytes, time )

+ + + + + + +
+ + +

or

+
+
+ +

( nbytes, time ) + %[i]

+ +

with time in the metric desired, like nanoseconds +or states. See constants section above. The %[i] in +the second example is used for adding the cost of a certain +address mode used in the code generated. This can of course +be repeated if desired. The cost of the address mode must +then be specified in the token definition +section.

+ +

3.6.7. Examples

+ +

A list of examples for the PDP-11 is given here. +Far from being complete it gives examples of most kinds of +instructions.

+
adi $1==2 | SREG,SOURCE2 |
+
+ + + + + + + + + + + +
+ +

"add %[2],%[1]" erase(%[1]) +setcc(%[1])

+
+
+ +

| %[1] | | (2,450) + %[2]

+
+
+ +

... | SOURCE2,SREG |

+ + + + + + + + +
+ +

"add %[1],%[2]" erase(%[2]) +setcc(%[2])

+
+ +

| %[2] | | (2,450) + %[1]

+
+ +

is an example of the use of the ‘...’ +construct and shows how to place erase() and setcc() +calls.

+
dvi $1==2 | SOURCE2,SPAIRSIGNED |
+
+ + + + + + + + + + + +
+ +

"div %[1],%[2]" erase(%[2])

+
+
+ +

| %[2.regeven] | |

+
+
+ +

cmi tgt $1==2 | SOURCE2,SOURCE2 | +allocate(REG={CONST,0})

+ + + + + + + + +
+ +

"cmp %[2],%[1];ble 1f;inc %[a];1:" +erase(%[a])

+
+ +

| %[a] | |

+
+ +

cal | STACK |

+ + + + + + + + +
+ +

"jsr pc,$1"

+
+ +

| | |

+
+ +

lol | | | { REGOFF2, LB, $1 } | +|

+ +

stl | SOURCE2 |

+ + + + + + + + + + + +
+ +

remove(REGOFF2,%[off]==$1)

+
+ +

move(%[1],{REGOFF2,LB,$1})

+
+ +

| | |

+
+ +

| SOURCE2 |

+ + + + + + + + + + + + + + +
+ +

allocate(%[1],REGPAIR)

+
+ +

move(%[1],%[a.2])

+
+ +

test(%[a.2])

+
+ +

"sxt %[a.even]" | { PAIRSIGNED, %[a.1], +%[a.2] }| |

+
+ +

This coercion shows how to use the move and test +calls. At first one might think that the testcall is +unnecessary, since the move will have set the condition +codes, but the move may never have been executed if the +register already contained the value, in which case it is +necessary to do the test. If the move was executed the test +will be omitted.

+
| SOURCE2 | allocate(%[1],REG=%[1]) | %[a] | |
+
+
+sdl | SOURCE2 | | %[1] | stl $1 stl $1+2 |
+
+
+exg $1==2 | SOURCE2 SOURCE2 | | %[1] %[2] | |
+
+ +

This last example again shows the difference in +the order of the stack pattern and the stack +replacement.

+ +

3.7. Move code rules

+ +

When issuing a move() call as described above or +a register allocation with initialization, the code +generator has to know which instruction to use for the move. +The code will of course only be generated if it cannot be +omitted. This is listed in the move section of the tables by +giving a list of tuples:

+
     ( source, destination, codepart [ , costfield ] )
+
+ +

where the square brackets mean the costfield is +optional. Example for the PDP-11

+
     MOVES:
+     ( CONST %[off]==0 , SOURCE2, "clr %[2]" )
+     ( SOURCE2, SOURCE2, "mov %[1],%[2]" )
+
+ +

The moves are scanned from top to bottom, so the +first one that matches will be chosen.

+ +

3.8. Test code rules

+ +

When issuing a test() call as described above, +the code generator has to know which instruction to use for +the test. The code will only be generated if the condition +codes were not already set to the token. This is listed in +the test section of the tables by giving a list of +tuples:

+
     ( source, codepart [ , costfield ] )
+
+ +

Example for the PDP-11

+
     TESTS:
+     ( SOURCE2, "tst %[1]")
+     ( DREG, "tstf %[1]\ncfcc")
+
+ +

The tests are scanned from top to bottom, so the +first one that matches will be chosen.

+ +

3.9. Stacking code rules.

+ +

When the code generator has to stack a token it +must know which code to use. Since it must at all times be +possible to empty the fakestack even when no registers are +free, it is mandatory that all tokens used must have a rule +attached for stacking them without using a scratch register. +Since however this might be clumsy and a register might in +practice be available it is also possible to give rules +which use a register. On the Intel 8086 for example, there +is no instruction to push a constant without using a +register, and the code needed to do it without, must use +global data and as such is very complicated and wasteful of +memory and time. It can therefore be left to be used in +extreme cases, while in general the constant is pushed +through a register. The stacking rules are listed in the +stack section of the table as a list of tuples:

+
     (source, [ register property ] , codepart [ , costfield ] )
+
+ +

Example for the Intel 8086:

+
     STACKS:
+     (CONST, REG, move(%[1],%[a]) "push %[a]")
+     (REG ,, "push %[1]")
+
+ +

4. The files mach.h and mach.c

+ +

The table writer must also supply two files +containing machine dependent declarations and C code. These +files are mach.h and mach.c.

+ +

4.1. Types in the code generator

+ +

Three different types of integer coexist in the +code generator and their range depends on the machine at +hand. The type ’int’ is used for things like +labelcounters that won’t require more than 16 bits +precision. The type ’word’ is used among others +to assemble datawords and is of type ’long’. The +type ’full’ is used for addresses and is of type +’long’ if EM_WSIZE>2 or +EM_PSIZE>2.

+ +

In macro and function definitions in later +paragraphs implicit typing will be used for parameters, that +is parameters starting with an ’s’ will be of +type string, and the letters +’i’,’w’,’f’ will stand +for int, word and full respectively.

+ +

4.2. Global variables to work with

+ +

Some global variables are present in the code +generator that can be manipulated by the routines in mach.h +and mach.c.

+ +

The declarations are:

+ + + + + + + + + + + + + + + + + +
+ +

FILE *codefile;

+
+ +

/* code is emitted on this stream */

+
+ +

word part_word;

+
+ +

/* words to be output are put together here +*/

+
+ +

int part_size;

+
+ +

/* number of bytes already put in part_word +*/

+
+ +

char str[];

+
+ +

/* Last string read in */

+
+ +

long argval;

+
+ +

/* Last int read and kept */

+
+ +

4.3. Macros in mach.h

+ +

In the file mach.h a collection of macros is +defined that have to do with formatting of assembly code for +the machine at hand. Some of these macros can of course be +left undefined in which case the macro calls are left in the +source and will be treated as function calls. These +functions can then be defined in mach.c.

+ +

The macros to be defined are:

+ + + + + + +
+ +

ex_ap(s)

+
+ +

Must print the magic incantations that will mark +the symbol to be exported to other modules. This is the +translation of the EM exa and exp +instructions.

+
+ + + + + + +
+ +

in_ap(s)

+
+ +

Same to import the symbol. Translation of +ina and inp.

+
+ + + + + + +
+ +

newplb(s)

+
+ +

Must print the definition of procedure label +s. If left undefined the newilb() macro is used +instead.

+
+ + + + + + +
+ +

newilb(s)

+
+ +

Must print the definition of instruction label +s.

+
+ + + + + + +
+ +

newdlb(s)

+
+ +

Must print the definition of data label +s.

+
+ + + + + + +
+ +

dlbdlb(s1,s2)

+
+ +

Must define data label s1 to be equal to +s2.

+
+ + + + + + +
+ +

newlbss(s,f)

+
+ +

Must declare a piece of memory initialized to +BSS_INIT(see below) of length f and with label +s.

+
+ + + + + + +
+ +

cst_fmt

+
+ +

Format to be used when converting constant +arguments of EM instructions to string. Argument to be +formatted will be ’full’.

+
+ + + + + + +
+ +

off_fmt

+
+ +

Format to be used for integer part of +label+constant, argument will be +’full’.

+
+ +

fmt_ilb(ip,il,s)

+ + + + + +
+

Must use the numbers ip and il which +are a procedure number and a label number respectively and +copy a string to s that must be unique for that +combination. This procedure is optional, if it is not given +ilb_fmt must be defined as below.

+
+ + + + + + +
+ +

ilb_fmt

+
+ +

Format to be used for creation of unique +instruction labels. Arguments will be a unique procedure +number (int) and the label number (int).

+
+ + + + + + +
+ +

dlb_fmt

+
+ +

Format to be used for printing numeric data +labels. Argument will be ’int’.

+
+ + + + + + +
+ +

hol_fmt

+
+ +

Format to be used for generation of labels for +space generated by a hol pseudo. Argument will be +’int’.

+
+ + + + + + +
+ +

hol_off

+
+ +

Format to be used for printing of the address of +an element in hol space. Arguments will be the offset +in the hol block (word) and the number of the +hol (int).

+
+ + + + + + +
+ +

con_cst(w)

+
+ +

Must generate output that will assemble into one +machineword.

+
+ + + + + + +
+ +

con_ilb(s)

+
+ +

Must generate output that will put the address of +the instruction label into the datastream.

+
+ + + + + + +
+ +

con_dlb(s)

+
+ +

Must generate output that will put the address of +the data label into the datastream.

+
+ + + + + + +
+ +

fmt_id(sf,st)

+
+ +

Must take the string in sf which is a +nonnumeric global label, and transform it into a copy made +to st which will not collide with reserved assembler +words and system labels. This procedure is optional, if it +is not given the id_first macro is used as defined +below.

+
+ + + + + + +
+ +

id_first

+
+ +

Must be a character. This is prepended to all +nonnumeric global labels if their length is shorter than the +maximum allowed(currently 8) or if they already start with +that character. This is to avoid conflicts of user labels +with system labels.

+
+ + + + + + +
+ +

BSS_INIT

+
+ +

Must be a constant. This is the value filled in +all the words not initialized explicitly. This is loader and +system dependent. If omitted no initialization is +assumed.

+
+ +

4.3.1. Example mach.h for the PDP-11

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

#define ex_ap(y)

+
+ +

fprintf(codefile,"\t.globl +%s\n",y)

+
+
+ +

#define in_ap(y)

+
+ +

/* nothing */

+
+
+ +

#define newplb(x)

+
+ + +

fprintf(codefile,"%s:\n",x)

+
+
+ +

#define newilb(x)

+
+ + +

fprintf(codefile,"%s:\n",x)

+
+
+ +

#define newdlb(x)

+
+ + +

fprintf(codefile,"%s:\n",x)

+
+
+ +

#define

+
+ +

dlbdlb(x,y)

+
+ + +

fprintf(codefile,"%s=%s\n",x,y)

+
+
+ +

#define newlbss(l,x)

+
+ + +

fprintf(codefile,"%s:.=.+%d.\n",l,x);

+
+
+ +

#define cst_fmt

+
+ + +

"$%d."

+
+
+ +

#define off_fmt

+
+ + +

"%d."

+
+
+ +

#define ilb_fmt

+
+ + +

"I%x_%x"

+
+
+ +

#define dlb_fmt

+
+ + +

"_%d"

+
+
+ +

#define

+
+ +

hol_fmt

+
+ + +

"hol%d"

+
+
+ +

#define hol_off

+
+ + +

"%ld.+hol%d"

+
+
+ +

#define con_cst(x)

+
+ + +

fprintf(codefile,"%ld.\n",x)

+
+
+ +

#define con_ilb(x)

+
+ +

fprintf(codefile,"%s\n",x)

+
+
+ +

#define con_dlb(x)

+
+ +

fprintf(codefile,"%s\n",x)

+
+
+ +

#define id_first

+
+ +

’_’

+
+
+ +

#define BSS_INIT

+
+ +

0

+
+
+ +

4.4. Functions in mach.c

+ +

In mach.c some functions must be supplied, mostly +manipulating data resulting from pseudoinstructions. The +specifications are given here, implicit typing of parameters +as above.

+ + + + + + +
+ +

con_part(isz,word)

+
+ +

This function must manipulate the globals +part_word and part_size to append the isz bytes contained in +word to the output stream. If part_word is full, i.e. +part_size==EM_WSIZE the function part_flush() may be called +to empty the buffer. This is the function that must go +through the trouble of doing byte order in words +correct.

+
+ + + + + + +
+ +

con_mult(w_size)

+
+ +

This function must take the string str[] and +create an integer from the string of size w_size and +generate code to assemble global data for that integer. Only +the sizes for which arithmetic is implemented need be +handled, so if 200-byte integer division is not implemented, +200-byte integer global data do not have to be implemented. +Here one must take care of word order in long +integers.

+
+ + + + + + +
+ +

con_float()

+
+ +

This function must generate code to assemble a +floating point number of which the size is contained in +argval and the ASCII representation in str[].

+
+ + + + + + +
+ +

prolog(f_nlocals)

+
+ +

This function is called at the start of every +procedure. Function prolog code must be generated, and room +made for local variables for a total of f_nlocals +bytes.

+
+ + + + + + +
+ +

mes(w_mesno)

+
+ +

This function is called when a mes pseudo +is seen that is not handled by the machine independent part. +The example below probably shows all the table writer ever +has to know about that.

+
+ + + + + + +
+ +

segname[]

+
+ +

This is not a function, but an array of four +strings. These strings are put out whenever the code +generator switches segments. Segments are SEGTXT, SEGCON, +SEGROM and SEGBSS in that order.

+
+ +

4.4.1. Example mach.c for the PDP-11

+ +

As an example of the sort of code expected, the +mach.c for the PDP-11 is presented here.

+
/*
+ * machine dependent back end routines for the PDP-11
+ */
+
+
+con_part(sz,w) register sz; word w; {
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

while (part_size % sz)

+
+
+ + +

part_size++;

+
+
+ +

if (part_size == EM_WSIZE)

+
+
+ + +

part_flush();

+
+
+ +

if (sz == 1) {

+
+
+ + +

w &= 0xFF;

+
+
+ + +

if (part_size)

+
+
+ + + +

w <<= 8;

+
+
+ + +

part_word |= w;

+
+
+ +

} else {

+
+
+ + +

assert(sz == 2);

+
+
+ + +

part_word = w;

+
+
+ +

}

+
+
+ +

part_size += sz;

+
+
+ +

}

+ +

con_mult(sz) word sz; {

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

long l;

+
+
+ +

if (sz != 4)

+
+
+ + +

fatal("bad icon/ucon +size");

+
+
+ +

l = atol(str);

+
+
+ + +

fprintf(codefile,"\t%o;%o\n",(int)(l>>16),(int)l);

+
+
+ +

}

+ +

con_float() {

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

double f;

+
+
+ +

register short *p,i;

+
+
+ +

/*

+
+
+ +

* This code is correct only when the code +generator is

+
+
+ +

* run on a PDP-11 or VAX-11 since it assumes +native

+
+
+ +

* floating point format is PDP-11 +format.

+
+
+ +

*/

+
+
+ +

if (argval != 4 && argval != +8)

+
+
+ + +

fatal("bad fcon size");

+
+
+ +

f = atof(str);

+
+
+ +

p = (short *) &f;

+
+
+ +

i = *p++;

+
+
+ +

if (argval == 8) {

+
+
+ + + +

fprintf(codefile,"\t%o;%o;",i,*p++);

+
+
+ + +

i = *p++;

+
+
+ +

}

+
+
+ + +

fprintf(codefile,"\t%o;%o\n",i,*p++);

+
+
+ +

}

+ +

prolog(nlocals) full nlocals; {

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

fprintf(codefile,"mov r5,-(sp)\nmov +sp,r5\n");

+
+
+ +

if (nlocals == 0)

+
+
+ + +

return;

+
+
+ +

if (nlocals == 2)

+
+
+ + +

fprintf(codefile,"tst +-(sp)\n");

+
+
+ +

else

+
+
+ + +

fprintf(codefile,"sub +$%d.,sp\n",nlocals);

+
+
+ +

}

+ +

mes(type) word type; {

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

int argt ;

+
+
+ +

switch ( (int)type ) {

+
+
+ +

case ms_ext :

+
+
+ + +

for (;;) {

+
+
+ + + +

switch ( argt=getarg(

+
+
+ + + +

ptyp(sp_cend)|ptyp(sp_pnam)|sym_ptyp) ) +{

+
+
+ + + +

case sp_cend :

+
+
+ + + + +

return ;

+
+
+ + + +

default:

+
+
+ + + + +

strarg(argt) ;

+
+
+ + + + +

fprintf(codefile,".globl %s\n",argstr) +;

+
+
+ + + + +

break ;

+
+
+ + + +

}

+
+
+ + +

}

+
+
+ +

default :

+
+
+ + +

while ( getarg(any_ptyp) != sp_cend ) +;

+
+
+ + +

break ;

+
+
+ +

}

+
+
+ +

}

+ +

char *segname[] = {

+ + + + + + + + + + + + + + +
+ +

".text", /* SEGTXT */

+
+ +

".data", /* SEGCON */

+
+ +

".data", /* SEGROM */

+
+ +

".bss" /* SEGBSS */

+
+ +

};

+ +

5. Coercions

+ +

A central part in code generation is taken by the +coercions. It is the responsibility of the table +writer to provide all necessary coercions so that code +generation can continue. The very minimal set of coercions +are the coercions to unstack every token expression, in +combination with the rules to stack every token.

+ +

If these are present the code generator can +always make the necessary transformations by stacking and +unstacking. Of course for codequality it is usually best to +provide extra coercions to prevent this stacking to take +place. Cg discriminates three types of +coercions:

+ + + + + + +
+ +

1)

+
+ +

Unstacking coercions. This category can use the +allocate() call in its code.

+
+ + + + + + +
+ +

2)

+
+ +

Splitting coercions, these are the coercions that +split larger tokens into smaller ones.

+
+ + + + + + +
+ +

3)

+
+ +

Transforming coercions, these are the coercions +that transform a token into another one of the same size. +This category can use the allocate() call in its +code.

+
+ +

When a stack configuration does not match the +stack pattern coercions are searched for in the +following order:

+ + + + + + +
+ +

1)

+
+ +

First tokens are split if necessary to get their +sizes right.

+
+ + + + + + +
+ +

2)

+
+ +

Then transforming coercions are found that will +make the pattern match.

+
+ + + + + + +
+ +

3)

+
+ +

Finally if the stack pattern is longer than the +fakestack contents unstacking coercions will be used to fill +up the pattern.

+
+ +

At any point, when coercions are missing so code +generation could not continue, the offending tokens are +stacked.

+ +

6. Internal workings of the code generator.

+ +

6.1. Description of tables.c and tables.h contents

+ +

In this section the intermediate files will be +described that are produced by cgg and compiled with +machine independent code to produce a code +generator.

+ +

6.1.1. Tables.c

+ +

Tables.c contains a large number of initialized +array’s of all sorts. Description of each +follows:

+ + + + + +
+

byte code rules[]

+ + + + + +
+

Pseudo code interpreted by the code generator. +Always starts with some opcode followed by operands +depending on the opcode. Integers in this table are between +0 and 32767 and have a one byte encoding if between 0 and +127.

+ + + + + +
+

char stregclass[]

+ + + + + +
+

Number of computed static register class per +register. Two registers are in the same class if they have +the same properties and don’t share a common +subregister.

+ + + + + +
+

struct reginfo machregs[]

+ + + + + +
+

Info per register. Initialized with representation +string, size, members of the register and set of registers +affected when this one is changed. Also contains room for +runtime information, like contents and reference +count.

+ + + + + +
+

tkdef_t tokens[]

+ + + + + +
+

Information per tokentype. Initialized with size, +cost, type of operands and formatstring.

+ + + + + +
+

node_t enodes[]

+ + + + + +
+

List of triples representing expressions for the +code generator.

+ + + + + +
+

string code strings[]

+ + + + + +
+

List of strings. All strings are put in a list and +checked for duplication, so only one copy per string will +reside here.

+ + + + + +
+

set_t machsets[]

+ + + + + +
+

List of token expression sets. Bit 0 of the set is +used for the SCRATCH property of registers, bit 1 upto NREG +are for the corresponding registers and bit NREG+1 upto the +end are for corresponding tokens.

+ + + + + +
+

inst_t tokeninstances[]

+ + + + + +
+

List of descriptions for building tokens. Contains +type of rule for building one, plus operands depending on +the type.

+ + + + + +
+

move_t moves[]

+ + + + + +
+

List of move rules. Contains token expressions for +source and destination plus cost and index for code +rule.

+ + + + + +
+

byte pattern[]

+ + + + + +
+

EM patterns. This is structured internally as +chains of patterns, each chain pointed at by pathash[]. +After each pattern the list of possible code rules is +given.

+ + + + + +
+

int pathash[256]

+ + + + + +
+

Indices into pattern[] for all patterns with a +certain low order byte of the hashing +function.

+ + + + + +
+

c1_t c1coercs[]

+ + + + + +
+

List of rules to stack tokens. Contains token +expressions, register needed, cost and code +rule.

+ + + + + +
+

c2_t c2coercs[]

+ + + + + +
+

List of splitting coercions. Token expressions, +split factor, replacements and code rule.

+ + + + + +
+

c3_t c3coercs[]

+ + + + + +
+

List of one to one coercions. Token expressions, +register needed, replacement and code rule.

+ + + + + +
+

struct reginfo **reglist[]

+ + + + + +
+

List of lists of pointers to register information. +For every property the list is here to find the registers +corresponding to it.

+ +

6.1.2. tables.h

+ +

In tables.h various derived constants for the +tables are given. They are then used to determine array +sizes in the actual code generator, plus loop termination in +some cases.

+ +

6.2. Other important data structures

+ +

During code generation some other data structures +are used and here is a short description of some of the +important ones.

+ +

Tokens are kept in the code generator as a struct +consisting of one integer t_token which is -1 if the +token is a register, and the number of the token otherwise, +plus an array of TOKENSIZE unions t_att of +which the first is the register number in case of a +register.

+ +

The fakestack is an array of these tokens, there +is a global variable stackheight.

+ +

The results of expressions are kept in a struct +result with elements e_typ, giving the type of +the expression: EV_INT, EV_REG or +EV_STR, and a union e_v which contains the +real result.

+ +

6.3. A tour through the sources

+ +

6.3.1. codegen.c

+ +

The file codegen.c contains one large function +consisting of one giant switch statement. It is the +interpreter for the code generator pseudo code as contained +in code rules[]. This function can call itself recursively +when doing lookahead. Arguments are:

+ + + + + + +
+ +

codep

+
+ +

Pointer into code rules, pseudo program +counter.

+
+ + + + + + + +
+ +

ply

+
+ +

Number of EM pattern lookahead +allowed.

+
+
+ + + + + + +
+ +

toplevel

+
+ +

Boolean telling whether this is the toplevel +codegen() or a deeper incarnation.

+
+ + + + + + +
+ +

costlimit

+
+ +

A cutoff value to limit searches. If the cost +crosses costlimit the incarnation can terminate.

+
+ + + + + + +
+ +

forced

+
+ +

A register number if nonzero. This is used inside +coercions to force the allocate() call to allocate a +register determined by earlier lookahead.

+
+ +

The instructions inplemented in the +switch:

+ +

6.3.1.1. DO_NEXTEM

+ +

Matches the next EM pattern and does lookahead if +necessary to find the best code rule associated with this +pattern. Heuristics are used to determine best code rule +when possible. This is done by calling the distance() +function.

+ +

6.3.1.2. DO_COERC

+ +

This sets the code generator in the state to do a +from stack coercion.

+ +

6.3.1.3. DO_XMATCH

+ +

This is done when a match no longer has to be +checked. Used when the nocoercions: trick is used in the +table.

+ +

6.3.1.4. DO_MATCH

+ +

This is the big one inside this function. It has +the task to transform the contents of the current fakestack +to match the pattern given after it.

+ +

Since the code generator does not know combining +coercions, i.e. there is no way to make a big token out of +two smaller ones, the first thing done is to stack every +token that is too small. After that all tokens too big are +split if possible to the right size.

+ +

Next the coercions are sought that would +transform tokens in place to the right one, plus the +coercions that would pop tokens of the stack. Each of those +might need a register, so a list of registers is generated +and at the end of looking for coercions the function +tuples() is called to generate the list of all +possible n-tuples, where n equals the number +of registers needed.

+ +

Lookahead is now performed if the number of +tuples is greater than one. If no possibility is found +within the costlimit, the fakestack is made smaller by +pushing the bottom token, and this process is repeated until +either a way is found or the fakestack is completely empty +and there is still no way to make the match.

+ +

If there is a way the corresponding coercions are +executed and the code is finished.

+ +

6.3.1.5. DO_REMOVE

+ +

Here the remove() call is executed, all tokens +matched by the token expression plus boolean expression are +pushed. In the current implementation there is no attempt to +move those tokens to registers, but that is a possible +future extension.

+ +

6.3.1.6. DO_DEALLOCATE

+ +

This one temporarily decrements by one the +reference count of all registers contained in the token +given as argument.

+ +

6.3.1.7. DO_REALLOCATE

+ +

Here all temporary deallocates are made +undone.

+ +

6.3.1.8. DO_ALLOCATE

+ +

This is the part that allocates a register and +decides which one to use. If the forced argument was +given its task is simple, otherwise some work must be done. +First the list of possible registers is scanned, all free +registers noted and it is noted whether any of those +registers is already containing the initialization. If no +registers are available some fakestack token is stacked and +the process is repeated.

+ +

After that if an exact match was found, the list +of registers is reduced to one register matching exactly out +of every register class. Now lookahead is performed if +necessary and the register chosen. If an initialization was +given the corresponding move is performed, otherwise the +register is marked empty.

+ +

6.3.1.9. DO_LOUTPUT

+ +

This prints a string and an expression. Only done +on toplevel.

+ +

6.3.1.10. DO_ROUTPUT

+ +

Prints a string and a new line. Only on +toplevel.

+ +

6.3.1.11. DO_MOVE

+ +

Calls the move() function in the code generator +to implement the move() function in the table.

+ +

6.3.1.12. DO_ERASE

+ +

Marks the register that is its argument as +empty.

+ +

6.3.1.13. DO_TOKREPLACE

+ +

This is the token replacement part. It is also +called if there is no token replacement because it has some +other functions as well.

+ +

First the tokens that will be pushed on the +fakestack are computed and stored in a temporary array. Then +the tokens that were matched in this rule are popped and +their embedded registers have their reference count +decremented. After that the replacement tokens are +pushed.

+ +

Finally all registers allocated in this rule have +their reference count decremented. If they were not pushed +on the fakestack they will be available again in the next +code rule.

+ +

6.3.1.14. DO_EMREPLACE

+ +

Places replacement EM instructions back into the +instruction stream.

+ +

6.3.1.15. DO_COST

+ +

Accounts for cost as given in the code +rule.

+ +

6.3.1.16. DO_RETURN

+ +

Returns from this level of codegen(). Is used at +the end of coercions, move rules etc..

+ +

6.3.2. compute.c

+ +

This module computes the various expressions as +given in the enodes[] array. Nothing very special happens +here, it is just a recursive function computing leaves of +expressions and applying the operator.

+ +

6.3.3. equiv.c

+ +

In this module the tuples() function is +implemented. It is given the number of registers needed and +a list of register lists and it constructs a list of tuples +where the n’th register comes from the +n’th list. Before the list is constructed +however the dynamic register classes are computed. Two +registers are in the same dynamic class if they are in the +same static class and their contents is the +same.

+ +

After that the permute() recursive function is +called to generate the list of tuples. After construction a +generated tuple is added to the list if it is not already +pairwise in the same class or if the register relations are +not the same, i.e. if the first and second register share a +common subregister in one tuple and not in the other they +are considered different.

+ +

6.3.4. fillem.c

+ +

This is the routine that does the reading of EM +instructions and the handling of pseudos. The mach.c module +provided by the table writer is included at the end of this +module. The routine fillemlines() is called by nextem() at +toplevel to make sure there are enough instruction to match. +It fills the EM instruction buffer up to 5 places from the +end to keep room for EM replacement instructions, or up to a +pseudo.

+ +

The dopseudo() function performs the function of +the pseudo last encountered. If the pseudo is a rom +the corresponding label is saved with the contents of the +rom to be available to the code generator later. The +rest of the routines are small service routines for either +input or data output.

+ +

6.3.5. gencode.c

+ +

This module contains routines called by codegen() +to generate the real code to the codefile. The function +gencode() gets a string as argument and copies it to +codefile while processing certain embedded control +characters implementing the $2 and [1.reg] escapes. The +function genexpr() prints the expression given as argument. +It is used to implement the %( expr %) escape. The prtoken() +function interprets the tokenformat as given in the tokens[] +array.

+ +

6.3.6. glosym.c

+ +

This module maintains a list of global symbols +that have a rom pseudo associated. There are +functions to enter a symbol and to find a +symbol.

+ +

6.3.7. main.c

+ +

Main routine of the code generator. Processes +arguments and flags. Flags available are:

+ + + + + + +
+ +

-d

+
+ +

Sets debug mode if the code generator was not +compiled with the NDEBUG macro defined. Debug mode gives +very long output on stderr indicating all steps of the code +generation process including nesting of the codegen() +function.

+
+ + + + + + +
+ +

-pn

+
+ +

Sets the lookahead depth to n, the +p stands for ply, a well known word in chess playing +programs.

+
+ + + + + + +
+ +

-wn

+
+ +

Sets the weight percentage for size in the cost +function to n percent. Uses Euclides algorithm to +simplify rationals.

+
+ +

6.3.8. move.c

+ +

Function to implement the move() pseudo function +in the tables, register initialization and the setcc and +test pseudo functions. First tests are made to try to +prevent the move from really happening. The condition code +register is treated special here. After that, if there is an +after that, the move rule is found and the code +executed.

+ +

6.3.9. nextem.c

+ +

The entry point of this module is nextem(). It +hashes the next three EM instructions, and uses the low +order byte of the hash as an index into the array pathash[], +to find a chain of patterns in the array pattern[], that are +all tried for a match.

+ +

The function trypat() does most of the work +checking patterns. When a pattern is found to match all +instructions the operands of the instruction are placed into +the dollar[] array. Then the boolean expression is tried. If +it matches the function can return, leaving the operands +still in the dollar[] array, so later in the code rule they +can still be used.

+ +

6.3.10. reg.c

+ +

Collection of routines to handle registers. +Reference count routines are here, chrefcount() and +getrefcount(), plus routines to erase a single register or +all of them, erasereg() and cleanregs().

+ +

If NDEBUG hasn’t been defined, here is also +the routine that checks if the reference count kept with the +register information is in agreement with the number of +times it occurs on the fakestack.

+ +

6.3.11. salloc.c

+ +

Module for string allocation and garbage +collection. Contains entry points myalloc(), a routine +calling malloc() and checking whether room is left, +myfree(), just free(), popstr() a function called from +state.c to free all strings made since the last saved +status. Furthermore there is salloc() which has the size of +the string as parameter and returns a pointer to the +allocated space, while keeping a copy of the pointer for +garbage allocation purposes.

+ +

The function garbage_collect is called from +codegen() at toplevel every now and then, and checks all +places where strings may reside to mark strings as being in +use. Strings not in use are returned to the pool of free +space.

+ +

6.3.12. state.c

+ +

Set of routines called to save current status, +restore a previous saved state and to free the room occupied +by a saved state. A list of structs is kept here to save the +state. If this is not done, small allocates will take space +from the holes big enough for state saves, and as a result +every new state save will need a new struct. The code +generator runs out of room very rapidly under these +conditions.

+ +

6.3.13. subr.c

+ +

Random set of leftover routines.

+ +

6.3.13.1. match

+ +

Computes whether a certain token matches a +certain token expression. Just computes a bitnumber +according to the algorithm explained with machsets[], and +tests the bit and the boolean expression if it is +there.

+ +

6.3.13.2. instance,cinstance

+ +

These two functions compute a token from a +description. They differ very slight, cinstance() is used to +compute the result of a coercion in a certain context and +therefore has more arguments, which it uses instead of the +global information instance() works on.

+ +

6.3.13.3. eqtoken

+ +

eqtoken computes whether two tokens can be +considered identical. Used to check register contents during +moves mainly.

+ +

6.3.13.4. distance

+ +

This is the heuristic function that computes a +distance from the current fakestack contents to the token +pattern in the table. It likes exact matches most, then +matches where at least the sizes are correct and if the +sizes are not correct it likes too large sizes more than too +small, since splitting a token is easier than combining +one.

+ +

6.3.13.5. split

+ +

This function tries to find a splitting coercion +and executes it immediately when found. The fakestack is +shuffled thoroughly when this happens, so pieces below the +token that must be split are saved first.

+ +

6.3.13.6. docoerc

+ +

This function executes a coercion that was found. +The same shuffling is done, so the top of the stack is again +saved.

+ +

6.3.13.7. stackupto

+ +

This function gets a pointer into the fakestack +and must stack every token including the one pointed at up +to the bottom of the fakestack. The first stacking rule +possible is used, so rules using registers must come +first.

+ +

6.3.13.8. findcoerc

+ +

Looks for a one to one coercion, if found it +returns a pointer to it and leaves a list of possible +registers to use in the global variable curreglist. This is +used by codegen().

+ +

6.3.14. var.c

+ +

Global variables used by more than one module. +External definitions are in extern.h.

+
+ + diff --git a/src/olddocs/cg.pdf b/src/olddocs/cg.pdf new file mode 100644 index 0000000000000000000000000000000000000000..88610a120b795e79102a344944a1549c76ad5305 GIT binary patch literal 84329 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 YqN|yUD`}quE*oepjevl>h62t102@ea!~g&Q literal 0 HcmV?d00001 diff --git a/src/olddocs/crefman.html b/src/olddocs/crefman.html new file mode 100644 index 000000000..b7996e9d9 --- /dev/null +++ b/src/olddocs/crefman.html @@ -0,0 +1,1410 @@ + + + + + + +ACK/CEM Compiler + + + +

ACK/CEM Compiler

+1. C Language
+2.2 Identifiers
+2.3 Keywords
+asm
+enum
+entry , fortran
+2.4.1 Integer Constants
+2.4.3 Character Constants
+2.4.4 Floating Constants
+2.6 Hardware characteristics
+4 What’s in a name?
+char
+unsigned
+enum
+void
+Fundamental types
+7 Expressions
+7.2 Unary operators
+7.13 Conditional operator
+7.14 Assignment operators
+8.2 Type specifiers
+8.5 Structure and union declarations
+9.7 Switch statement
+10 External definitions
+10.1 External function definitions
+11.1 Lexical scope
+12 Compiler control lines
+12.1 Token replacement
+12.2 File inclusion
+12.3 Conditional compilation
+12.4 Line control
+14.2 Functions
+15 Constant expressions
+2. Compiler flags
+References
+Appendix A - Enumeration Type
+Appendix B: C grammar in LL(1) form
+ +
+ +

Reference Manual

+ + + + + +
+

Erik H. +Baalbergen
+Department of Mathematics and Computer Science
+Vrije Universiteit
+Amsterdam
+The Netherlands

+
+ +

1. C Language

+ +

This section discusses the extensions to and +deviations from the C language, as described in [1]. The +issues are numbered according to the reference +manual.

+ +

2.2 Identifiers

+ +

Upper and lower case letters are different. The +number of significant letters is 32 by default, but may be +set to another value using the −M option. The +identifier length should be set according to the rest of the +compilation programs.

+ +

2.3 Keywords

+ +

asm

+ +

The keyword asm is recognized. However, +the statement

+
     asm(string);
+
+ +

is skipped, while a warning is given.

+ +

enum

+ +

The enum keyword is recognized and +interpreted.

+ +

entry , fortran

+ +

The words entry and fortran are +reserved under the restricted option. The words are not +interpreted by the compiler.

+ +

2.4.1 Integer Constants

+ +

The type of an integer constant is the first of +the corresponding list in which its value can be +represented. Decimal: int, long, unsigned long; +octal or hexadecimal: int, unsigned, long, unsigned +long; suffixed by the letter L or l: long, unsigned +long.

+ +

2.4.3 Character Constants

+ +

A character constant is a sequence of 1 up to +sizeof(int) characters enclosed in single quotes. +The value of a character constant ’c +1 c +2 ...c +n ’ is d +n +M×d +n−1 ++...+M +n−1d 2 +M +n ×d +1 , where M is 1 + maximum +unsigned number representable in an unsigned char, +and d i is the signed +value (ASCII) of character c +i .

+ +

2.4.4 Floating Constants

+ +

The compiler does not support compile-time +floating point arithmetic.

+ +

2.6 Hardware characteristics

+ +

The compiler is capable of producing EM code for +machines with the following properties

+ + + + + + + +
+ +

+
+ +

a char is 8 bits

+
+
+ + + + + + + +
+ +

+
+ +

the size of int is equal to the word +size

+
+
+ + + + + + +
+ +

+
+ +

the size of short may not exceed the +size of int

+
+ + + + + + +
+ +

+
+ +

the size of int may not exceed the size +of long

+
+ + + + + + +
+ +

+
+ +

the size of pointers is equal to the size of +either short, int or +long

+
+ +

4 What’s in a name?

+ +

char

+ +

Objects of type char are taken to be +signed. The combination unsigned char is +legal.

+ +

unsigned

+ +

The type combinations unsigned char, +unsigned short and unsigned long are +supported.

+ +

enum

+ +

The data type enum is implemented as +described in Recent Changes to C (see appendix A). +Cem treats enumeration variables as if they were +int.

+ +

void

+ +

Type void is implemented. The type +specifies an empty set of values, which takes no storage +space.

+ +

Fundamental types

+ +

The names of the fundamental types can be +redefined by the user, using typedef.

+ +

7 Expressions

+ +

The order of evaluation of expressions depends on +the complexity of the subexpressions. In case of commutative +operations, the most complex subexpression is evaluated +first. Parameter lists are evaluated from right to +left.

+ +

7.2 Unary operators

+ +

The type of a sizeof expression is +unsigned int.

+ +

7.13 Conditional operator

+ +

Both the second and the third expression in a +conditional expression may include assignment operators. +They may be structs or unions.

+ +

7.14 Assignment operators

+ +

Structures may be assigned, passed as arguments +to functions, and returned by functions. The types of +operands taking part must be the same.

+ +

8.2 Type specifiers

+ +

The combinations unsigned char, +unsigned short and unsigned long are +implemented.

+ +

8.5 Structure and union declarations

+ +

Fields of any integral type, either signed or +unsigned, are supported, as long as the type fits in a word +on the target machine.

+ +

Fields are left adjusted by default; the first +field is put into the left part of a word, the next one on +the right side of the first one, etc. The -Vr +option in the call of the compiler causes fields to be right +adjusted within a machine word.

+ +

The tags of structs and unions occupy a different +name space from that of variables and that of member +names.

+ +

9.7 Switch statement

+ +

The type of expression in

+
     switch (expression) statement
+
+ +

must be integral. A warning is given under the +restricted option if the type is long.

+ +

10 External definitions

+ +

See [4] for a discussion on this complicated +issue.

+ +

10.1 External function definitions

+ +

Structures may be passed as arguments to +functions, and returned by functions.

+ +

11.1 Lexical scope

+ +

Typedef names may be redeclared like any other +variable name; the ice mentioned in §11.1 is walked +correctly.

+ +

12 Compiler control lines

+ +

Lines which do not occur within comment, and with +# as first character, are interpreted as compiler +control line. There may be an arbitrary number of spaces, +tabs and comments (collectively referred as white +space) following the #. Comments may contain +newline characters. Control lines with only white space +between the # and the line separator are +skipped.

+ +

The #include, #ifdef, +#ifndef, #undef, #else and +#endif control lines and line directives consist of +a fixed number of arguments. The list of arguments may be +followed an arbitrary sequence of characters, in which +comment is interpreted as such. (I.e., the text between +/* and */ is skipped, regardless of +newlines; note that commented-out lines beginning with +# are not considered to be control +lines.)

+ +

12.1 Token replacement

+ +

The replacement text of macros is taken to be a +string of characters, in which an identifier may stand for a +formal parameter, and in which comment is interpreted as +such. Comments and newline characters, preceeded by a +backslash, in the replacement text are replaced by a space +character.

+ +

The actual parameters of a macro are considered +tokens and are balanced with regard to (), +{} and []. This prevents the use of macros +like

+
     CTL([)
+
+ +

Formal parameters of a macro must have unique +names within the formal-parameter list of that +macro.

+ +

A message is given at the definition of a macro +if the macro has already been #defined, while the +number of formal parameters differ or the replacement texts +are not equal (apart from leading and trailing white +space).

+ +

Recursive use of macros is detected by the +compiler.

+ +

Standard #defined macros are

+
     __FILE__  name of current input file as string constant
+     __DATE__  curent date as string constant; e.g. "Tue Wed  2 14:45:23 1986"
+     __LINE__  current line number as an integer
+
+ +

No message is given if identifier is not +known in

+
     #undef identifier
+
+ +

12.2 File inclusion

+ +

A newline character is appended to each file +which is included.

+ +

12.3 Conditional compilation

+ +

The #if, #ifdef and +#ifndef control lines may be followed by an +arbitrary number of

+
     #elif constant-expression
+
+ +

control lines, before the corresponding +#else or #endif is encountered. The +construct

+
     #elif constant-expression
+     some text
+     #endif /* corresponding to #elif */
+
+ +

is equivalent to

+
     #else
+     #if constant-expression
+     some text
+     #endif /* corresponding to #if */
+     #endif /* corresponding to #else */
+
+ +

The constant-expression in #if +and #elif control lines may contain the +construction

+
     defined(identifier)
+
+ +

which is replaced by 1, if +identifier has been #defined, and by +0, if not.

+ +

Comments in skipped lines are interpreted as +such.

+ +

12.4 Line control

+ +

Line directives may occur in the following +forms:

+
     #line constant
+     #line constant "filename"
+     #constant
+     #constant "filename"
+
+ +

Note that filename is enclosed in double +quotes.

+ +

14.2 Functions

+ +

If a pointer to a function is called, the +function the pointer points to is called +instead.

+ +

15 Constant expressions

+ +

The compiler distinguishes the following types of +integral constant expressions

+ + + + + + + +
+ +

+
+ +

field-width specifier

+
+
+ + + + + + + +
+ +

+
+ +

case-entry specifier

+
+
+ + + + + + + +
+ +

+
+ +

array-size specifier

+
+
+ + + + + + + +
+ +

+
+ +

global variable initialization value

+
+
+ + + + + + + +
+ +

+
+ +

enum-value specifier

+
+
+ + + + + + + +
+ +

+
+ +

truth value in #if control +line

+
+
+ +

Constant integral expressions are compile-time +evaluated while an effort is made to report overflow. +Constant floating expressions are not compile-time +evaluated.

+ +

2. Compiler flags

+ + + + + + +
+ +

−C

+
+ +

Run the preprocessor stand-alone while +maintaining the comments. Line directives are produced +whenever needed.

+
+ + +

−Dname=string-of-characters

+ + + + + +
+

Define name as macro with +string-of-characters as replacement text.

+
+ +

−Dname

+ + + + + +
+

Equal to +−Dname=1.

+
+ + + + + + +
+ +

−E

+
+ +

Run the preprocessor stand alone, i.e., list the +sequence of input tokens and delete any comments. Line +directives are produced whenever needed.

+
+ +

−Ipath

+ + + + + +
+

Prepend path to the list of include +directories. To put the directories "include", +"sys/h" and "util/h" into the include +directory list in that order, the user has to +specify

+ +
     -Iinclude -Isys/h -Iutil/h
+
+ +

An empty path causes the standard include +directory (usually /usr/include) to be +forgotten.

+
+ + + + + +
+ +

−Mn

+
+
+ + + + + +
+

Set maximum significant identifier length to +n.

+
+ + + + + + +
+ +

−n

+
+ +

Suppress EM register messages. The user-declared +variables are not stored into registers on the target +machine.

+
+ + + + + + +
+ +

−p

+
+ +

Generate the EM fil and lin +instructions in order to enable an interpreter to keep track +of the current location in the source code.

+
+ + + + + + +
+ +

−P

+
+ +

Equivalent with −E, but without line +directives.

+
+ + + + + + +
+ +

−R

+
+ +

Interpret the input as restricted C (according to +the language as described in [1]).

+
+ +

−Tpath

+ + + + + +
+

Create temporary files, if necessary, in directory +path.

+
+ +

−Uname

+ + + + + +
+

Get rid of the compiler-predefined macro +name, i.e., consider

+ +
     #undef name
+
+ +

to appear in the beginning of the +file.

+
+ +

−Vcm.n, +−Vcm.ncm.n ...

+ + + + + +
+

Set the size and alignment requirements. The +letter c indicates the simple type, which is one of +s(short), i(int), l(long), +f(float), d(double) or p(pointer). If +c is S or U, then n is taken to +be the initial alignment of structs or unions, respectively. +The effective alignment of a struct or union is the least +common multiple of the initial struct/union alignment and +the alignments of its members. The m parameter can be +used to specify the length of the type (in bytes) and the +n parameter for the alignment of that type. Absence +of m or n causes the default value to be +retained. To specify that the bitfields should be right +adjusted instead of the default left adjustment, specify +r as c parameter.

+
+ + + + + + + +
+ +

−w

+
+ +

Suppress warning messages

+
+
+ + +

−−character

+ + + + + +
+

Set debug-flag character. This enables some +special features offered by a debug and develop version of +the compiler. Some particular flags may be recognized, +others may have surprising effects.

+
+ + + + + + + +
+ +

d

+
+ +

Generate a dependency graph, reflecting the +calling structure of functions. Lines of the +form

+
+ + + + + +
+
     DFA: calling-function: called-function
+
+ +

are generated whenever a function call is +encountered.

+
+ + + + + + + +
+ +

f

+
+ +

Dump whole identifier table, including macros and +reserved words.

+
+ + + + + + + + +
+ +

h

+
+ +

Supply hash-table statistics.

+
+
+ + + + + + + + +
+ +

i

+
+ +

Print names of included files.

+
+
+ + + + + + + +
+ +

m

+
+ +

Supply statistics concerning the memory +allocation.

+
+ + + + + + + + +
+ +

t

+
+ +

Dump table of identifiers.

+
+
+ + + + + + + +
+ +

u

+
+ +

Generate extra statistics concerning the +predefined types and identifiers. Works in combination with +f or t.

+
+ + + + + + + +
+ +

x

+
+ +

Print expression trees in human-readable +format.

+
+ +

References

+ + + + + + +
+ +

[1]

+
+ +

Brian W. Kernighan, Dennis M. Ritchie, The C +Programming Language

+
+ + + + + + +
+ +

[2]

+
+ +

L. Rosler, Draft Proposed Standard - +Programming Language C, ANSI X3J11 Language +Subcommittee

+
+ + + + + + +
+ +

[3]

+
+ +

Erik H. Baalbergen, Dick Grune, Maarten Waage, +The CEM Compiler, Informatica Manual IM-4, Dept. of +Mathematics and Computer Science, Vrije Universiteit, +Amsterdam, The Netherlands

+
+ + + + + + +
+ +

[4]

+
+ +

Erik H. Baalbergen, Modeling global +declarations in C, internal paper

+
+ +

Appendix A - Enumeration Type

+ +

The syntax is

+ + + + + +
+

enum-specifier:

+
+ + + + + +
+

enum { enum-list }
+enum
identifier { enum-list }
+enum
identifier

+
+ + + + + +
+

enum-list :

+
+ + + + + +
+

enumerator
+enum-list
, enumerator

+
+ + + + + +
+

enumerator :

+
+ + + + + +
+

identifier
+identifier
= constant-expression

+
+ +

The identifier has the same role as the structure tag in +a struct specification. It names a particular enumeration +type.

+ +

The identifiers in the enum-list are declared as +constants, and may appear whenever constants are required. +If no enumerators with = appear, then the values of +the constants begin at 0 and increase by 1 as the +declaration is read from left to right. An enumerator with += gives the associated identifier the value +indicated; subsequent identifiers continue the progression +from the assigned value.

+ +

Enumeration tags and constants must all be distinct, +and, unlike structure tags and members, are drawn from the +same set as ordinary identifiers.

+ +

Objects of a given enumeration type are regarded as +having a type distinct from objects of all other types.

+ +

Appendix B: C grammar in LL(1) form

+ +

The bold-faced and italicized tokens +represent terminal symbols.

+
external definitions
+program:  external-definition*
+external-definition:  ext-decl-specifiers [declarator [function  |  non-function]  |  ’;’]  |  asm-statement
+ext-decl-specifiers:  decl-specifiers?
+non-function:  initializer? [’,’ init-declarator]* ’;’
+function:  declaration* compound-statement
+
+declarations
+declaration:  decl-specifiers init-declarator-list? ’;’
+decl-specifiers:  other-specifier+ [single-type-specifier other-specifier*]?  |  single-type-specifier other-specifier*
+other-specifier:  auto  |  static  |  extern  |  typedef  |  register  |  short  |  long  |  unsigned
+type-specifier:  decl-specifiers
+single-type-specifier:  type-identifier  |  struct-or-union-specifier  |  enum-specifier
+init-declarator-list:  init-declarator [’,’ init-declarator]*
+init-declarator:  declarator initializer?
+declarator:  primary-declarator [’(’ formal-list ? ’)’  |  arrayer]*  |  ’*’ declarator
+primary-declarator:  identifier  |  ’(’ declarator ’)’
+arrayer:  ’[’ constant-expression? ’]’
+formal-list:  formal [’,’ formal]*
+formal:  identifier
+enum-specifier:  enum [enumerator-pack  |  identifier enumerator-pack?]
+enumerator-pack:  ’{’ enumerator [’,’ enumerator]* ’,’? ’}’
+enumerator:  identifier [’=’ constant-expression]?
+struct-or-union-specifier:  [ struct  |  union] [ struct-declaration-pack  |  identifier struct-declaration-pack?]
+struct-declaration-pack:  ’{’ struct-declaration+ ’}’
+struct-declaration:  type-specifier struct-declarator-list ’;’?
+struct-declarator-list:  struct-declarator [’,’ struct-declarator]*
+struct-declarator:  declarator bit-expression?  |  bit-expression
+bit-expression:  ’:’ constant-expression
+initializer:  ’=’? initial-value
+cast:  ’(’ type-specifier abstract-declarator ’)’
+abstract-declarator:  primary-abstract-declarator [’(’ ’)’  |  arrayer]*  |  ’*’ abstract-declarator
+primary-abstract-declarator:  [’(’ abstract-declarator ’)’]?
+
+statements
+statement:
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

expression-statement

+
+
+ +

| label ’:’ statement

+
+
+ +

| compound-statement

+
+
+ +

| if-statement

+
+
+ +

| while-statement

+
+
+ +

| do-statement

+
+
+ +

| for-statement

+
+
+ +

| switch-statement

+
+
+ +

| case-statement

+
+
+ +

| default-statement

+
+
+ +

| break-statement

+
+
+ +

| continue-statement

+
+
+ +

| return-statement

+
+
+ +

| jump

+
+
+ +

| ’;

+
+
+ +

| asm-statement

+
+
+ +

;

+
+
+ +

expression-statement: expression +’;
+label: identifier
+if-statement: if(’ expression +’)’ statement [else +statement]?
+while-statement: while(’ +expression ’)’ statement
+do-statement: do statement while +’(’ expression ’)’ +’;
+for-statement: for(’ expression? +’;’ expression? ’;’ +expression? ’)’ statement
+switch-statement: switch(’ +expression ’)’ statement
+case-statement: case constant-expression +’:’ statement
+default-statement: default:’ +statement
+break-statement: break;
+continue-statement: continue +’;
+return-statement: return expression? +’;
+jump: goto identifier ’;
+compound-statement: ’{’ declaration* +statement* ’}
+asm-statement: asm(’ +string)’ +’;

+ +

expressions
+initial-value: assignment-expression | +initial-value-pack
+initial-value-pack: ’{’ +initial-value-list ’}
+initial-value-list: initial-value [’,’ +initial-value]* ’,’?
+primary: identifier | constant | string | +’(’ expression ’)
+secundary: primary [index-pack | parameter-pack | +selection]*
+index-pack: ’[’ expression +’]
+parameter-pack: ’(’ parameter-list? +’)
+selection: [’.’ | +’−>’] identifier
+parameter-list: assignment-expression +[’,’ assignment-expression]*
+postfixed: secundary postop?
+unary: cast unary | postfixed | unop unary | size-of
+size-of: sizeof [cast | unary]
+binary-expression: unary [binop binary-expression]*
+conditional-expression: binary-expression +[’?’ expression ’:’ +assignment-expression]?
+assignment-expression: conditional-expression [asgnop +assignment-expression]?
+expression: assignment-expression [’,’ +assignment-expression]*
+unop: ’*’ | ’&’ | +’’ | ’!’ | +’~ ’ | ’++’ | +’−−
+postop: ’++’ | +’−−
+multop: ’*’ | ’/’ | +’%
+addop: ’+’ | +’
+shiftop: ’<<’ | +’>>
+relop: ’<’ | ’>’ +| ’<=’ | +’>=
+eqop: ’==’ | ’!=
+arithop: multop | addop | shiftop | +’&’ | ’^ ’ | +’|
+binop: arithop | relop | eqop | +’&&’ | +’||
+asgnop: ’=’ | ’+’ +’=’ | ’’ +’=’ | ’*’ +’=’ | ’/’ +’=’ | ’%’ +’=

+ + + + + + + + + + + +
+ +

| ’<<’ ’=’ | +’>>’ ’=’ | +’&’ ’=’ | +’^ ’ ’=’ | +’|’ ’=

+
+ +

| ’+=’ | +’−=’ | ’*=’ | +’/=’ | ’%=

+
+ +

| ’<<=’ | +’>>=’ | ’&=’ +| ’^=’ | ’|=

+
+ +

constant: integer | floating
+constant-expression: assignment-expression
+identifier: identifier | type-identifier

+
+ + diff --git a/src/olddocs/crefman.pdf b/src/olddocs/crefman.pdf new file mode 100644 index 0000000000000000000000000000000000000000..87407d4f047e28ae472fedc3d069f50f54e4f742 GIT binary patch literal 54125 zcma&NQ;=v)wsu{%ZQHhO+qP}n+GSVmvTfV8ZJU30$2sTwBi@_7S}W#d&K3ELoNFYh zf`}L`BOMbI>F8B_AruDz1A)Df6%-E-y^N`yxr+q>=f5gS^kSAaE~ZWd^kO!KE~X-; z#`Y$re0)&OE>5O~woo3~vWe4n0}Kcuw|-H)VZu7UdqaFce=D>U%a^YIUi5s18KxE6Y{oJ@x#rD64kliKZHhzNJgMd}nLk zE>t=t@m88!SPk>L{q3Cr?`tqNL`sji@a3rOtpySEV+C00UL+X}yA zB^_%o^Zj8kIeoC95@m()I+*eDt}0re<6zzQ#{1qr2t-Ae)w`&Jci;`_NPJT}lmA)Z zf4%*?DgSQ8zn{!3%uxSRV*KCQ|7#c%!++DUY7JTEtr5iT+uHQ3Iz;yvOqia+WEpDH zb)yQST4zFEfWURqD$u$i15w6a!FS5`WAKw{^Z-yv(Q>K#J|ytP?~c#sOT6vm1SX^l z{MSw!wbx4TfvMfE+6Ka1d-bdYGRXDR%3D9f7zVkP&OhBl5b;D<;n~GBMVfLg(^MYb z?K?m9P|u*LduCzqt;PHRManFJ;A6c?;oY9XdHX2p@?QnjH+&J|#3AU8u zs`I%~gCDQg@*A$jiv6xqk1?S!Hf;=UyU)+!55%Oq=)?Ofm@A6?{z&sI?l-SaA%7Mr zCY=4}E_w(3uCDAgK-M&2R5IT8z&&X`3KFjcI&cMG-5V&wI#h}+sFCL^6L{a7t5~gU zX(e+2?O?vTYkw1tT3cS$jADtT%H^j^IoWb$*Su8W8}O#ODN2mYo@|TunyIkT#%XeA zTHKSqRDsO>0Yr|0OpF6COECp(3Pt>9DDQZxfW#sxaZgj6!S{scZ{$O#w`s()OEPM( zSiuk!Cz>LyJ!()D8*naaNL8yRl9iMY1qhv{5B44jv_qM{%9+nAi_7UJl`zfm4&Sqyqst6b^z= zIZcIP+MjN0A~FXnc3Pj)8UTvA(Nky-j$RNcx2rWFXo%pW77g17S{tEAlb5I3_+TX_ zi)0-sEK=?mhb?Zlyn6oZ4H-!9SZXE78+Q%wlZ;DdgzQT0Uh%cl2&Fh4MZMQng2H2Z zQOx*qDP7W^#bvS@a~X*lCwlI|sVIDE5rSU(wGm&`aN|-P)bR-en|}B^gd7l-8amCC zE<|MQ({R3Q_t0ZC7f-&(ukJ~S__<*Qtnl)!#SmlPmFvLG1;2Nh4q!2wAwKiCJ%khAgAns%O}(I-r1ynUG;_0;js;*v30lSK8SK`P6hUGSCI9wE_`%3|2xZW5wZf%7 zgv6g`ICz3x8qJZW^&}{i{D@1Rh1# zjLt+VkoW4)1im5-a{x$uSlLMXY#l%{c&KRAPoovQ3vy(k_0z7T&9)rd#Q z=~k_{D_reT)d4)otpq<21INwE(AT8%ij-(;gZ$uu#UHfZEmp9#NA)h4>Z*+M(^Y0u zVSU^Ho{x?(a{U7Yx}dD2c9Iun$kGbSm&aemiJseT-_b5Ysu#?fG&B=lz>!cx-s1iY z#9_5}TIhwBD^WK{=In!)A#9Z4V}3#gRo_@zRAXTzcJxql7VX4QR3b-xY}tU) z-R{yuTgn8PDSjxIT+$*_w9P3CT?P6|-UuF47Ly&f29p~hBGNb|UOf$(ov_xhOkbz#X3=FYMXu zBhMJP8dd7Rc_0%@vA`3X;O0ECmC*~~*f%x?;eS(-U+-z$-l>yEC$1=CK!nzwGnKMX zPv`6ra}mh&S%>3@As?2^;glOg1&vh#ZSL@=7{H|0OLbQJ&pVw$Gy*eLy+ii;@`7U$ zEp9N(k6ln8GpEn@l2g)Y&1_KR@HS2n4}Ry*ZgeN(O8xmwYoQZp>?39Vbi;;WQb>>C zda}oWX1hMW`W%S7v#!gJk>-0<)wri-FQqWw1kPeQp}gs*yfu z#6b3^zWmWIn%j%e8XixL@rw`e8)^OMj;s-%V#Ir#R;qRz0v%q7*~0JPL8^YW%+&R% zhE`2e6w|}TOeKnaz5`p;;Tqg!$(s&)sTmf^&9YTkSMJd;Eeqns*=nt%k247y?k=oG z!AyAmiV!#cfCdj{@QHV8I$EP*`l(T|q&96sgvI@tZ#jG@U9r4THwJ))y77sm0Uowj zHdk44)Gmm<4VQieZ=)fo=sRs;!)nrP5mIv zFqjU!do0eyLV$NGslWDl-Y-B;J^%AR5aK^@@Nb4-VqjwVUx;90`ya6Q|3L)%e+LoL z&YNrqJ(ucxXcfkUAa8uGNb+2^r8!OIT)Z5-0wgw!sQ6$K{7%=b{2iSH0!k@YT+EpG zILUi_J=@v zre^?f-b~`we0*jxVCBAD=u$^HDt~V#bhN|i+GNib8HlkN?0M~8la6GUQ^Ct6$|dQv z>bWHrbduFrMf1|0VLe}|vnfg1?NG`^dg!go$9>nYC0j>J!-X49=#0Jq_-y}PNR@}5 ztt0$|i6`6N>NAqveE^@b4F$~8G_@ZkOc4R&1()yBiex3}u4j;lqbo`cI^6ul?!F5l zBbG@zdtg4{+QN84s?m_-}jsLsZ|VR^vQP56omK9N`LB6 zoGb(46IG2AS7OIaoD<#=rZY7Rat>px$}l}CWicE*?VO$SPeh(0uq~na~pG@OQyP)6QLB07s%(BJD5ba~^Gmy}lkzPmCS_lFRx6ejhds zAjV_f8<->|0rr^d82^_wQKAV;FZy<61}NI13r#$o;gWAHT61~OJIfvA>{V-F(k^|_ z<`7}5A(`jfk;<&+{`XDt6nE^JTYR++Ml>+T3y@daLr79F@^7CC+!Tp5%{CmhyYggE z4SV7(H_+Cf=Cg?sKFey3!m0g*)xpxEnA4>^cJp%un-+N=Wl94RjOW4=0D2bYDWTzPq@+DU%^= zgu&y|I0JlKJr7)@pfOZH1b-|Uoxr~U{!%K6Sxhx|iS=YpVxSGAcUbZ7$fKYv3?-JR zNRQpqdMDv#P>+nmFeVtRi}1V4YOd|epnvX1gtf#g>+r#5pC-#0;9Tr!EnxDO6sK># zuCeR~Y&pskUvOu}j2&qPHVT!6CRz=jPMqlO{cYN59mk04cn+EgMEDQn+`_t1feg;T>HV4AET3L#j+ii1^%k+yw- z9GS$%RGJX>?up#uP50};V=uk{#|P+d)#*GjZ*7Co;v&k_nU`gUubx#VtU~Vz^W8=; zZ!$y>VSyPNliZ%fp2g^U!dGhzI!!g85G;j>hLbWr=dSk1p0#&`A8CUM**abvL!5De63qqLR8VU?%u`<_t4>7*(V#8rXcrI6&j?* z*vBr#-_1Zi64Zkv&51ovfm8a{*ff2>kWpLdf}-$Xn2MQa$Xz-8;OAI4FQ+at5U)NY zgC33uYbFyw^xhCC8%Yapa-!fN=H4&E0p_>4mQ|n1i2?Y7XGg!?6SBGQz?j8U9!c;% zwVJ_5?mu-ZOqBzq{=1(?mAMT2sE5AuMfa;@?ysdD=w0gim3&% zRUmhxVjt2*;%vr72ms-q0-#z_z#ZL0~QEnhUafT~3{x+9VFLbRT7%`2rV3yY1@Zkv(~i z@j$7IoB+|VzFVZ%Jf_3eNv>Cz#>es`+b{etO6+3{jJZm}@|}Y<9%{*H3SyUMD`{`- z-6_BC2h!C)}2X{MAX4a132k)Uo`OyR%rpRk{9c_kL2%9|q)w2T|^-tfL= zJ6}>mdkzVGnER`ZF0U@Dqn(@Ih`XBjZ`bVnGE1G0yY(^|6O%#p7iAxtPDLl###b63 z+plcyTH2V5+KHent*pJ9)(>^BxX+ zJYRY)`f)apUFDmT_bKEzr$6kwNR@n%kRBo$nF-M?zI1|7kAbRvVA`hX-1@ z5&T0b{rRXJ(|<*}=V@?Ej{&g~+>I-qqi^k;-D@WKN*vcJn-c0Ah5f^{a%D{cgUs|U z1hCrZ1j4H`i$e0L;U7dckTt4WbKisLU0_Y(?-4b@RXab zj_Xe$&AwtL&BH6i*4fl%)4PT4G`>{SOVcu@|C|Dz3n5`f4clE)#SA&{U3L#ZLZCyU z8Qi`TyI|Lm=t;iXp0BKLL?K>8%?tP;tP<78A~Kf)>-t z%#TH6be;Z%0ZWOo@7U`6KByXZMke#K1#CT#2+!)Z-Ru*D6m9*sw>$$TMF$1XPtZHJ zqy$h7900GPUk~utRdnkZ%9VfKikAkHK(;N~L4c;K7=Ro|TE^}my&}yPB0B|_=jYi{ zrJImB5rnqbpj2;T!(su53ti#67^PE|uaVb8s6m%k#XQG!Fa!dXQCe9&DNYrBP_ug@ zu5As9>A{Qn(^)%KjQV$~#txW#oZ_&^hfE~+3b zDxY0!)SLQNwWsMNU>{O_`~{@A?V5rsxhbL2np3;p`K)uG8v#*x0V@>;rA2xHntOsC z=3u}y>oa=gcRSq#1sJg223))%P-7*t1|YZp=TwI!I46}NO>2I4AA5Hkz~l4|HeicS zIlJXj6IiX10V1=M*W^!8FffCKGy*Cky5T{aAe%k`vY03#eWnSr6Sbb6U2w&vw`%P4 zBi2Ch6l#B^&KcD94+sS0OMj*2YTSm53vAGG1-l~h0}Ye-hlKF@VFB3nHP?z;(MmzC zW+-sUxeplClZ|2~P-0Bix>qa3RFZh&T`_=w)pIS}T>vUzo(^)@P)ZWbVf|_cHYd1r z`pAo?{aXz`U^Cc(+zcy_QQ~0GAG*vwK#Ih;@*-p6qDrP|0GMcetW>Vh5hyfYq>r85 zRb%>3^OfBAVxQtIl9I9<#U1SZCPFL%Y}Hj3i5*hY5s+7oZi4AMR#UdwK5muH)l;pA zL9!WUywK#>kajjmkqfcPJF;v^B>D*ixw5SuHXg1t`8LCQb{H zAb&(|T<}Y63Gu~Urx=rdO7FeZ6sNPwK@WHW-&Vgv}eRd^gwZnmASSm-OOR0e8`)4+4DODaHdNe zdn@}Fv4yz_`Wc?YI5iLeps2Dhw%SXGx(>3!tn9`M*W8^P(>rDy%fL4ayLm7#5g^CL zV+sjARUnpNqNX$lh?+{~H~?pCO8+4C(xpOTwTA6mgb-(ik(iOsC~0(TSpyXukOE~n zpXT@Es%o!apg7bIFHwu}jN(ntzceQG60)*(m_VkgxC;IZwsQqw??HM%B|D>k#Zud0 ztt4WpU8vfQ_r4rt*rCa8?fy0i2&5Ev&XiR6Zzr2&cz-W`w(^bC(6Vk})S+<7PfP{> zb-x+k0|Yu@_+f}N7(aw0MTD2$Tz%zkvhOHZ8nUd*Uw3}X7}CjTnGsXCX2a$313vOT z_B|Eew(6{X_C+L543_cD)`RxZ5=-t21{)Vt0a5bsB^iHOZV8!s7w*`&A6?Db@4@ak za4d7wOd~q0@+4|%mGQ=Pwd%X*Q1@EAP5__3-?%s#^fy&7I`LuJuC4m8BPfe~h%PTw zxnq##`EvD52sulZyf~tC+Xbel0xSp+_7SvID$nn>zFro}z0Bw?IsNNMT{77BD~@5a zkY4m)Cpm`!AapjFV{IonwByjyiCD%H)!%*@ zC)D7r>5GZQiDS2AJJk#V5GnxxIM&mwkG-CYW1I=LTBDIflZzCScJC7fY#=`yeP>y*vjYRdH78|j!k2l<{~qkEp;NRbrET`x^z z=UVKIxtW!-w(A~$cqK;Tsw---fhZK0X~%Lh--6D65)Zts$I7hHku@lrB*s0_3_05j(%?vPtrpWmUzKZ&(Ocz^b}>!8 zO;hRZN2}zl&RMd}0GZ)Sr@)1@hp+A?0ZK7l$L*OZES{f(Y@Fsp;dlmXu)8&Es($Mg zKJ~||zU1_4-akO|KLGikxeY5j)Bk}c%RfPr^}hklYV}FGEjEl9H+ska{=KvrXg?#_3 zTcb`74ITocm91K%Xg^(AI=%#r+Nzc49~wcHqV!^lY2oZ+i)LL9zax6}UmBmJVXskm zZ&O;9@HY$dI(^g0ouCiUkzTmu2~${4~hI%$)Lrpo6Bu%c_)$;i^(W8 z2^C2dr(x(}X_wcKrLZC)8+X;|O;a3ikN4M$*HHYw9Ak;{Mq8ivrAD&j8%R0l?sR+# zR>V<4I78podgH6AgOfi)2+k;m?tLA7T6~?u^2j)&cY04+?|vyhTgE7 znF$2!wDu?!nYyKOtC_@Pi7K|sTfz#lAf?M+q-{gwOMH);m&?qvea{~+N#(}qzd;;5 zqm7r6>H7&9pXilwMZF&(Bpoc02JRG?lYiEm&zPd_PhAK@ghG6Pe^9WItpWp%jYf)Xvspn;c^4g>h zA(iyl*_@Yfh!N$si@qGE;QJG;k(FzV2DQNQZCqd0?MC}QkthQ>sM$)I@!3(oKs!gU z*M^;Uje`i4^2BDo5xNm&H7W11m(fmS);Z)r>wv`4i?Zbu^s3{{1KSv8XTumu#~{Ey z>*<8+&-)Pjn8Rn0v&Dlworn0GUjl&U%hZ;@K#??VA-5fy&|J4)<>b8sAXj!&D@?DG zgQGO?&&xqh-`AA8YEEcDMR@saBKl9IErtmQmOdM-(+n#NPXSw84nEPrMtv>d+&^;< zPxqd+nzoQw0JLvhXafUI)(IgaA_oa-N%Pd%F_Wk_gslULh-9YmU9JR*B8jZQx9FE1hf4*|nC4U2MU?wqvA|JPUJ!P332%_ZzGX4|em;3q|Ci zcX2L`+;FsrzAcTMfwt+P(m4`s{Y&eEYWb!Rm7@D&$5WMepQb?~!MI z@je+=^K{)L^47VOG1{NZN4Ajo)*8x58T4TsFt#}zx637xZkxX%8Lyln&IiY@)B_iY zA(S6sfIA9}YhwW99XJvKGO(=(3nmM6rRKN$1wQBck00{4m1PMIQLxVmyR2cVCr(dR zDp`#z$YBbblo*>@%rb$Y)mFQBZnc-IFa5Ja-)Woo9k6`hi-U zJII=T5$ncAN@d0}BcUeBL^pA6yZ;*M-Tv|!6v|AHbv)!XDx zrF}n6CDr3(IX0e@Tx3;NZke_}UV6&$TbcQKDV^R$KS!uXnx@C}xOIK(M?bYh2$6x( zl;KTuGrMepn6gO44jkmUjwG%>FRog>#a!H%!dNEnvd^qeXo@0*&R6EG@*2vwm)vxD z0P;&+APC0=zay7>0OdE*$+C#D3KtN3xS z(YleJ4n#iYt{OkpKgmIw1g*?kf-E@LUdq)l3~IHHb)!LsG^J^zcIuZ0_JVU^3P=sgyXSpfA#?Co&{&6k}K8_XDdw_q9T2X|3aaITbjU_r{Uhfed`Q_Ddk3njm zBBn_!DP#-KlhUcEr|sK*w0CR2H8n3Tlo={@_1R9mn2Wr1%khLtw+=7jQSdU^a@!WS zULdlv*LxS`ft$vk|0Qn8GwF=gV1$S(J^w2pm(+pj!OF@-MU~FjFe(%fWh#@wVR~T6 z!$MaBy&nO}9@6j2tKOBGR0Kj4JTg`9F~_r@@2sZ} zp@KF?q}}<+{Vir9fUY^x6j8(Dz>Y;ID=YOo%n6l|$a=YhT?$z9`dO{Np1qY8{M}wf zb|i}7Q6z>`DUuGZ!I=9V=YP{y1U-jZLZ6PgIohBQ@I4l8bvCZde68E*oTU_KBqip2CMc*id@Fhcnjgj>oI!wS=1MbLwC zrl68HKf}*0)xa=ep-e;n`g%DCE?J{s?Kz69q3~8hn6q1W5`+BxV2ppdtCHiq^$d0t zbN2;bG@wm@8>iB9l00y8;Wc1MB-JWqh$VVzI2Sz^U-7L$uAV#08fz(Zk4-SCV{+qL;PP_yew$QSX<=>KLG$wb#9@A z2*Ix)7!vJ-HMnfkP!}ewN{Hr|b{Oa7nPx|Ceij{Yh%^;M8Oz*D1STv?%B)-*^zfqt zuINIY9;V7{El9H3rWSSgqvbcAo}Jz#&1b9JOtfB!ZkaxBzl{XmCLGfi>zl?731Xz~ zq0lfbWbuk|At_|!%FfVm(*fMjebof+cpn090@x=BwN_uXohF_s_@Zp7!h}iTA8zC5 zU%4I7ybC-z3=m(o@E*{8PMlJ6@+3y&J|Er$0_2gEijeZ63N^*?V+DPOiD344fZCOA zk@V3f2GF9+_xQcw%V$W{I*d|n22K%l7LaF&Ly7VwhbBGmTQ z%hE{qQvuw_LT%-v-ClP`7EKN1)3%~~&nPwX%0uA1xllh_xW~Yl=^AT3^`xy80qp)6 z$;nRKvKCRNN|H%SM^Q;9*hozRxM~@9c`O33M;KNF|Md7I)}+?mqCe$oumhdK7Xw|u zxhdR=?tV!FiJ}*_E>b%UeUH|9&H0(l8K@3Q@$Ar`xQK3aOo9()p)-gwEIg7JMHabA zTuFM*VdW{$Nhd4}Vct$qPlo_+xoD-KZOJ_~F9H|Nv)KqUhpMeZq1m8ay?{~RcY2ni zo42@*m{vsW?_lSN`GUF*|Si;zvSev8i5nGFUj0K)s0T=Mjtddgj1c?|#4gu~? zAwvm7C&hq>*-OFkLfPp)LW_?>e~%nO!yHH!71Z!S+ob$>;DM18S$PexsUMWnT73V8 zEsBYnT%8smb#?q?M*FuN81?JO052PB^~mtAh9mUXsEN!V<(gV7Hyz?o3e97|%<$Eq zqz5-5Z67vvube!(uu`=L=h!}=QzwO5k9PH*q`Q+PbYwt85ug7hDEosUvkSmISs{cp z1}M%x*|0fHp?GgMJ!)lvXIh{5c~=^~Su0}cEQeTKN$2XPpg$Si#SWZ?8dNh6Pnz(} zT!GhRE6qg*f!m|i+PS7Q=6zc;A2H3d6drov%FOsZK#G=Vc!LhB^LOxlIgzGecm4AB zjhy0*m%)fgSb5Wk$+@;qbf_MUS*F?yVbQdT=*e&MAhzUjN>}-z^8`vbfu$WtfF)Bu z8zC6wc-AKV*X+is$JGwE*TIy3a(dreaCYJ_F)cVScyu|e{K{)}>l;hqK(E=eKvw!H@3S-e&d+Sqk-1R#0YOfQ?rJnUd{O&^Sy- zu>ulGMHsFaxP(k)foUs5GtADal>lQG)f`P?pmf}1E(wPbp&yB7RLtR$rZsZS#WmQ? z5W~Qkqfl6OR(#4y{V!UT=Fg9|XRY05Yx%quoTiYSLHk2ynN$%b30#)Cm~ zOhb8&LJ!ZMLz)te)D4EC6UvGKVrmf|)v84EVg_t-%!x?@RT3-x86xbOd4d+ES1Zmk zHGK@SwKR&4xU^L1iZDbND&D=2p5JME@Hj}HRu{BaDs4V-;M_{q)EafJd<}2Hgut0x zVmIgPca)h8iR>=9k+Q2#d@1G+h3){Lo3bGLWC)Hj8p;Z_$TN785qG}#rZaGY(i8{r zs`@+VS!2Yo%}gq8XJK+>W$H)6OAQbnNx}Yc83kpuXm=gxU7^gi&9ELiIGi&#E0BrH z;{4A_kUn*Jv_B|Q)an&`kq*<|VIO>aIyZ@cm?uE0K?6wJnVDo@m=)bgyT+}!C?FIP zy`x-4CPmzFzzdZI7nwjJVS2&EvPA7IU8$fieqfFW0jj4DSXE)uGpddp3P8)+pCMFf zd+hQQ(Ktr!wq35_)not;;i*(=k-(qBn8=(hbBN0!4GcnM26_Kaj*I6l%=LbgHk1`j z_aR5Lj%PgDXFRd}<;lOTaAe{s=|IYWY-H2v3w4{Nsk$=&k}P}CoQRJESirgE44DQaj^d{ z+p;kIW7xsM{ND^aa?~fCHvcv3xTLP5<|Qr!dAp&DTx6-vk)&-tj~RuI2q7UM84D;z ze#K6bALoAoBA}3JNy>;rOC5{;=I*gaZ=dRdv?h(Wd>&Cr>*-7}z>Su7W>TpxpG+ zbf?xOPP%K+%Q7mN8&?pP^ZVy|<`@Mj;?GZSl@WGldMS9pxyQud+W9HwPO+A+g z>6UVj@Q#v`GHXvljnJ0t=is2y>6f69om6VQ!f9Zm5+*DG#)xqwzYLI)Ad7VC0Gl=M z9~aaP)eKA3<)*V87OFnOgxJ%z3lU=3BB4IsxX1GG6O~5M@7$uoa&1LH=)Qj`T0nKK zq_roc;Nx!^t7}Zl(MDzILIL98Rxbf;IFx!U+>}4Z$4IPu`s?i8ZXp z;XSy8!yK5r2KEaSW&Qi`tWSQA<<$( ze7-p#x~K_ZDW@WBi!SP6q;xSQLy{pX#$>)G_4B@&QW+6>9Y|UMebEOuWOI}5`ihnD z`@(|Z^>W+NxlWQJEXe7w!9=e|PX3%N;`QJKW+7&Wiyz@?dx_|u?Yzt_51nOX*k=V> zk}w6UvIJi}pY17^6A=y*<^*>00>4zdb1u;yZK&Wt3Ur|Bw+VIUu9G4)l!Yl3sWl3* z=441>XxH3S%gl`}{?Q9y%EXVQ%FD;gS+w(ybE_<{rRGK0-eJEFq^d&4g;9Pj>myD( z$ewJK8pD%R(^gt{BG{)Vkl1zC{3Vzaw#r9t*puSQUG1_%q0m%i1zimAt#B>jkw_|n8v=i=&IN+IvV|$5u-=coWLDJ60`6Vhy{1%?1rIteinK2ie zH6rjoIl9+nR-Y!}QTP!CKeHI$h8X{l%nb%H7d$#z|0MbNmVD2@T7vwf95>FM=W(~k zc6CCL$ZB`w2_+1<=fv?{dL$WP8GqC~&y>`6 zRKuEU{;2=CXBY;2u(T@L@nXlhnSo9+l3;rlK=N?!kXS>hm1$25d`;adIF(}XyiW$B zD#c2m7(J)(9>VMyJd1~9Jab8zje1}qcJn4nJ4=#=jB<&ck3Ea--kVew47Hw4G=PQi z3f!S0kKJ%jH@IMF<=ioJ@|hc^OoJ)i7i759Vt$Mo-|jonL!R!QH*?oOJAuLjbAX)! zvsfYV3a^2=GlU8j%+cFn$;r0dxz454ifnwLll`;Dl6UjOQ<)VT@-Ez;C8d(s`} zr!Vdj(nl~Gq`X&;V*OrEqvY233Cr`dgIe>&S&w(`{P zt*&Abh}7oeg6o~?$~PKd5F2_*!48P&L|v{Qx*=1=9yt;5pYzK!qwqGklsD3=o3B<&`#jc=3zF z1gd0syQT;wx;Qmhz=A^Z&!^-BAmIsijacY9gIS;fNd_)dq9IjI0mOr*XvYeIi+n&m zxhSW8yVQd-VdA`k4<)e8pNGDZcSW)sGB#rgs?dn?*j&9Cc~E>=SxF+-ap3T?R2x@eraKx&$VJUXKl8V)O951v8&J)H*mN zR#a9E662wHC1lta5wI9U{VA^atSz zzIJw#!r@gr2^~JQQ8dRpvD0{b(Z!OEUw%Qw2Ho)_wO#I7lnBwI8&zj4{Ef|w++aZW zyMI1v$~_lFn_7EWC^Vx7=1`Wi^xfZLz9u~4z~#xy;ew7myC1gIEzax9zJ;xTIiwW_ z%QF7luk!gy#&hRd6ERoIesXSesrCW*gLaYw~^A<02e4=q1qD z9fvo5_e;hhEjF(Y9`>upG0z{6D`D2|pF7n5nPUu`|96{<^`GV# z>wjgAHET>KZL-1id{TO7dn(rxJ>SZWEV_7|A1%b$>)|&wxD}10;!4`NBfr8v%z=vD zix=BaFS@+c86yHf?hS$`_P4f{h_#*#4@Orgoe!qc3uBR<8#!MoK zAV*2Y94w7WMyY*f9FpDmJfBWIGr-PMnM)O`J5k=JH(iQbH0N;g<7X6)7DEgdz@x37 z8Y|jPqCeU7tL<}Z!xP~=P4@CoR|AZu`0H`Iw(Od-Qc*wsdPf6Y8qt_ENYQ)@2!$v+ z-ZV_Rnd&P69yL>Kyo!++5M=*Z;BR)3UOpaS3iPt{-RU5N(gAKW7?}2j zIo~|<1=F$PhVPTQ)+wbZ%cK%Z`;n#rHlT5i0m6MEJ@>dYG?Ry%O`PbiFRdk5t;Su= zoaS(>>O48snWYT7R(?q2>jA(x zL4w-IA9C?uMhD9`;G7FrA=1K*Tplv3M>sNj%t}D0f&q*{>(L^bmEnXLOLGrzCQ5XL zBx006SBl5khe3kU(-|2Zoh|qUx`Ta?nAld5NdE5RyDF>Ab`IF;$A^AZsYsp~C&5UI zMQz)s2D~!@=TObT--9MPM$>>Pbw&qW4xX10QEJ;6ibXFMk2$zm!He~k(RaJfi1mEJ zaKgZw+EI;g#MM$?kXSvG$k(H9ucd)nYV%}J-gsy&np7oXY%8UgL3e*CfySEmp~ZLI zAlDfXn=%ZIoM0oK9GID+HsEH|TN#^Jt=icg$eip(#Xb z4azFvylGu+J3*5WAXqu+h}02`I~Q?3ZUp zpX%DeG|nXwS*!Y>?Z8JV|MV@m`Icj_bY2shj8IWxe++~( zo)oa+=n^o~6{S`#rCHUQFzV4%9Fn1a1FkkbN$Ps6EDP#u`Y}FWU9hjQ1;qnj*?Gfx z&^SH24@d!x^@auCmS`3mS2ZHT`$f{-F;cpc{_t&08w8oSU0l^uC;_&t+|C)^#MhVw zURc<-;~*O@5Z;MFC3(}YAG#Y&0Zs0fa&&rBV+D2Z;DEB%o&YUt5u|6dk|x`xYS`>it% zbWGInhsQ(9WB07&k)+e~&L~S}us*Uh-})0-fHs^ld}+0*D{G?LS}$cjVoE?=Azmv; zNIY4#A}R&_R!d{<08C+*xM5P8-CV|+IP~l+B)7&nz2GLx&yV^Yto$UIbz-!(p4Q`^ zVSRbSM;mvlx1KqMh-a2$a~SE98kNpNIUJl#>sy)N)2J)NxkT7GMy`$tNuv!3NSSMG zUn>)OS5r*QD}ZD$o4#}v5#(TJ^57y(EIG^HeWQnNJCb#b{G5A&b_W_*xtTxdbXV&U z3i{ozaxwd7=Nw&R08nR?84#t@3v;1~$RDOO_;|;k#m`q1>T7E>`pK3t?$(X#8!I)vgVV)q52yH@ssO^=awccm#eluS@q9PGT|@oy z>U;eG zUdqoUe{Q>a2r$gYH}(MRlw3c-KB;_1e}Ja~0UI==h;9EsOYigh{d(ro#6*O?>;Gou zs>xT9M>qW<^Pi7@ST=tAxF0n84Unr`&(Tv7Zd*%FR*;UV~Zdh$ZQzOD*ZvG(kK{P>&y*qfo zclJ<^#%+fXuL)K@oq~pw>~)>7<$-rC!GC;%z&T1^-L0lM(!;mt^2PTknq&$-%qa}0 zN`Yk>FY~2;1&H}ppacuCPqr5PY|tw)R|`7p${h&U+M22_p|lVx&ed#B0Am1%1oG&n z23ib-fIj8@f#<5czJP*+0wK4lIE?Hi5=(lg)-!c&jlSU=Oz z!BloVI0!E+sr{EZggna(WLpaLG^s~0GF~U6Li>}TgrT4X50S4uA5&>}4nqKCct_Ey z8qNB#WuMU-)=$qQN8B+bvZMnZ^~v5v1URc)L@)Q z9$g4VbMv-F?}Xcbav?+KI*L&7qzbP98uYWm;NVkxYE zkCh}Y`%y07kkGbX@tfF^USUR(OsX{z{u!}r6>Lrci<)5dnXFaE@Y)&;A@Em=Z57XZ z20h}8R+(4t8xJh{>`0VQhMfYQPIV{@Mr)wy8rr-K8xJ?VBiUS>9R58a7s!XRy@l4u5%jX5M+{JM+gm->EZIsY>m= zpZng|b1gl!*1gsqxk>t=2DAhENwe0`KPi!XD^Ei zui{OwxNP?>)=@h;;mJpX&(u9!ah&%0cM93OPUGrJV?Fl0@^SGuR!?~#_+RIhmr+h> z8OGKESX4?hkk!?ZFjMk?+wOD27Rg>!AdR}_9+{jg9uA+Bl?WOxe$y_jol#*-6lGQ*qx9Rvo z@9H+L#K-FPZ6lBT>#eRBsUJC-8a>ToT3Y(ETe=oq%T@4+-N>N;5S~r?01~v`D8rX! zhWo>;IkwVJOy`{J#pxVzz@3dfy8=f;lmu(0h^M-=SmZKzXC6Dg4%+Apq2z<2)jkH+8nr|`YU>P`6W~E;8=F8R%$amhatG|j)7FSHIev&HgNG^ zR3i%4Q6s1YN-w&zL+N(1{`w%;+6G^n5uzg&1UD*zgRFz^7sLGaRaW{Hn}}Zob>+A=K%p z#E)iu_B_=22n7CR_OSiMnUN?)co<<1g(%L<+Wg#TDtr9hNoSXlbN{)|-~<6;`rO`} z&u?;fV~J90;KgS*sfSuWPrYg5{O*b#87C&W`00^z&1Mbx;eX52){DtE}2t= zQco3=&&p-e8{dY>+^kw0^E$`FsKZg8PorooGETq|qQ2&qJ{ln8st-hv*}@Mp?UL^p z@%UrKz(9n8TxncDxJAoI1;Gk;(>^MUipmGf*VYw$BlUfcLgdtCVdA0A@^MClXhyRE za6T^tL6qjQ7hRMJeV(1Dg&O*SDk4)ueQ#9SJV9bw z*p!GFH*5EE2FZ7jR8SS$IS_Ugu(LW?dPm=On~khppt3NdhMUn^lpi0-U+{+6uXef@ z?InuOE3Qu|Owi=vzX&oK=+Js;p39{j>WRaWOyG$lERMF-t%%#|;y&J*i2|Oxz~kHC zS?J?zopTiU>DAQO*fD^0gA?0}&CE|kGev%f*IS0rTC_hiV>X!43>*PEW^Y}big(k& zc{LzF)LT1;WLUIbpGCH_)sYyw;AWfxbS2x2yad{L3jaG}$a|I%m3)w%t&XM7~{@OFa>D8(wS3t`V zSsn!M1hy2WJxX6hb6B0{Ky4)m?L_o+?`Izt2OMgKGC*d8ud;9qV5wGPb3^W3!N6je z8sfcFd}Z9b%CEY%?E*mSwn{*QjyDVjx_Fl}b3n(91*I0bu10}h7U2bx)5?l2`0gq0 zX%Q~FMT*_H*w(6%xAToXa}~#$7F6+*_yEJ9xZ#QgQ$PpK>SE&N;kTx zsbE>dWEc>SYa6u8=<;gTLjJJ(EQP3rRlgeSyaVpv_K8D;FC9IPeXK*5b5pZclZ3Qj zjk{3V%wCOL1|U{+&1FcMQJ2*(q8h)uX13CTcaKkB#l60Pqr_m6{#PILk1FP8`t#2W z&p)z0pRIu^o(`t;3WnyU^s=TVmWD$19t7HdSqV5;m~^4&mF!(Ur!5gMd|u^b zYUe`myWIKtwyCqdtCO**^XDcCPWHyirY_p_pJSW|=v7QTTt3%{dbo%y|6a=YN6K3X zieAkAb2;PhWH;33+$MVA&)1(jIurci5|#dV>l6O(hv>if$p1Tlzu_?b@r?fayZ;I2 z_c)`!;$ixSBmX}o>~DDf)reosdD7d-zE>i<0+=06JF{~vySx0e1D5Az>7@rU64 z19<+XOaG!i%zw)8@A||1A5rk%@?!Zt=jvb8nfXr{{v8j?AL-No3_mP?a`8|7`F&{N zukvE~&*?MEpIrO}&z~~<2S5KgeP;bP`uscL{a1ci|8x4x`X?9vw+E9OU@r-{H{cq=~1jY3GAs6bmt5Aaa zZJ|m~zYXK_-|wsl6wBW(`OUr(6zku1(IxmK#`TZD!T8Tu^p{Zaua@`{qy=i=>DrE{u!m{6O^%Rg~x@O+LetrHd!MkT}6_d!knrRwDQf@}E2X zj%t73N{J2Xw;ccS>0d;q^a-8uZxs|JMph`s-y6{@F)~9j{)YF@Re!O|zs)-Q>!`!e z0P1RI>|$we_nUJDD0&flTSH4bZ3ZaDKjO5Zow=zt?dMm0z7Vo>aaJ&OQZ}@8urVdz zfTCBn^fJ|EVrA3)$3#U&CO*DDCns84V5|TDi1Y*i{t<%zb>80}1pNIr|9@io8@~S` zBx8d=AOU{<{Z~l8gZ4kD{|mWHOi)a}?faA5fAY-448`=D=YLB%(;r&;-`?xr$n1B7 z{9kSG7oGg8s{H%A`8NoD$DscWg5N>of3?B?mc-v~`QIS;ix~gSjsJF@|KnA^UEKeC z)n8(`va6BHAJ5Hy*de3v-^Y^v)l~msWNg2+@h^s!?dh(gytMTZJKXurY6i(3HVX1$ zDbUrvTFd*0n>#Z`zg}gN%C=#nTesTl z=RB&;Fx=XLaX{axeTLWSdlzKS#z*ynzmW^wlk^1+DWhewOBY2pTu;|=us^XSqilFV8-%B*93oA7W|QSnI7wooZxk-0=e zz@dRV+;k%#kit26u=7x9RiTn}aNgn>vK=W9jXv75m*(j&1l~Ka^Cq1EWVFjkTCi(h z=NahTxtaNR0}@2gYiA=H1o5M@jrtbiVVe@#MGe1(joxLi-SPM^{1#Of0L+~- z69~RUpV|0YT}XY{c2Jx3C>A(X@v9QOqtjucAbrFdeM(C6n~B>gxAca#uPO**u17M5 z&^cKP0(68wf;c3-5jA7*vT%p=ILRh48ggTV?*N+-+m5Uac`DLNB<=u{5u9UyhFpi} zIguJdI0U>Aa(&WQaU3$9$cX`}zF30@$APl}4xhpsj^6-&Pvw#Aluem?Iqp^G(c@&EbjHDWH0ZE-eMD}Nqeypn zQ;k=j;;?mz%9N1(nfWwVl(m%FrFMCKsP$#t>tq(bjN0^%8pqG4hn;S16hU{h&BgZhA&;XR`5eHpTE(6oQUYe|zUJ-#_Y#(O zDB}6OI>F5dJTP6?Zhs@3h$4gt9Aj`}nvZiOO)(V=$igKG2=GKppO!W}-Hb}4v<3{9 zg+(c^tf-@-s;jrk9>7IA)+HChRFOa=1t%vqtztsO!7u|aE6)(|ej@O$()~rELnuV9 z3jNG8%RJCtz?@?wP#45gMnb^GiXbn|lRv1YyIBX9L8a6>N|cM1&qv@rakUjrAh#}~ zy~c*S6XpA)AMk`gpZ&&8Q9S+fr9Kkpn>BPDOd{Im75Oq*>$Ksq?E}17>sO!`r3Gvz z3(VJ5p=xURN&t6@#bhA&%F3$~1~wNIE;gLdxO&C7vd`B0F_y9(K`#xVzzwSVHkVhv zlu#|*sw&_|OSYh(ww=G=@&PW^_EY`k-L$O{ix9js?Bk9} z^zRqvek_O8J^l7CqzgYImtX5&Lmo~?Yu0Gr@3vwR@*+8PFa@Ds#GvDKLDLwKl(5rt zzGfkupyz7=A7dbqH8$c__oJi)Zn`ujrCwEo9jAt?^j`vDj+HWiDBGTMVcYfFv|>!U z1&G?P1V3Hc6RH17OFD%*orW!**G4$RatvI3+$4Dt6Qw+P#6Zn151sib`NTqUA*CF{2MNm93TYcjxADH9!Md6ps#BH{ zaTB-s#B8>9)mFQRH%?d4ANEP+=308bCqk(9-^&nYDXjT|u>`j5&r)PJ2q-y3$mNTH z*2ns;L=c-4@EyrYQ>4mm^(%|1S?&R%L z)qtgEaM1FzHq^g3YUzUS9b)kZEjrR2V%h(e56*P!W~R!tECuha^op>ZuY@yJ^vjl$ zfL1+N8W3NztodM-$syiMdFWQ1W&Zd=fAtNaUYa&87I_pE5mOuBEzP#~QF})NIctHd z0Asn!YsJ1^1!gNP@q-ZURnLJzwb4<8E@_#5*bd{Ig0QfKk|dvzk8pG346rkqnd7Ud zAl@(PBE~6p<@wt584hynu3TXA=$accI~K((1}Ztx{Kw%r?2O zwfIlIzTqM}lA$dFWp9Uw$1+$cSUcN!b)dCS!`!D!-zK^vWyY zu)xOZfA`h%Fck?FQK7F@&Q_{Q0gLPvM9|3epp85Hs97nFO#qeKxFf*f?q7=s_j_J0 z^e=G$|1PFD>(Wu)rR~CWg;Iy|4NLd>fxH@)H&|Kl+jDDCq@Vc{K=79TWCqI49`0G! zd};oaiqgzHL0|4$$O2R8=>Rkug>XEstd0M>uI>=!3bX zmJ4*NG40z0Or*;zst+E8&U;e|PexE%aJl{Rm|fIanDVA2CT8V=WD?X8i!-lfQ4y^L zPnOXw-c{?Hdw0>@$7U|cFe0 z^K$h%Z!fa9^&XK69y3VMrlr<0X|fl^WQ97Xi^?Rb9k<^_azl8z^giPNUe~p7a0a;!&0u zBzW9L3_}p^-oVe0*IL$AhjFE-XEUu?!h3e@?`$sRU=l>ZM#*FBix=w}uDdzZK8E{- zMAq-qDktVe2YwV5A(fN3@{)1g+P3OHpnbOy-ZoLr}a&o&(m-9AJP^MnseC((r&wM1DxP|l0`MShTgo*E z{_dzl+0wi|yQ+aQcG5QioO#DX2SaT{3IhXI)^wnxl-$sN7G*GPcMl^@6fL@xa7p!w z;HVh5efz1i06Q@rc)Wf)Z>(M1XKTfI*-4D%i(AoZvfUgb1WWRd)LABA3Q$zedrb3W zE+#KVkq!TMEH3_Q&$>p@5VI}scJ56expp1S8PB_YNK=XSI@WOn-Qeou@GvUWg{4kFCu}&lI1!jfm5{ehYkBu4q;}DvXfY_?B6x+b;LF%naG0sS)hc{ z87%fkZ7)Z^F`bH;*+O;o&74X^Sy3;I*wfCJ%ob5~K+E*in`1V_>6Apnw&`PP7u5B~iD3Yg7`W$b$lhe>`as`Y5Ea0aWg!{-(9uvqf! z$=|1k9G}3Mz<+VDC9^ub3h-yCgh=i)VR7aYe@otj2E&n)!G+B1)-1c{GDXF}C?5?N zap*?KePhRTWgq(z6za!fOK%zQGTyQF6l22~o)^K_pPVq9b?TT7-$xy)akj|u)cHm}`=Q9N zbPEz*y4+`;(!0{~D-rk#1l%2cT~oT&68W zdoP|h3NFH(|iIm1K{n3U!c zNJO9XS!0LgYk)UeWjU+DCsu&W3He+CSx|PXM#S`uXJ?(9oNgNeq^-o#1wksyY8T;& z$O*fFIcxZv2&ZYzPVAVzshO%(z!KSd$}v)u$jXMbNUN2XIv|G*hT|!Q3_Gm6rCYwG22^LRJbMYG{FC41k!zwp{a0mmLb)w+8DEHhG>88##Q_U;0{r@QSf$ zt-zG0`yO3$tpKW4Y9e%aX@XXGdQTzPvJ8S~nVwa%<0NNHQA|_`+$vChfs?MVgHV~1 zKVlX~%NsgoJA|ea)H5KJ1f;Z*NSK(JMbncKG?R3*lutlb<_ z8L{NV!a*4cXCZ7)yJDk?5_Hyox-Nf*Qj!*6Eo;d+KBuRkp`@k!9BVa=pjZQ96(_5> z-XN0|e-*#ElC9{AwNRGVUFdHX`fLwA9RpSYGYQC&1?=#kX;W57!;WbsWd*RIiu=ub zfDf3pA|Xq$CJfcE6j!%mFLiM#hUTIw)jO63cDn4xx)NeZnNm^d6Z_Z`lsL?8g-le8YG0W+oR(a~L0*9hpBVhkUQH&KzV zQPd{1&!iUEn+~@Ck~YC~lK!4D@!SA-xiUeC=}Oe7qwNe52Kzx`L6lF94ZQ?Ev`dJC zXY5~bZpW|!t;?XL;((jEGT9DMx~%QBgCn<`jOkF@bZWIU2R-E7L;HNhx-ec<`W1h7Xo)~WJ4;(k?b9&I9jK@q@Z_YFrnAzyL0JDH;i~#i0MF< z<%r6qKymF#LY9w_<2vxG5V6{{W;s(Pn|F)nEPM|z3nphI2gmo=d8ylb(o{=G7p8t# zrfZ0|0u5jvDuKZ@)#O{BJX$+<1agVX@#JK<4_;RP1M{@lgHRW-mq1sj-z#4sc_aP8 zL8OTT{j%KE-Q5~G`2s#X((^YF^+6ym7Bw`tZKY-8R;;dDW}m%-$ti>>G9+~o)ape? z?0$29o#%ec=eK=T_RtU3rh278yIJ&mw6B7ifqLdN%=5uot5nR=dkZIuP=+=VURn|` zXpKLGhPa?KTwGaYQ(!|6@-kYePf2HPZjy=$nkqE%C3VV1;D?71BV^NmG+c%(eu1LQ zGyW3wRUz1mKzlydcKA}Rh`DU|sVOT!$4ftkNkj>M%cO#)5mPi)x41Z4mQ*u{CwHAi zlw;yU3pck=HU~=&eQ8~1Yr1NRa_(zL)Mu8aDw&i^&{@hdOmWs}AkPZKCAqw7q^4?B zpX8QSiV~`NXBR)i7@w-{&aT5H;0R%&iV(Q@ptFF`{8TCQJ?OduxBR^WQk4X}T1*dF zCuD_rDlisfwT}S3Sp4-l*y5a9&w@sPj%D=;hJ6)Q&g&W3CA8M=86+|BW~IWy5IpPc z;K*Uo5vw?#?oce4T`Ov^yfA)%GhV^32Y~slU50Bhnx(IEAHW+Jq#wOirCn8(eOb={pPgFi{=vciK|}+~cdWb;;_931 z?AX+n=&R;@#>@xOurP?=Af>niy56~;qCa6FU*}jn5K{YXI=;&(L$)0w3e_z*aK*Rbu|flfB4RRX0|Hnm1g8!AMwfj_ax%{HOz}`#~srJ_T^u=3p8iL$YqUOq(GoDVK zeDk;5w&~sWOARlbkX#425|9theOo4RyR0@^B8P7C=}m4_U?SnSRU%EaOn2o-V&p{%$t&f%%zuI_*MPx9{LQF+re{@A`ni_ObVf(Z2Cb#;jN81Knr)nZuQ*p_iQli4S<( z%Xb|2|KM4lDj`fG%fY1UO{yONL^Cp60c?2zwTt^1mkX~pLvhW`f*me*2>R}V?{QAc zfzH^M*-r>_Eu~+YVr7)1ya(W`;fdK6Z9oKiw5ZGFJ9r#u=3JAtifR8MqK#UdJ8^*0UkY=$6bLsumn|Gn~?Ro&UKlGKn#Ku<-)dE!4l-z2D-XAIG&SVH7 zm$I)>Ueiod%umm;MpC;1=w{pDHEtT15m3pLBmxY|Sy0-r`%Q5zV8o0O(}}S%G~w3< zAkz*EM?t(r3_spl+JiA(b?G8j5gX4??>)+slwG#{>!d|XP_3AspGC8;T5uZ82=r)# z41~M{9N;F4S3HpR?g2GYmt0v|Fl`o6ydfrLmMW~pyo+yP5p_%In~ zWdPthr8&~JIR1(2yzM1Kf1JM-QD>ZKwF^gXD3}nJbo6W-ekOHzGmUtzcpmG| z7xvQ_Z*BBF7;{p8^mC8^9`|z)HGzvEFTqG~@bp4pO0R;L+@Ot``Q$)r`WP?1*7Zqn z3-)&Y82^@ML`1(hYQACLwt;A?3GjxRou8t2nMor7s^gWU{ny(903FV8ND{U~>%yU{&$4TFD}n<>bFM zNNG#dlJkST_rn>TN;hAdEkh|c$9Y}*_;cm$;Mqkpf~3)o_6~B%*u{ciS^6lnE#uzg z>IDdsjp#lb(C1+)gPn$I8KSQFohefV&%$odAMpdrr#CQL`Zci$I79h8B3YTT@mI0I z0DPONEtVeY>O5x(NKVHvyp^~odC9b8s;_3sGk@^4AB;w&LKr%zf6i~7HY(@w`3TRS z+Qy;?Ajw+DoyDFblVTu03AVC)-)^pHI~-H)zVY!dc?s)h?hrS5y`6>|Bo<0Sz-cwg zhsT0P07lbH&C=WI{?2|ZPTv-}x<=PXmKD>L^bFH;0svL%XZhSSZ{Fh9Gcm}X_w|e( zg*o0)|9jA0orNJ?k_FNFZfk;woJI5=C{o;8VsyJ2j&gLy>1mY*5%t80DqAIp>q)8% zaVrE@8#dm|dl40jD(R0zZf<=&L>1};mC&+8iSy4cb+&&V@u2_jS37^7mH11w(^tb%MP;ak zPj;?UTLC2lY-S&)Mi4RFK%p=KG9rk1H$Yec1rr67kU)Z25c?EtLviuqNb*KnyVY`@Jns<5aFlH>r_YOvr{xK1`De$~2`9DclDRiU!5UWu?ESVWf7E@)(~@ z7LBVyH@cAy)lAB1GEdk)ha9talG}de^px4Q#y0;2E<55&OyGa&5tShmo4=W#s(4ps zL6rnm_)3Xy#fd5xTYRXzSC%plG@7O*N?TM=COU6r#l;$^C0t#cs+2zuV}*+U?0$oZbwg9Ib!HR`7$Sc&Tcv0EzOIB3=dO4vAf+YB_)~q%v zFKw3@!_?rxodOPpj-{E6`tciW$-2*GYXNp?-(s^Bu9a-Ux$xug*GrT`m6M+Xp5LAC z72@;D`+35%9WeKj_MALDwy)!M;KfPeB(N0OcAF}@t&6PdGaJ`1zggcB-eTU$`~rSt zcvO1iN12Jz=Lvc$rF&H#xJl1~FmvtQkz*XVL;E4yrdZ3oWa%P>CO#w8%+}qLXKP}A zZw>}s802F(Fcl8#BAi%HpkFy^c+KLYVZ{p8h2!E(#A_2qAc1m6h)~`d;Y%9a(ucBI zu(XiQ+GfL+IC$m}4PsxAg5?ya_r&vM@a~0~bfig1)D0uFJkq5w@LVC8dZJ`1uok3( z6LeD+7<41aD>3t^!u)SegJcpcHI6rKD6~wi!HcFt8 z>$1q?Yl-vsWPT65_QmKn^}ylS-_;J>evG>e~lKaHe@Hh8lJ02saklPU$zIhFXJb0bmx`L&!zb1D_?)+8M9>{@ZnjUZj#Sq}`lM*o$xpv4(us355V?cH zuO7HD_`JKbeE-XXAkp`oxiz5uiocG#edXrSyHO9D-#9gXDyDrZm$&tW+Ik~*vey|7 zCo>~+UCtG73lp3!=N3qBgkM>vCHRs@ZRYA{4F{IYx@(SroWTLF$J3nSw$GWu4`})>r!bZCcwtJ?Csx zazCL-&`FKuu6GVB|M4{Gcd?_g;jF~GGarAmSpue~8CbHj@|ANOzPPaXmof0&f<2L3 zq`MQJ6r;BhQ*g8bP>Ypz#+iC-rGAAFn-Y}xupJMM4yXIkKxOl zt;7VG9K*@$e4zMAYm!0GKt!PESOvoo2xDc0UXnk0LchFI$>?dyS;Gu4?`Ckr`$@L%KY@~@poEQR;Z@dY$0^6iB zZ?(Q{!k?x~;5a@psAMkGaPh*k~-@>Tq&>_WuKLZ@pi@i+)@JVkHPi=jJ74b0^G*B4hVY1 zcyep_TXnN@ZW~4Jv{1H@g{kjP+q63K69MHd3kU1C^@TCegMA4EsjdR;__@SOnV>Dr z11@rjEn)yh#Q?u3x^<=;-6=A}+R-qf?4v?{;f>C|IhsYMBTt??LelX89058q1wwJt z4s=B3&#=H<32@9d(6+Cjo<7sLOjr*)JG8A(9QM_kAj*HgH^Piz|+GE50BOOh%^n4wd(P(>}7f+xDkwmLJJ{ zK$F`EOXO38+vjI5BV=v~)B`#u(VVTxLYx%aW{tetprG`?aJes%&Q>a}uBq|1F^6d!@a>{hGE$d`%O@oS~jjNc9V{PZFgE2-L1+9Wb&GYK)K8ELXp zFYc{j5v1a6=ph)W-y;Z8Jy2Z>0w#m|MTYzpLLQrh`NMdxP8FqOj`7v^hh4SUNKHZ# z$vhKn6Dwqzgy%du1O4d=F?Q$HS(NW3<<Qi-EuFDE{D>!Mw>SrnC&^vWuI!EGz%qM;Pl0K` zg@{C;I85_eCojPUPj{=k;*t*Es|6CE*OZnYdj5WmdIIz@6^ix@SidRE4>kwCOj7@& zU>wRzncN5Pc=lVk%TU63W#ihW;gKZqS+X@-0?{cKuM-wEKl1BI z2EM%xpT`N5^Q>cU(t^+mg*4XfQ&@BHvIi2ji_ZNPG7|USPyuq$=FvefOLX zw=%0QMd*cK)@gJsPE|?Zq|^vb&!TZ(b!4t+Z*lk6R$m%@86H5*OW3IdRJGwwM=>mhB!06^3MPh z+L`Qi2P*M|pN;YA(S|zbGflvtDbgo9$93R0_UG>EXJ)p@+Td4e(1QXWcBYLF^LQ%V z4=_M~c+-VR3?T@may5jcs-`jP9;mr`fttv2AGO|DHkD_j5+!XA3SKptKiRZ4unRZ_ zb`a{$)BpCthmYfqr;e#20U@qOzJ3<+Edy}}w|sIU#0&A29EzeK(}sQR$F8x+F?2-v z>FH>OR!QZrkaFY^Jf990gYh7R?gK?|Igv)uw%sTq5^9x7RZv&YYR&T%TXW~B#J1zt zi^qM+T?{Ap^Fa~WMXf+0HNS7S(J0Gj{ROwY2c*N&#j_}Arwh+aEfp{wM!@yPi4`{R zR5wI#;gb5grnAiMfGX>r?RZ1ZM>}KG_xUIt_$i*^90FhlC}yLGpQ+P z%*)ovAQruTOge*$?{;7bCn-bVd@uql1;R1yjjQi_&t

72^$;sRMLeJlAgDW43{s0|hR8@>hMJ^e9?yMf-%7px4ucO7`{Tv1Ad|1ot z${$P1n0H(7Cgd05@gq3i2(N}_O;||jJjHyobE&G*iiwc{4T}UgXNEqd(Y3@V2sfhV zHC^VpAZ@P{IF2=uijr`G!jfJ|0{Qi;dzdxUuZzvNeqD7j-W*r!-2u&BK*Z{LeKMxo zp?t|3YqYqGYlDZ{Zoa4IljbMqeDQRIW$DGOXOo2vQABGYAtJuEhl3PocFpx23V)xE z)2IYaXrdq>bp7uu?)S62){D*~FGVO$sPyTp{EKvoCV>8F91L-JZLmu!CDX2$OhxHt^M0&IE3=D*kH^7@tw?AV zS1hWeeL*Kqk8)`qHU5t8_n;~L$k}o=_i%*(lPGvBex6q#H-s zmN&etQ8qrd(M3u}jX2V$rt|XLE}eU?d$q!`N1$CSX3EMPO455v=Ro@HDI*~ZQ152C zCX)HMGeK`NkM)4K7D%Otc5LK_Ch^eBy@{H-of0N=sOLqGPXsSfXA@Stl-cqJsB`>e z?+H?@%Qr<^rZX7WgK@p#FRwyJTIORBq{vB$c5Q*EhgZwFDTF`W98@6|2WPw-nu!MQ zt0InsQ9hh>9!m>R5gCxo`Xvyv!U&_DzRZWvhAZZ3>xA`m;N*slP1hX#}JMnD|YF&6H+qG?WNi zSWTNQj@9(U)vGyeuTWG9L;_bI@NKFaR8A`tva8gpr?gSq36pxAizpa*jin{+(#3+^ z3VnQMHfN2CX-_B=#kxe@Y+DuRQNV0n-9Q^VosPWAWWh|})t5UidS=j+kv+vVr3aun zcTqWrn7$QhM5~Y(Q27>jA*nJlG)T|d51!}wTinBWQ7{8vt!}M973&b~II?;;MM<3$ z&*l2P9_Pz+MY2HkXKa3$%6#8Oc zir-%&FUMlG4Tl0#jZyDW!El)hxm;!Sex+8#pt;CgzuyjCmhrH9UY<(Pcz<0?db=th zA=I*Hv|O6`X^R=EX>li@c)Gv-BtW(_?J-rX2p`PHk@W6zm3DSk+p%D^Q0uEc@QN*x zqY_fhX?a&C%!3!?lQ=cARAW5!1__oDI6Y;+pqirkMXk|rJL4ASE%2S=buDdMNl{lX zu)?H>50#0oJ>%&_c6)JtUc~=+fYYDDg@WA$L-dXQaBSHA-=xm|(Hq0U!N~T<$A6^J z*#6SQ^WRUM{k?tY&yJi}Pe={rrM8DSM(?YZ)Rv-h$kmWlwKc73t!jlc9%?EAg5U@W z=8zChNKDDTCXD_sAP|N*N0KP!jupn$#^6nN+m_O6bIqL5n=iH7oJX4G{1Y&9;GEqCJpyL~v_|--#(q1Dk>!Q23mQLB0T>8^= zSM%7G&W+l%H?;1ZT30syd5cBP%dYyCf2rp}($C`2g)y{a)vGQ+gy;xQ5rX>gWsz3o z=t%WQg1+QsnGWF&F%LxT2-1PG5cc{M4XJVR2c)$K&=C0gY>zaL;A>Jhgt16=NPZ*o z`XGwR{(FjPs8yZCU zDngJD!;!|dwNK_i-+BD8i_U|5RhqU>FFT&Y&+YWU z@j>$89oQ{EI^E`=yVxdiH0_)^iTTyp?lR_kq_gu86Ft3`XRFv`ZkmNvg3zR>6s3|@`yE3YE%V%KKph7n__kf=$BGy#XJlJ+k?~T969fmcQBh2+>nIvfGDVARE8|#@f}^QP$U+K` z0z^V}>eJB%lg@v^O1&Wf%_NM?;FObLi^?^K)6|R!x!KF-lxpZ?BIc!D`f7{N8LEW< z8XcQT!%Tr5U{z^Jk=s%rOjW^HDWzQyKr(uOeq6nK7%(c4hXP>Q5H3_DC6QPjfM~LR z7G**vnh!KRVrePKco7-A6qg-Zn~m1{V|?xK;kMx!2v84S12c`eN`7#s#LtQfHDFf6 zpQ+c{LS^q;N*3>ax>T4vj9{{v*Z9sF-_qiZCM1?RQ^68oQZ(N_Nel=I`5ph-fKLt+ zs0NtVkmkD0xO-xA5fjrLsZo0ejU<4kJt{07c3+`R*L>IHsHVa`P^F*;bnUUSJ;n^2 z>S2H4Cs>N>IkmuXyc8smUlKi<)$vA~KD5H2I+jE7NT;&AN;Mv)+j z)Ynn*6B#~m(9z*3rU|UNz#Ok=pxSa1JF(ZSL9uE|mH9w@3o}4a=+ZbRnxeUVZVnt? zhdO+%0%;s=tAomHE1&h1!M)x5xT4u=hlO?t<1UAw$s#OWJS8Q6Yw;OW=s2x~$q7R9{QmZHo-T^|#T_7BdPmdU zIKm*HEDV#K+vUpKkj_XR>8n4J0Tp=)OG%0KtN@q-8bvfPHL%nJu=_UJw=wg(n(H3` z69CcL>RH!ab$e^qxd8hCxngvFQe%}%_N#Pmz(DYI-wq9Gr!3Z&02(Y?-?*PpeBRba z=KJ6J9yBTkT7umaa$2PnVLMkbOQ9#-2MtFHS9DA%@0e;?ra+_sH!No_&}Bsx*A?sJ zEALrmp`t27(iisIcw9MKW%`R%)MYyD5P)}1?000IxP1KX)a@@|C4a&qZWPA+>MB>X z!Vd-LYK~j-YVqEGIMxy&cH3@?ed%o14uu111Ke99T$nK0472OVYX;wQ2eNmlBYn^6 zSej0BP7Fhrd_&chHfnF>UhaYi33$7`K7I=?$_(HZJE%rYc;1=xlz@Sn@qJ>eef2Y+ z5_LeFmmVL(mR@zyTz_yqA+Ig*OuQSX!%Q^_b z9nCerDs!#-jw&rZ!|hw-;YZ&0?NSButv}xB0YRGYryqQozFT8!R=#_6Ul4tl1Dl-S zbR0!OeAvq7y={0KG8yl3#oz!Ty2qV6z8?kIlj|KC7FjllAFwrSz)V&!TbHFk$O$_B z%f@ra66R?10fAT);G)7h^GsMc@rWtOQ2lFlSfWo`mI18q%9Vb(>nMu_-3^q2gRWMZejIzNF)U!{ z07hw4!P_6BXuc%`%gB*)~!nj*nW`*-Xj=5{`e zHzXQJmi2;@X%UBX#L6JJ3Nj_oOd0Y z2-g>Q7gXo@e2%6aN0m zj75syRngYhwA;+7S;kbC*tni?U2*6VBfvz|mGeYl(2m|me zoUlbQvcQa;-3GUrpO$@G8~R?k#(NG6+M>a)((C&2)KUC&-WOjEo1gsN{?~h&E*+!v z?f#}rjJ*X2juPhXPc9KCQ8nEk$$R~pTQjc^6@vwG8@MyYbIDc3-aNZVS2K?poPelj zTWGO}Edgkj1$IcN&G@bj~^Wb8^$`C!-CBTKJn#g)F4YA7ygl zuzT%EcvZt1?Kd+^stWVTw|!)f&_57S>2rPriIn22`Xq!FWk(L^s@Ncw%s+z#iD55Q zRq{IV=+rjZ_eE;uSmZ<)boqZU*l&ekEZGVSMd(|$TwByDj-3&Ra@(waawTZmrS5C5 z9*uPfhJ99vKt46GU%$s}hR>d#{=waS6mg={M!9cqX?@R zj}%R!qE-JyNp4ycb6JIqYk6pK$uV-pJN6lqik5*FD!qlQLNboxeJh);{1n(mOKD<9 zl)$cI(6ujVnaZOG2`DGly)=v38FB9~Ki}`+&(Wd`YniN8h-;>F^Q9?N^L!*cb?udw z9}-iETFx$)FlRyov>n&Z_p#W}Mq19ty{qzLc&vVlxjjB+^66f-HKO^8nJWHnsHvCw zBu2=gcVHi?;soqQImOY%gVuVhFn)z6&%kTB&yY2q`gJpf#APtF1@`m^C zEIK|-A3nQDf^a&WhRe?%trww}R%L?E;Oh(ga_Z?M+vF2<_D8f6C!SxyEg8)-{j%~O zUTbkMuLN1esLGHz4?1O1NI59q$&f3OK@|wsrvj6gpv7HpdNLNKf9p!$YjEOl@(#Y< z_?8hQ36TPEUtHrM5vByAT|={wx}@N1zEu~KikCK@qNDFGCxykoWUXpq8MkR%i$e7NtVr9TM_dm0ts<9Yx6raolwtNMPY1m;ZEa=L1`BrIke$p_5(6@r|MLwByQpjZtV?74 zWE6F?72R9=4MvQNPB;56CMs<_bBuZdZVnEz0Ba>osr4ojW$FR*vS#J2%Rc6+lAd-wr?V*yUD@x$D2sEb2!mlvRfuJi!~H|IxA3Fo!G7P>)2l{E63p!?TR zhfNqP27?7+^iiWlO_fLHo$?19C;Ykym`YDNb7q3Sy37bgoX(9sjI&_%?74@g)#uk@ zmO$&OGK%l2Sl|Tnn|~7G08))7AJcM3@S)9(`H)89c+=d^5~4yRO{3kC$FOpv;4PY| zA=uA7B8Lx;k6$?19HaiHvR<~$S#@)q!4*blzrbm4uiUG3f zcWG~KRGmB=Q7@ETb`LFox)Dn@B-ZK*W1F7at32S=<@s+i`QVOBGB?b(;wQ%sjJ(rC z@3Df0iF^(3bLn_Y2W|2-&byc9RXp-)e!NaNY^tfuFe;==0`YUa9WQW)Cq~BGb99u9 zJTkvh+1xGQYpLE6t|&G}P5Mn#t%K2nQPfc%Ts?0b;{g&9sSu@Xzc1=snN)8H-I3UQ zypChD!;18QFo!srSJ)0lj-xgE#Rx{@bW%`NMW3fBo7-W}wVF=kzBsm%ubX1gqZ$@e z5VVu!FgH5kLp;51!X2JB?H%~E>s^n zSALlxH-!H!GG$!c!(}t~Bj}K+VoI`r9C=?ReQq!vCR$n%OFb?bg1Jl?kE5s%T3}Gs z^p()J<^nn&>?@;HbJBVc@I}q#24v#WCBMl$dqIqd@C-Gza>8-Q4@Qul>0ZWM&f7pA zFRjjc&&OxqR#aA9OM!$D55eP>wCRlo%f!h1Zl?bChb{a|=wANSl4`*_*{!<$Pdu=Y zPsuVXB=Jduyqi#-%CH>SM;+ibx|gKpqJh5np=&)PF&($_3hLaddnzHuI z<+b`7ms|~^$_|Q(XX`qQUialwTn$`j)23XC(2Y{pur1DG>tXBS4Rnx!$vz6Su_#`n zw0^oru%6xbNe|=XwOzuIo=gI>Kzo}JWDfWp`N`ZZgZ_r)A;iAGdkqC~QXBU-$m8N8 z@}-rfxs(yf={{e_B`_Q%UV8ivYjCh|dG00O@Em&wzie)>P?TOFDsH$7L8*N+~CNdVRzG=X?qnNu5d8C#0EkMfhc~X|+Xzu$^ z-`p_s>Hv%KQ>Up(ryQ_1EuvE1)yN6CRMf!$UL!t>dnx%=okp2Hs1KGfZx-LnV|}Gh zTXKVCCsS_n1?$Kz?$ydjd#XY%8{+y)CkM}4w18{;vK?Nb3$~l=ELw{<6N&P*R~Bfq}O5E5P}j^ zOSVwwJLP7$qx3E2XW3BWOC#FWPjx@CjnvHZdtl#CL%Mx=`UZwDxwAn?+(VzZVkIy3 znoc4=gut#|-v$YitrKX!Hf2`J(8^f6Df>&C;FfaGs9pb@g}#Ybu5$jzV!~Fz9vyrA z8ytu=jXX4}JZjQyH-isQwiu?b?lV8IS=+nf>~RY%`|^p&F8P|U+v&c=oZpC;;N%{8 zuH`j>6YD{|&6D0<#0F6kH)=dzMGR%&KKRS-h@RcIAMAT7+?BGn@uq6ADK}6nE@ly2 zL%0_bED)y?+y5%RC3)j%O`l~CtAvw!%&cq0u%W=+N4A|2cNw?}w^DBPx#SOeziaDZ zu6|%a&>NKXWL zAO8_ZO32IQQ(vjynCDu8<2MEh`MbR<%T+POs8^Z_EWn>_0s|lp86V0Sy|x~qGT4^Q zI4|H)Y%{Qk8F+c;?Xh@0mX6QwmP19tSD+>wm|u9L8&30vwTIn&1DuQQ7ycAdaivZS zG*NHkl+dioLfAe`7iVA*s9}!V5=K8s()ix-Q?=RLlauS!S8O_^kU|5ldVEOBSqpVa z>u-N7)gBj@^G1=ky&wY>%`Fzm>~pz{f3LpvOCr-m?p|@HxHO`SDarUUOYYUJY+^A9 z-I#3BKIfo{%DY+=hPeI&9qP2I%R&1Yy?lcuc~v92Sfon=P-wn#S}g5lytY6lCQ=E) z#t5XHw%&Q`w#sH1C57=pmcfDOE*|-`I*6Jkp$a~FW_bceRX4Ly&EPUG-N?+F=+EZT zy!l2X=@b$LZ?oCKo7i;OWWL;3O9Z6hcXBj`Dq^y3RWcjM-oAS`Fz>~X>X6#XCX<I3I)^J)2jCN^x&v3x|D2M^3C3S z6&i3SInK&ggnHPO8kdTwr0(-%+M}uPLFqUkP{X%=Y|S|RiA|<-ab?UIigfzwYXwAz zaeMU+@J9JxWMWe_L1wI zGIE*lZRTk4PBmKZfwj!2+1fajXUPjLO(kfGmJiJmhgKoOr8)%`=*S5lUhK$R3dRq_Hm3WMo1^ z3!|Kf61TRV`e#2t*eVHN=36$R!)d@tXV|DsC8w}3JmJE+*)h7-<55Sp#C#cx7*CBv zz?YptcyVJ@`$awi4bL&5dpd~mTCUv3#py}SiCMzst|sXOH#z9S3amnlG($8tt*fW0 zFt$iki)?)t*Gl0(bly4AXd z-IFxCqr<_xqSq_z&#mi95K5;$RvHJeecN;Kn<&0ElY(3Ie!dW0=LY)Q8ke099{m|h zqs9JPA6zLn3c^r4K9i$kt!l1_?6w6|_!`~z&)D14?QW;O{kA5UoTU1JC!=vt)!ZYO zY7TC)M=yZrD`_90>XfXrZcP*2nwB3M_Uw*tw2QoqFkLRL({V>EzhnV@-zm-I=1{ZK zo1Z1V-7b6D{lu5rQKF~EM17^IZ}XX_us^zK!n={8uy4+L)DI|{_<0;3q6_=GF2zH? z_FtcKT=BecnoekR{m2n`augb%m~L%k+MZD}Ho z-?1gFg!+itju=FcFIyORPaZ5VjkY$w4F3w*f3YxUwZ5V4O486Y`>kgEuyhuz*p|F2 zKrarGP|%LaN9DPMCa9y}$X75oIyxF3FTQRoStAvfvL2~PV{1|M-Z5#1WMaA!d_TiB zWIt+6Tu&d3!?2^vtP1_mc9Nq8PoNOrlX&3TmFA_Be#6EmOZm&q&D1KT*FZYvobhbz zJ9+PcaItgM^+e+95AD}mC-KULoizNu8t@lmCOsv;+#Xf95?t9vTP@kve#D z@cPh@w|Y%+)+@y)_r{(`gNSY~W9u%11p?TQUk<6H8(Bbap33I!aqXR2$Et-yy$yMB zNSStU`}XtY_OFO(PoFRr*UvmbT4H*nNxqbq;o%{!KpWzXcRx43)^b%2l!^Et_Hml* zG>cg!hoCpu3&mauf`M(XS4usHO^lWiD!NNkC(1S9l!*E8mZhsszKS+E`T(WUG)!w& zU_6;rhi3o5;h}={N{B^G(pXC3{ouHc?ihonL@6D{60MXvwl!@FC)^Qn8mp&!>J%2S z;O@j=4cPPT6jtJsCzt``_vEZ}n(y8vxHa$ZfABs#Uwq>6m~2cbb;n*L=i%J;Rp?`8 z!J!#uofkvsZl9sk&wR_0roS;T);Py_%D2@Dyh3F`gyFoc!O$xzd&ajwH>En|Odlr6 z&i(v>-3yPnyxLx$k3xprxcgj+diXPiZy}Fv`lk3%Hp$=f{NO?~L3DiltzN@(H|u)n zwRR~MBZ9=$_~UPlj#VEKw)gorVhVhTigoG5b;5~mw^UDi3LUb%JUDHgMiWuVFl6d#4FD)p9(!vh=%1lgb+K9vpTct$hNdOHE+{gpN*+(6)bZyFGHE; z^Q>pTRd-9lGOxfbq>b%8+xubR4sUSiLGN;n<*qgFmVjNvpJ)hppC`sxNuH6~tb4Smrh>I#HH+zDF1rGbK1IJ1DnOJh%T=KTjrv zROXf2hS+S=-Tr>>c1}CYq&p&{A7j;73NDrQPpE)H`L>gs4;&XqU691_OC!WfRpZ0U zIuhC__xJB~Kt=EI<9@;c9?BwzAJ~RFKTM1MnWDu_5AC~~CaQ;Y|kvw2Q+(^2lB2g)PvKc=d zsr8aV{hfO()i=tNrtE@$_&vgpCrLuMxPINrbKyy(|NZX~&Yss9WzCCQk@Jo=_!@KMCy$741|jv5tL3Sv`)yBuPJs+i_TK2 z^a;LHb{QXxe~mm&QRMcb?!r*~21?Two4eJ) z*sXm&OO*&lMJ^AhTWkrV=}g@|gCbWa>q4M?&jxPaAmic`Xm9FHu+SG`4~!@X$$BCR zdDykftg&^KmYp`G=`V6qON5|OhmYCb^(5@9Hhzq6y#LxK+N#a=c_wRb6h1+8rd$Vz zdCRZ1Exj&sOG71gy1?IcG8!pOT$fS0v#YnaJLI7?ES94f0(FZhxx+f87r|xJ$<6ex zHxc}h&&$=uI)YJ$S$ecYCt5AC%z4izdMFyx4OQ7dU8}1&XTOo?8VV$vt)1IOi1C~9Og=KL+PkI^>Fv6o-YrLW>IzAPGrT{7e=4bi*}#2LLd_+(9zv^3cD zsiq<;!#B|vR10{6fg!Dlt@MU;UxXqQUQp{(rQG1d1L5YisvBaKK64Gylx4l4>G$NB zX!JF_KZq>s~`sLSX13EhoWp*GAK&$kwK7=B$? zY5oyv@=Ic=D9qYf>X%+Zv)uLkRZRzwNS{r*H`YjP^dl?htIBkf&aG{{&a3BfCYwj5(bs=hcY)Xbfi=zei!NRj9P< z@mPmPTkop^l@Dn|DY$jmvQ|Zop8h+i1ovVbhj22zul8Y$8N~a0&FL9ozg|SbL}yPr z*jloqq>@0a7r(v1bvf^9IaLHqxAuKDr%;MU!LslO?$K5{LP6#RG?%zw7N+UUg7|Hp z+eJmY$dQZ+jK9`+to1HA!XWo$foKI6^OIxJA$R7_R1N>}R58zv+h?~IP{Xsk?- zV5IgP&Ut*@Lj^q#2&^tM6mF8%r{YQKz7{nV!gO^q6-seI(zLoHFdfKFysG4%!y!vm zIvmL2XA&qh~Us@U!ae~gu#6{#fm2WJZCNm_2*K3|_az2P7Bf~;_ zjBq*UW&bEA*Zr&LzA2Zc!QM7&N}VNkVU?KSE$Hs(h6zgkav5sGlW4^$4ukBZBX=@V z)MGv$`_`h6MoG-lopSUe!{IpX|&L)SqL`h?nQC+)oN+Gk>tIQegF#1 z{CM+JzawvO=m3WN+}m<4XGO7|wolD&uWH^_vu@>cu$t<(g}O31(e-P)DRpCBM{l4O z8*lD+eA~Zlb=cA~C#AlmjueHASN+*?TZ)bfGh5WjnkZ=mv*T{zy>?*%3>QtIy52)1 zcV2nsD1|XkJ|)C*EbW)P$n`zkn9R+u9!Z9!#VL^{ymF-aI^mD3_wiopw$7S`lEPD( zrwgx*j)WofqM#Pp2`rC0SQvMWl&w0(k6FE zZQvLG+S(X-8cD&lZ=4$4;y$ZrBS=!{%V4BwFWq6Xwq7>!qPseyc>ve7f{=+P`dJAT zPQ&f46EoNM8TOAug441JDv27)QY=oV$Pt=m9IN-8O{wh!M2}566kBF<()b4?iQ5gz zKE(O#+=q4s#aosQR9>khe|_Rgzgx!qA%7$&=K7pzudE~&%R-ki9PkUtA@Iwk*Cnr zzC;vCl!q(V$q#n7m>^i9k$xbWT}8832u@`)%RKChhQ8oAvOB`4k1O;dX;2IErWFxz zw3fUHSO$jcsT0uNByTOprsmvmc${!a@UBAeLCKXaGR>vWD?L{z>9;wUCO{+a!s=P& zM=O}FY&y~3Yg%)xy{Ve@LF;mzu^dibt`bvMkb5ioy6z$Nvl>M^RIl($T2{6i)YKzu zc3vOnaYWIO319XaRB165^xGhsSo!5YZa=Jf+;CiJJ?@Yth=G!>JF3vn>cB3zE^Gi9 zLEoE*YyL8;y2?LTiks6@A*J+GN7sMXdb@ALQm9RUyZ*IbOi4hLGBP1}1ldAYO|8De zK%h9@rgQ`O`J+9WBf)^9F-0GjH@1Wnw-qmiM`6YlEjlzjb+de6-RU9Lcq8BZu4+&d zR!RN?Q>i?qcuQ^H@uW_sqB>ju$<6yBFP7UAU;A_52!16#DfVJPbFb-3ucjoNM~gb} zYAlpI08G1QRx#Tj;CLP(W z=$x+e=!8j|Bb@v0#;0j3lQh=JIMb*U1s&5GhirF6D{n6g2+o&I&Kp)#M|ZvLl2(~F z!*K0Ld$XYZf_IE)Wxp$vK8$Q1Ve}dgBM(BZx>9kful=CJDCVZ~RhucDagMf!WsA&7 zo+cjxRQMY?#1}}`wJR|-b?J+%Z8X#)F41QRw`?ehVZ7-oN!mgf*m}GU=2>aP< zS{Q%h_Ip`p{AI4WThTl^jBH58DdpBn-71vH86{?8&xFvhUk5HoxjAAOd)h4>s=i&& zha`8GzUliKXizD#x})lCp=28JX`U~UjJncptCyRhXiww%hoX6MGdhcF%3rac&T{P{`lk;+V)R?)$9vh$jKrJAZTZ4QKwz${}z+(e-Op3q{&B zxF-go2%)BYT0$!ouNIt48fxe|FKjCW zt+|c`Q9)at0lo3@_miPt7N`#1r)MnL>)vJFrCPIBjXxnQ##-`zOU)Vda3`N)F z5_{i(pUU|+Ny-@I4@*p1-%BPi^Bh-JV&G^Gb1zBER=}`rQkf54iV9 zjA3+bCQ)L=s`;2wqK3`eYOf?3+%c*rh2x$(((&t6&G05#*65maR~Y0Ag>vJmWOZhz zL&y8MQY>z=p>T1Du&zLcKG=VaPW9pMA?WV9)wV;h#ugG{y*AHgnDmtImZJTtzOsuD zcFxq}C|mh?M{a+)8*yJ-5!Nf`t>pdtsZll6U0yw(b41TM;?f%Cr%?jN)|{W7 zD^plx2}T(V6zXt%(LIN9C{R6`c1NLX(NblthkDCbo+2QU{wxW}dnL_iNh?2sBQik9oiQ>~io{f((22 zrN)hVi|)oRjujfSVNovzSGFW5Xy$Jz9M$LKf2wN|QnL(GAi3^e{ISV1va^}sB{W9c zm!;imN8JN4w^7`_m9p6=FldCVPxqz8;wPtfHsjh??_Fov%3X@1@K{6dbSjsCk5lYPElT~G5)AT-> zp;gFM$#d@S6ukvMZ@P-8~LL1O3QQ_ zyV@luciw4@M^D!$Y+1#eiXA`?NEOzCv0im@XcuBI@P0_xDXXgN)siva7VuRLSTkgJ z_epwiA%3u=Nje~T$0TQ>h$pB*u#hxy%BGCWElIAGB#KVoi1M*5ma{*%_V6&lCV%Nr zk${`W7J`|%uq!uKKu_?cAbxxBjbJUdE@ve0CS+V!4eg$O@8bl9$%pw5QWm?M;*lU9 zsC(;)ZocnN37vJB7Sb22`Gi|*CET>xty#O=DY+_q6E z`(UL_bwk#|(HgmT$E6sfuV53yC9GZy3F9^8M{#Vnd$c%2OtJ`Cnp0j&lBZ!uAG6RD zu$?d`ZmXOy3LPK@#fLInis~09bDF147NZPUOnue6?&3{2+K0e8Zu5ESwtQwJPcBlxAB(5P9D`Wk% zQ%KvXajIIdl5sSMJUlSqp10?ETPy!!Qyhl`@=0a z)F%=#pc0aDolaME5z6IpnAO}%ZW<4c=)+)UBhG~Ir{$`3B5#ARDC-~0HE()5i>jkv zbq~@ry{ohmG4RYb1{wLDYJmlbK%eJMb<=FE2o@h#*mVP5FRWT&*+;YM^79Qwdt;CA ziLC{+Ex_ZwSV5CL5{kj2c!kpQ8RPR+T^_C!^|DlDXBMVyedS`=biARe0Z#e6@4U(EbbtH)seuq@`{}pRv?TfkcOq2- z^@m#m*K3D&&5?HB;IkLTD!jXucx#D7@3C?&qq-U0BUK&dhqKO<3(oIsC)nAR*l+H) zwQWo%yat}P%w9WY#H~}vJgUr$*BjgT_;yF6yVjAY?fB9YQG${_!ZDlKjVU$lG-O)q zFRl+J?Y8tGAzKx$;@(~wbj4h&+lbf*#2vFVu>_jrXaOV4l|h`8Z;f4!@kyUJ^X<7v z?#{Gc89);v)GWleuAG&m?xya_UbvI#cF*LfCM1#emA}sm@-nL#$~QzK3!fw(IADKr zu*D)LMWmS%)mkjV&69hvy}T0R6W(rwghs_qWXn`1a@T~9TcalR5bTNjETB{%TPRWg zP#Gs7Umn#^*-w#gWOVzB;J&e~Z3GK1B$15*H2>l-G#-XxV$ioa!eZ@QcPprAxkO-y zN0?|@XLG5*zLS~GhHm5%U+laIbUpVCVK3EU>E}V;M}W=w&m_0aW2OQ z(F&av?UL!_?dp&tea7@`V zE0a~2dfceIMuJ{>%RpUv~rm(phOsRP76ct5vF!Ue3di)UqhL@B3=dDm@L66|~ zL;-Q(#0_9jc*Hc2tb!QuVo^1>hQipyZLN$&InE*jND<#0SV;{z9%`s+#n5eV@ETX4hCHHKm7fV`CLFWFz&M`Rq$Fk zIXF0|AiybH^yAG7$aujVR6mNsk6d5~#+e+R_dmRU)&tZ5ujlN|!2xs)41_P@;{%@^ zf28@&W)TdAP;o=x0kYsJcp3h)s68AQ-}3=YULYRMMeVcBpU=hlh<-E-Z|ba*fC3Lt z4O|g^gy;W|0|NpYgXh3g@F{?&fm{suk>k8P(4jM(GYP!IKZbr*8$S;f7Z)&_!11j8 zf1UfYn$PNh_v}CZ{fB&D8sT9lZH#P<&23Dn_|Bq<{r>c-Uy-)Xa=$|p9>(XV-WgDT zR05#NM$86g{_|YY+{6S5guw*jUg}_Q^MmZ2Y#pHv=B8$j82mgSBXb8MCu-Pow00Kt+i+ynM{;$~w9{_F+D){Gl>U_0+od1~%oMT+f`!oHkrXM-qS07ks zxa6Pn&vP!8_=TI_wSM*PLg|04`$r!x)_*~EHj=-4bfLu0c{#5E_`HC~zrgg{e`9_@ z;w(PgpR6f%ku{ZpxNkOp!-Dhd`D=gEChxz&f)D(^1`9X`0;IqJIirB{Y5zetKWT*z zAcXJq`hUxra1#1XNkA=U^aCv8PmcV~nQ$(IlL=f7f1mXLAgQx*Kpy0K8aV$>V{pEN zYrr*sXu+8ko`#R&jJUpk!a;UMmjEy?9)FGxkpJi>oCx7*I9q=w#h?4bk6yv^e-I|T zy&q|K-8>LLAKngd1pa`Q&w6t<%jfAIpa1XV3AA?so>ah21cZA1H^My2{a+z~}7vFV=OI`~PtqJiO;Tj=>4x z00GbZb2PWJa=Xy=v#^eTTCmhb3zi0gRGJ(8g9*b?r~KFWfY^8c!t6Yp|H~%)16CK0 z7mfA@6ffrgmOg_j+?;;6BIgduxv`#?ghLkYQ2=M(-Ip`N1>g?P`K`7eXF#nN%>$l> zo5@8Jf~S8;FBsIB;Q^)$_f~-S4;_HX0pmY2Hn{Ht5|C#f>55Jks`I7w` z+%D|z|F3?=PY>cE#Nd6q2xGV(@XLih^Qh0f=6`dy#eq=YI&45BO*SqLJ}Q0)Kz|%O zdhj5IrZ6fV43HSi2p;Vl5CVa^4eahf;ZDx^DZCkY9$XUxbPi=P8&e?AC=ioW#Sv<) zPQ}Rs#sJBi!(f0XcIKJGi65v4aNL1F;fx?TkQm7A+=xInAR~}GNF3x2vIQA~BtUi` zC~(WD2}lWa3*-PY1xbNmATy9M$Pr`?QUTooIe}C`(jdzV-WEs={d z$PTF4))>&T0$PVz8NkeddaTXQ&)uO8w(t`0c|5BKde*cR6b1v?0?I(#R;UBaz{VJ4 zXy5>X+B+FofgD|IFZi41TIY?MIzWLC?G7MEGY2TpFno~k>X^<@00eD?as&GtfEVRo zPR5xF`QPB@AAQkt@NjZbv2jA+d*|6z%Mb7X?#6fU0QPkeJZGmr!2@Xi3wZc}>pU^% z@3;YcC;&+YuIDH^Kf8#lGsz#gf+Ol2O$rzAbP-K(ES=-X`8#yf&mg1me~FWGh@2zi zJBI!N4`){i#)eksz_4+$HUt*e+|&l-WMd4ZjBFjC{|P7XiqG)@hXx!5XOi=V{?nSn z8TP`OpZSOX&6@wKvw6PmfGfbp1w?n|2SVTSK_EZY{TFEf!r#^%e)@CW0nL9|cTR5p z|AI8&i>rBoFn%ntB0w7U|3DkJFA#^t8Fe@V(V`ML1_KeEMtq>0~Q@trR&pyPMy zIE(!JCx!eDjeqBgGdJtMh0R%f>R(g=SoeRo)%?4M^PMkv!0zR@YPLgfr+7+V`EPIgWRJ13K{@b{+^xjH~i z0PhCOjRAbK_5DS~$IHvjOJzcJF5}|h0QsyNs8MhX?S?ev@%=aPtE`(;qSj zKQP=sWMII*`cuXWY#hJKI3eJ_>H|u^FNfi;pMBxr;DHD2{!PZq!2|iTT^=wm_)lG4 zE>3tn`rmYU_#yC%g5PAkoV@U;_rJ+_Ap9JEkC%@R@Wg&A2Y5yNf66!^{Jeka0^ z9pg6{fW^PogOi`@?{V<(0EqfsmjlcJ{vn3*Ej%O`1Q>1<+wTi zVg9)P!Xzg@1RkIMPu;)z%*g})Lg4puT%0`c=$pE;{2cI*^1qkk=K%Jd-(}p~{C}+nAmjgYY&=}tf6W0P`wM>n=kWe%GXOL3{Mi>C ze%`-0hld~hmy8!M-wX9QIv4=nyaVw66e^I4xjPi#aVn6qt*s*!us~GGR3K>^6I&{v eF)C#YVE=(R8aOzfF+MLBz_%E5bhi|xF#Zq1i(W1O literal 0 HcmV?d00001 diff --git a/src/olddocs/ego.html b/src/olddocs/ego.html new file mode 100644 index 000000000..4d6353a76 --- /dev/null +++ b/src/olddocs/ego.html @@ -0,0 +1,9470 @@ + + + + + + +The design and implementation of the EM Global Optimizer + + + +

The design and implementation of the EM Global Optimizer

+1. Introduction
+2. Overview of the global optimizer
+2.1. The ACK compilation process
+2.2. The EM code
+2.3. Requirements on the EM input
+2.4. Structure of the optimizer
+2.5. Structure of this document
+2.6. References
+3. The Intermediate Code and the IC phase
+3.1. Introduction
+3.2. Representation of complex data structures in a sequential file
+3.3. Definition of the intermediate code
+3.3.1. The object table
+3.3.2. The procedure table
+3.3.3. The EM text
+3.3.4. The control flow graphs
+3.3.5. The loop tables
+3.4. External representation of the intermediate code
+3.5. The Intermediate Code construction phase
+3.5.1. Implementation
+3.5.2. Source files of IC
+4. The Control Flow Phase
+4.1. Partitioning into basic blocks
+4.2. Control Flow
+4.3. Immediate dominators
+4.4. Loop detection
+4.5. Interprocedural analysis
+4.6. Source files
+5. Inline substitution
+5.1. Introduction
+5.2. Parameters and local variables.
+5.3. Feasibility and desirability analysis
+5.4. Heuristic rules
+5.5. Implementation
+5.5.1. Data structures
+5.5.1.1. The procedure table
+5.5.1.2. Call-count information
+5.5.1.3. The call-list
+5.5.2. The first subphase: procedure analysis
+5.5.3. The second subphase: making decisions
+5.5.4. The third subphase: doing transformations
+5.6. Source files of IL
+6. Strength reduction
+6.1. Introduction
+6.2. The model of strength reduction
+6.2.1. Induction variables
+6.2.2. Recognized expressions
+6.2.3. Transformations
+6.3. Implementation
+6.3.1. Finding induction variables
+6.3.2. Optimizing expressions
+6.4. Source files of SR
+7. Common subexpression elimination
+7.1. Introduction
+7.2. Specification of the Common Subexpression Elimination phase
+7.2.1. The working window
+7.2.2. Recognized expressions.
+7.2.3. Transformations
+7.3. Implementation
+7.3.1. The value number method
+7.3.2. Entities
+7.3.3. Parsing expressions
+7.3.4. Updating entities
+7.3.5. Changing the EM text
+7.3.6. Desirability analysis
+7.3.7. The algorithm
+7.4. Implementation.
+7.4.1. Partioning the EM instructions
+7.4.2. Parsing expressions
+7.4.3. Updating entities
+7.4.4. Additions and replacements.
+7.4.5. Desirability analysis
+7.4.6. The algorithm
+7.5. Source files of CS
+8. Stack pollution
+8.1. Introduction
+8.2. Implementation
+9. Cross jumping
+9.1. Introduction
+9.2. Implementation
+10. Branch Optimization
+10.1. Introduction
+10.1.1. Fusion of basic blocks
+10.1.2. While-loop optimization
+10.2. Implementation
+11. Use-Definition analysis
+11.1. Introduction
+11.2. Data flow information
+11.2.1. Use-Definition information
+11.2.2. Copy information
+11.3. Pointers and subroutine calls
+11.4. Implementation
+11.5. Source files of UD
+12. Live-Variable analysis
+12.1. Introduction
+12.2. Implementation
+13. Register Allocation
+13.1. Introduction
+13.2. Usage of registers in ACK compilers
+13.2.1. Usage of registers without the intervention of the Global Optimizer
+13.2.2. The role of the Global Optimizer
+13.2.3. The interface between the register allocator and the code generator
+13.3. The register allocation phase
+13.3.1. Overview
+13.3.2. The item recognition subphase
+13.3.3. The allocation determination subphase
+13.3.4. The rivals computation subphase
+13.3.5. The profits computation subphase
+13.3.6. The packing subphase
+13.3.7. The transformation subphase
+13.4. Source files of RA
+14. Compact assembly generation
+14.1. Introduction
+14.2. Implementation
+Acknowledgements
+References
+References
+ +
+ +

ABSTRACT

+ +

H.E. Bal
+Vrije Universiteit
+Wiskundig Seminarium, Amsterdam

+ +

The EM Global Optimizer is part of the Amsterdam +Compiler Kit, a toolkit for making retargetable compilers. +It optimizes the intermediate code common to all compilers +of the toolkit (EM), so it can be used for all programming +languages and all processors supported by the kit.

+ +

The optimizer is based on well-understood concepts like +control flow analysis and data flow analysis. It performs +the following optimizations: Inline Substitution, Strength +Reduction, Common Subexpression Elimination, Stack +Pollution, Cross Jumping, Branch Optimization, Copy +Propagation, Constant Propagation, Dead Code Elimination and +Register Allocation.

+ +

This report describes the design of the optimizer and +several of its implementation issues.

+ +

1. Introduction

+ +

+ +

The EM Global Optimizer is part of a software toolkit +for making production-quality retargetable compilers. This +toolkit, called the Amsterdam Compiler Kit [Tane81a, +Tane83b] runs under the Unix*

+ +

+ +

operating system.
+The main design philosophy of the toolkit is to use a +language- and machine-independent intermediate code, called +EM. [Tane83a] The basic compilation process can be split up +into two parts. A language-specific front end translates the +source program into EM. A machine-specific back end +transforms EM to assembly code of the target machine.

+ +

The global optimizer is an optional phase of the +compilation process, and can be used to obtain machine code +of a higher quality. The optimizer transforms EM-code to +better EM-code, so it comes between the front end and the +back end. It can be used with any combination of languages +and machines, as far as they are supported by the compiler +kit.

+ +

This report describes the design of the global optimizer +and several of its implementation issues. Measurements can +be found in. [Bal86a]

+ +

2. Overview of the global optimizer

+ +

2.1. The ACK compilation process

+ +

The EM Global Optimizer is one of three optimizers that +are part of the Amsterdam Compiler Kit (ACK). The phases of +ACK are:

+ + + + + + + +
+ +

1.

+
+ +

A Front End translates a source program to EM

+
+
+ + + + + + +
+ +

2.

+
+ +

The Peephole Optimizer [a] reads EM code and produces +’better’ EM code. It performs a number of +optimizations (mostly peephole optimizations) such as +constant folding, strength reduction and unreachable code +elimination.

+
+ + + + + + +
+ +

3.

+
+ +

The Global Optimizer further improves the EM code.

+
+ + + + + + +
+ +

4.

+
+ +

The Code Generator transforms EM to assembly code of the +target computer.

+
+ + + + + + +
+ +

5.

+
+ +

The Target Optimizer improves the assembly code.

+
+ + + + + + +
+ +

6.

+
+ +

An Assembler/Loader generates an executable file.

+
+ +

For a more extensive overview of the ACK compilation +process, we refer to. [Tane81a, Tane83b]

+ +

The input of the Global Optimizer may consist of files +and libraries. Every file or module in the library must +contain EM code in Compact Assembly Language format. +[Tane83a, section 11.2] The output consists of one such EM +file. The input files and libraries together need not +constitute an entire program, although as much of the +program as possible should be supplied. The more information +about the program the optimizer gets, the better its output +code will be.

+ +

The Global Optimizer is language- and +machine-independent, i.e. it can be used for all languages +and machines supported by ACK. Yet, it puts some unavoidable +restrictions on the EM code produced by the Front End (see +below). It must have some knowledge of the target machine. +This knowledge is expressed in a machine description table +which is passed as argument to the optimizer. This table +does not contain very detailed information about the target +(such as its instruction set and addressing modes).

+ +

2.2. The EM code

+ +

The definition of EM, the intermediate code of all ACK +compilers, is given in a separate document. [Tane83a] We +will only discuss some features of EM that are most relevant +to the Global Optimizer.

+ +

EM is the assembly code of a virtual stack +machine. All operations are performed on the top of the +stack. For example, the statement "A := B + 3" may +be expressed in EM as:

+ +

+ +

So EM is essentially a postfix code.

+ +

EM has a rich instruction set, containing several +arithmetic and logical operators. It also contains +special-case instructions (such as INCrement).

+ +

EM has global (external) variables, +accessible by all procedures and local variables, +accessible by a few (nested) procedures. The local variables +of a lexically enclosing procedure may be accessed via a +static link. EM has instructions to follow the static +chain. There are EM instruction to allow a procedure to +access its local variables directly (such as LOL and STL +above). Local variables are referenced via an offset in the +stack frame of the procedure, rather than by their names +(e.g. -2 and -4 above). The EM code does not contain the +(source language) type of the variables.

+ +

All structured statements in the source program are +expressed in low level jump instructions. Besides +conditional and unconditional branch instructions, there are +two case instructions (CSA and CSB), to allow efficient +translation of case statements.

+ +

2.3. Requirements on the EM input

+ +

As the optimizer should be useful for all languages, it +clearly should not put severe restrictions on the EM code of +the input. There is, however, one immovable requirement: it +must be possible to determine the flow of control of +the input program. As virtually all global optimizations are +based on control flow information, the optimizer would be +totally powerless without it. For this reason we restrict +the usage of the case jump instructions (CSA/CSB) of EM. +Such an instruction is always called with the address of a +case descriptor on top the the stack. [Tane83a section 7.4] +This descriptor contains the labels of all possible +destinations of the jump. We demand that all case +descriptors are allocated in a global data fragment of type +ROM, i.e. the case descriptors may not be modifyable. +Furthermore, any case instruction should be immediately +preceded by a LAE (Load Address External) instruction, that +loads the address of the descriptor, so the descriptor can +be uniquely identified.

+ +

The optimizer will work improperly if the user deceives +the control flow. We will give two methods to do this.

+ +

In "C" the notorious library routines +"setjmp" and "longjmp" [Kern79a] may be +used to jump out of a procedure, but can also be used for a +number of other stuffy purposes, for example, to create an +extra entry point in a loop.

+
      while (condition) {
+
+ + + + + +

....
+setjmp(buf);
+...

+
+ +

}
+...
+longjmp(buf);

+ +

The invocation to longjmp actually is a jump to the +place of the last call to setjmp with the same argument +(buf). As the calls to setjmp and longjmp are +indistinguishable from normal procedure calls, the optimizer +will not see the danger. No need to say that several loop +optimizations will behave unexpectedly when presented with +such pathological input.

+ +

Another way to deceive the flow of control is by using +exception handling routines. Ada*

+ +

+ +

has clearly recognized the dangers of exception +handling, but other languages (such as PL/I) have not. +[Ichb79a]

+ +

The optimizer will be more effective if the EM input +contains some extra information about the source program. +Especially the register message is very important. +These messages indicate which local variables may never be +accessed indirectly. Most optimizations benefit +significantly by this information.

+ +

The Inline Substitution technique needs to know how many +bytes of formal parameters every procedure accesses. Only +calls to procedures for which the EM code contains this +information will be substituted in line.

+ +

2.4. Structure of the optimizer

+ +

The Global Optimizer is organized as a number of +phases, each one performing some task. The main +structure is as follows:

+ + + + + + +
+ +

IC

+
+ +

the Intermediate Code construction phase transforms EM +into the intermediate code (ic) of the optimizer

+
+ + + + + + +
+ +

CF

+
+ +

the Control Flow phase extends the ic with control flow +information and interprocedural information

+
+ + + + + + +
+ +

OPTs

+
+ +

zero or more optimization phases, each one performing +one or more related optimizations

+
+ + + + + + +
+ +

CA

+
+ +

the Compact Assembly phase generates Compact Assembly +Language EM code out of ic.

+
+ +

An important issue in the design of a global optimizer +is the interaction between optimization techniques. It is +often advantageous to combine several techniques in one +algorithm that takes into account all interactions between +them. Ideally, one single algorithm should be developed that +does all optimizations simultaneously and deals with all +possible interactions. In practice, such an algorithm is +still far out of reach. Instead some rather ad hoc (albeit +important) combinations are chosen, such as Common +Subexpression Elimination and Register Allocation. [Prab80a, +Seth70a]

+ +

In the Em Global Optimizer there is one separate +algorithm for every technique. Note that this does not mean +that all techniques are independent of each other.

+ +

In principle, the optimization phases can be run in any +order; a phase may even be run more than once. However, the +following rules should be obeyed:

+ + + + + + +
+ +

-

+
+ +

the Live Variable analysis phase (LV) must be run prior +to Register Allocation (RA), as RA uses information +outputted by LV.

+
+ + + + + + +
+ +

-

+
+ +

RA should be the last phase; this is a consequence of +the way the interface between RA and the Code Generator is +defined.

+
+ +

The ordering of the phases has significant impact on the +quality of the produced code. In [Leve79a] two kinds of +phase ordering problems are distinguished. If two techniques +A and B both take away opportunities of each other, there is +a "negative" ordering problem. If, on the other +hand, both A and B introduce new optimization opportunities +for each other, the problem is called "positive". +In the Global Optimizer the following interactions must be +taken into account:

+ + + + + + +
+ +

-

+
+ +

Inline Substitution (IL) may create new opportunities +for most other techniques, so it should be run as early as +possible

+
+ + + + + + +
+ +

-

+
+ +

Use Definition analysis (UD) may introduce opportunities +for LV.

+
+ + + + + + +
+ +

-

+
+ +

Strength Reduction may create opportunities for UD

+
+ +

The optimizer has a default phase ordering, which can be +changed by the user.

+ +

2.5. Structure of this document

+ +

The remaining chapters of this document each describe +one phase of the optimizer. For every phase, we describe its +task, its design, its implementation, and its source files. +The latter two sections are intended to aid the maintenance +of the optimizer and can be skipped by the initial +reader.

+ +

2.6. References

+ +

There are very few modern textbooks on optimization. +Chapters 12, 13, and 14 of [Aho78a] are a good introduction +to the subject. Wulf et. al. [Wulf75a] describe one specific +optimizing (Bliss) compiler. Anklam et. al. [Ankl82a] +discuss code generation and optimization in compilers for +one specific machine (a Vax-11). Kirchgaesner et. al. +[Kirc83a] present a brief description of many optimizations; +the report also contains a lengthy (over 60 pages) +bibliography.

+ +

The number of articles on optimization is quite +impressive. The Lowry and Medlock paper on the Fortran H +compiler [Lowr69a] is a classical one. Other papers on +global optimization are. [Faim80a, Perk79a, Harr79a, +More79a, Mint79a] Freudenberger [Freu83a] describes an +optimizer for a Very High Level Language (SETL). The +Production-Quality Compiler-Compiler (PQCC) project uses +very sophisticated compiler techniques, as described in. +[Leve80a, Leve79a, Wulf80a]

+ +

Several Ph.D. theses are dedicated to optimization. +Davidson [Davi81a] outlines a machine-independent peephole +optimizer that improves assembly code. Katkus [Katk73a] +describes how efficient programs can be obtained at little +cost by optimizing only a small part of a program. +Photopoulos [Phot81a] discusses the idea of generating +interpreted intermediate code as well as assembly code, to +obtain programs that are both small and fast. Shaffer +[Shaf78a] describes the theory of automatic subroutine +generation. Leverett [Leve81a] deals with register +allocation in the PQCC compilers.

+ +

References to articles about specific optimization +techniques will be given in later chapters.

+ +

3. The Intermediate Code and the IC phase

+ +

In this chapter the intermediate code of the EM global +optimizer will be defined. The ’Intermediate Code +construction’ phase (IC), which builds the initial +intermediate code from EM Compact Assembly Language, will be +described.

+ +

3.1. Introduction

+ +

The EM global optimizer is a multi pass program, hence +there is a need for an intermediate code. Usually, programs +in the Amsterdam Compiler Kit use the Compact Assembly +Language format [Tane83a, section 11.2] for this purpose. +Although this code has some convenient features, such as +being compact, it is quite unsuitable in our case, because +of a number of reasons. At first, the code lacks global +information about whole procedures or whole basic blocks. +Second, it uses identifiers (’names’) to bind +defining and applied occurrences of procedures, data labels +and instruction labels. Although this is usual in high level +programming languages, it is awkward in an intermediate code +that must be read many times. Each pass of the optimizer +would have to incorporate an identifier look-up mechanism to +associate a defining occurrence with each applied occurrence +of an identifier. Finally, EM programs are used to declare +blocks of bytes, rather than variables. A ’hol +6’ instruction may be used to declare three 2-byte +variables. Clearly, the optimizer wants to deal with +variables, and not with rows of bytes.

+ +

To overcome these problems, we have developed a new +intermediate code. This code does not merely consist of the +EM instructions, but also contains global information in the +form of tables and graphs. Before describing the +intermediate code we will first leap aside to outline the +problems one generally encounters when trying to store +complex data structures such as graphs outside the program, +i.e. in a file. We trust this will enhance the +comprehensibility of the intermediate code definition and +the design and implementation of the IC phase.

+ +

3.2. Representation of complex data structures in a sequential file

+ +

Most programmers are quite used to deal with complex +data structures, such as arrays, graphs and trees. There are +some particular problems that occur when storing such a data +structure in a sequential file. We call data that is kept in +main memory internal ,as opposed to external data that is +kept in a file outside the program.

+ +

We assume a simple data structure of a scalar type +(integer, floating point number) has some known external +representation. An array having elements of a scalar type +can be represented externally easily, by successively +representing its elements. The external representation may +be preceded by a number, giving the length of the array. +Now, consider a linear, singly linked list, the elements of +which look like:

+
     record
+             data: scalar_type;
+             next: pointer_type;
+     end;
+
+ +

It is significant to note that the "next" +fields of the elements only have a meaning within main +memory. The field contains the address of some location in +main memory. If a list element is written to a file in some +program, and read by another program, the element will be +allocated at a different address in main memory. Hence this +address value is completely useless outside the program.

+ +

One may represent the list by ignoring these +"next" fields and storing the data items in the +order they are linked. The "next" fields are +represented implicitly. When the file is read again, +the same list can be reconstructed. In order to know where +the external representation of the list ends, it may be +useful to put the length of the list in front of it.

+ +

Note that arrays and linear lists have the same external +representation.

+ +

A doubly linked, linear list, with elements of the +type:

+
     record
+             data: scalar_type;
+             next,
+             previous: pointer_type;
+     end
+
+ +

can be represented in precisely the same way. Both the +"next" and the "previous" fields are +represented implicitly.

+ +

Next, consider a binary tree, the nodes of which have +type:

+
     record
+             data: scalar_type;
+             left,
+             right: pointer_type;
+     end
+
+ +

Such a tree can be represented sequentially, by storing +its nodes in some fixed order, e.g. prefix order. A special +null data item may be used to denote a missing left or right +son. For example, let the scalar type be integer, and let +the null item be 0. Then the tree of fig. 3.1(a) can be +represented as in fig. 3.1(b).

+
                             4
+                           /   \
+                         9      12
+                       /  \    /  \
+                     12    3   4   6
+                          / \  \  /
+                          8  1  5 1
+
+
+     Fig. 3.1(a) A binary tree
+
+
+
+
+     4 9 12 0 0 3 8 0 0 1 0 0 12 4 0 5 0 0 6 1 0 0 0
+
+
+     Fig. 3.1(b) Its sequential representation
+
+ +

We are still able to represent the pointer fields +("left" and "right") implicitly.

+ +

Finally, consider a general graph , where each node has +a "data" field and pointer fields, with no +restriction on where they may point to. Now we’re at +the end of our tale. There is no way to represent the +pointers implicitly, like we did with lists and trees. In +order to represent them explicitly, we use the following +scheme. Every node gets an extra field, containing some +unique number that identifies the node. We call this number +its id. A pointer is represented externally as the id of the +node it points to. When reading the file we use a table that +maps an id to the address of its node. In general this table +will not be completely filled in until we have read the +entire external representation of the graph and allocated +internal memory locations for every node. Hence we cannot +reconstruct the graph in one scan. That is, there may be +some pointers from node A to B, where B is placed after A in +the sequential file than A. When we read the node of A we +cannot map the id of B to the address of node B, as we have +not yet allocated node B. We can overcome this problem if +the size of every node is known in advance. In this case we +can allocate memory for a node on first reference. Else, the +mapping from id to pointer cannot be done while reading +nodes. The mapping can be done either in an extra scan or at +every reference to the node.

+ +

3.3. Definition of the intermediate code

+ +

The intermediate code of the optimizer consists of +several components:

+ + + + + + + +
+ +

-

+
+ +

the object table

+
+
+ + + + + + + +
+ +

-

+
+ +

the procedure table

+
+
+ + + + + + + +
+ +

-

+
+ +

the em code

+
+
+ + + + + + + +
+ +

-

+
+ +

the control flow graphs

+
+
+ + + + + + + +
+ +

-

+
+ +

the loop table

+
+
+ +

These components are described in the next sections. The +syntactic structure of every component is described by a set +of context free syntax rules, with the following +conventions:

+ +

+ +

3.3.1. The object table

+ +

EM programs declare blocks of bytes rather than (global) +variables. A typical program may declare ’HOL +7780’ to allocate space for 8 I/O buffers, 2 large +arrays and 10 scalar variables. The optimizer wants to deal +with objects like variables, buffers and arrays and +certainly not with huge numbers of bytes. Therefore the +intermediate code contains information about which global +objects are used. This information can be obtained from an +EM program by just looking at the operands of instruction +such as LOE, LAE, LDE, STE, SDE, INE, DEE and ZRE.

+ +

The object table consists of a list of datablock +entries. Each such entry represents a declaration like HOL, +BSS, CON or ROM. There are five kinds of datablock entries. +The fifth kind, UNKNOWN, denotes a declaration in a +separately compiled file that is not made available to the +optimizer. Each datablock entry contains the type of the +block, its size, and a description of the objects that +belong to it. If it is a rom, it also contains a list of +values given as arguments to the rom instruction, provided +that this list contains only integer numbers. An object has +an offset (within its datablock) and a size. The size need +not always be determinable. Both datablock and object +contain a unique identifying number (see previous section +for their use).

+
     syntax
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +

+ +

A data block has only one flag: "external", +indicating whether the data label is externally visible. The +syntax for "argument" will be given later on (see +em_text).

+ +

3.3.2. The procedure table

+ +

The procedure table contains global information about +all procedures that are made available to the optimizer and +that are needed by the EM program. (Library units may not be +needed, see section 3.5). The table has one entry for every +procedure.

+
     syntax
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +

+ +

The number of bytes of formal parameters accessed by a +procedure is determined by the front ends and passed via a +message (parameter message) to the optimizer. If the front +end is not able to determine this number (e.g. the parameter +may be an array of dynamic size or the procedure may have a +variable number of arguments) the attribute contains the +value ’UNKNOWN_SIZE’.
+A procedure has the following flags:

+ + + + + + +
+ +

-

+
+ +

external: true if the proc. is externally visible

+
+ + + + + + +
+ +

-

+
+ +

bodyseen: true if its code is available as EM text

+
+ + + + + + +
+ +

-

+
+ +

calunknown: true if it calls a procedure that has its +bodyseen flag not set

+
+ + + + + + +
+ +

-

+
+ +

environ: true if it uses or changes a (non-global) +variable in a lexically enclosing procedure

+
+ + + + + + +
+ +

-

+
+ +

lpi: true if is used as operand of an lpi instruction, +so it may be called indirect

+
+ +

The change and use attributes both have one flag: +"indirect", indicating whether the procedure does +a ’use indirect’ or a ’store +indirect’ (indirect means through a pointer).

+ +

3.3.3. The EM text

+ +

The EM text contains the EM instructions. Every EM +instruction has an operation code (opcode) and 0 or 1 +operands. EM pseudo instructions can have more than 1 +operand. The opcode is just a small (8 bit) integer.

+ +

There are several kinds of operands, which we will refer +to as types. Many EM instructions can have more than one +type of operand. The types and their encodings in Compact +Assembly Language are discussed extensively in. [Tane83a, +section 11.2] Of special interest is the way numeric values +are represented. Of prime importance is the machine +independency of the representation. Ultimately, one could +store every integer just as a string of the characters +’0’ to ’9’. As doing arithmetic on +strings is awkward, Compact Assembly Language allows several +alternatives. The main idea is to look at the value of the +integer. Integers that fit in 16, 32 or 64 bits are +represented as a row of resp. 2, 4 and 8 bytes, preceded by +an indication of how many bytes are used. Longer integers +are represented as strings; this is only allowed within +pseudo instructions, however. This concept works very well +for target machines with reasonable word sizes. At present, +most ACK software cannot be used for word sizes higher than +32 bits, although the handles for using larger word sizes +are present in the design of the EM code. In the +intermediate code we essentially use the same ideas. We +allow three representations of integers.

+ + + + + + +
+ +

-

+
+ +

integers that fit in a short are represented as a +short

+
+ + + + + + +
+ +

-

+
+ +

integers that fit in a long but not in a short are +represented as longs

+
+ + + + + + +
+ +

-

+
+ +

all remaining integers are represented as strings (only +allowed in pseudos).

+
+ +

The terms short and long are defined in [Ritc78a, +section 4] and depend only on the source machine (i.e. the +machine on which ACK runs), not on the target machines. For +historical reasons a long will often be called an +offset.

+ +

Operands can also be instruction labels, objects or +procedures. Instruction labels are denoted by a label +identifier, which can be distinguished from a normal +identifier.

+ +

The operand of a pseudo instruction can be a list of +arguments. Arguments can have the same type as operands, +except for the type short, which is not used for arguments. +Furthermore, an argument can be a string or a string +representation of a signed integer, unsigned integer or +floating point number. If the number of arguments is not +fully determined by the pseudo instruction (e.g. a ROM +pseudo can have any number of arguments), then the list is +terminated by a special argument of type CEND.

+
     syntax
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +

+ +

3.3.4. The control flow graphs

+ +

Each procedure can be divided into a number of basic +blocks. A basic block is a piece of code with no jumps in, +except at the beginning, and no jumps out, except at the +end.

+ +

Every basic block has a set of successors, which are +basic blocks that can follow it immediately in the dynamic +execution sequence. The predecessors are the basic blocks of +which this one is a successor. The successor and predecessor +attributes of all basic blocks of a single procedure are +said to form the control flow graph of that procedure.

+ +

Another important attribute is the immediate dominator. +A basic block B dominates a block C if every path in the +graph from the procedure entry block to C goes through B. +The immediate dominator of C is the closest dominator of C +on any path from the entry block. (Note that the dominator +relation is transitive, so the immediate dominator is well +defined.)

+ +

A basic block also has an attribute containing the +identifiers of every loop that the block belongs to (see +next section for loops).

+
     syntax
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +

+ +

The flag bits can have the values ’firm’ and +’strong’, which are explained below.

+ +

3.3.5. The loop tables

+ +

Every procedure has an associated loop table containing +information about all the loops in the procedure. Loops can +be detected by a close inspection of the control flow graph. +The main idea is to look for two basic blocks, B and C, for +which the following holds:

+ + + + + + + +
+ +

-

+
+ +

B is a successor of C

+
+
+ + + + + + + +
+ +

-

+
+ +

B is a dominator of C

+
+
+ +

B is called the loop entry and C is called the loop end. +Intuitively, C contains a jump backwards to the beginning of +the loop (B).

+ +

A loop L1 is said to be nested within loop L2 if all +basic blocks of L1 are also part of L2. It is important to +note that loops could originally be written as a well +structured for -or while loop or as a messy goto loop. Hence +loops may partly overlap without one being nested inside the +other. The nesting level of a loop is the number of loops in +which it is nested (so it is 0 for an outermost loop). The +details of loop detection will be discussed later.

+ +

It is often desirable to know whether a basic block gets +executed during every iteration of a loop. This leads to the +following definitions:

+ + + + + + +
+ +

-

+
+ +

A basic block B of a loop L is said to be a firm +block of L if B is executed on all successive iterations of +L, with the only possible exception of the last +iteration.

+
+ + + + + + +
+ +

-

+
+ +

A basic block B of a loop L is said to be a +strong block of L if B is executed on all successive +iterations of L.

+
+ +

Note that a strong block is also a firm block. If a +block is part of a conditional statement, it is neither +strong nor firm, as it may be skipped during some iterations +(see Fig. 3.2).

+
     loop
+            if cond1 then
+
+ + + + + +

... -- this code will not

+ + + + +
+ +

-- result in a firm or strong block

+
+
+ +

end if;
+... -- strong (always executed)
+exit when cond2;
+... -- firm (not executed on last iteration).
+end loop;

+ +

Fig. 3.2 Example of firm and strong block

+
     syntax
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +

+ +

3.4. External representation of the intermediate code

+ +

The syntax of the intermediate code was given in the +previous section. In this section we will make some remarks +about the representation of the code in sequential +files.

+ +

We use sequential files in order to avoid the +bookkeeping of complex file indices. As a consequence of +this decision we can’t store all components of the +intermediate code in one file. If a phase wishes to change +some attribute of a procedure, or wants to add or delete +entire procedures (inline substitution may do the latter), +the procedure table will only be fully updated after the +entire EM text has been scanned. Yet, the next phase +undoubtedly wants to read the procedure table before it +starts working on the EM text. Hence there is an ordering +problem, which can be solved easily by putting the procedure +table in a separate file. Similarly, the data block table is +kept in a file of its own.

+ +

The control flow graphs (CFGs) could be mixed with the +EM text. Rather, we have chosen to put them in a separate +file too. The control flow graph file should be regarded as +a file that imposes some structure on the EM-text file, just +as an overhead sheet containing a picture of a Flow Chart +may be put on an overhead sheet containing statements. The +loop tables are also put in the CFG file. A loop imposes an +extra structure on the CFGs and hence on the EM text. So +there are four files:

+ + + + + + + +
+ +

-

+
+ +

the EM-text file

+
+
+ + + + + + + +
+ +

-

+
+ +

the procedure table file

+
+
+ + + + + + + +
+ +

-

+
+ +

the object table file

+
+
+ + + + + + + +
+ +

-

+
+ +

the CFG and loop tables file

+
+
+ +

Every table is preceded by its length, in order to tell +where it ends. The CFG file also contains the number of +instructions of every basic block, indicating which part of +the EM text belongs to that block.

+
     syntax
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +

+ +

3.5. The Intermediate Code construction phase

+ +

The first phase of the global optimizer, called IC, +constructs a major part of the intermediate code. To be +specific, it produces:

+ + + + + + + +
+ +

-

+
+ +

the EM text

+
+
+ + + + + + + +
+ +

-

+
+ +

the object table

+
+
+ + + + + + + +
+ +

-

+
+ +

part of the procedure table

+
+
+ +

The calling, change and use attributes of a procedure +and all its flags except the external and bodyseen flags are +computed by the next phase (Control Flow phase).

+ +

As explained before, the intermediate code does not +contain any names of variables or procedures. The normal +identifiers are replaced by identifying numbers. Yet, the +output of the global optimizer must contain normal +identifiers, as this output is in Compact Assembly Language +format. We certainly want all externally visible names to be +the same in the input as in the output, because the +optimized EM module may be a library unit, used by other +modules. IC dumps the names of all procedures and data +labels on two files:

+ + + + + + +
+ +

-

+
+ +

the procedure dump file, containing tuples (P_ID, +procedure name)

+
+ + + + + + +
+ +

-

+
+ +

the data dump file, containing tuples (D_ID, data label +name)

+
+ +

The names of instruction labels are not dumped, as they +are not visible outside the procedure in which they are +defined.

+ +

The input to IC consists of one or more files. Each file +is either an EM module in Compact Assembly Language format, +or a Unix archive file (library) containing such modules. IC +only extracts those modules from a library that are needed +somehow, just as a linker does. It is advisable to present +as much code of the EM program as possible to the optimizer, +although it is not required to present the whole program. If +a procedure is called somewhere in the EM text, but its body +(text) is not included in the input, its bodyseen flag in +the procedure table will still be off. Whenever such a +procedure is called, we assume the worst case for +everything; it will change and use all variables it has +access to, it will call every procedure etc.

+ +

Similarly, if a data label is used but not defined, the +PSEUDO attribute in its data block will be set to +UNKNOWN.

+ +

3.5.1. Implementation

+ +

Part of the code for the EM Peephole Optimizer [b] has +been used for IC. Especially the routines that read and +unravel Compact Assembly Language and the identifier lookup +mechanism have been used. New code was added to recognize +objects, build the object and procedure tables and to output +the intermediate code.

+ +

IC uses singly linked linear lists for both the +procedure and object table. Hence there are no limits on the +size of such a table (except for the trivial fact that it +must fit in main memory). Both tables are outputted after +all EM code has been processed. IC reads the EM text of one +entire procedure at a time, processes it and appends the +modified code to the EM text file. EM code is represented +internally as a doubly linked linear list of EM +instructions.

+ +

Objects are recognized by looking at the operands of +instructions that reference global data. If we come across +the instructions:

+ +

+ +

we conclude that the data block preceded by the data +label X contains an object at offset 6 of size twice the +word size, and an object at offset 20 of unknown size.

+ +

A data block entry of the object table is allocated at +the first reference to a data label. If this reference is a +defining occurrence or a INA pseudo instruction, the label +is not externally visible [Tane83a, section 11.1.4.3] In +this case, the external flag of the data block is turned +off. If the first reference is an applied occurrence or a +EXA pseudo instruction, the flag is set. We record this +information, because the optimizer may change the order of +defining and applied occurrences. The INA and EXA pseudos +are removed from the EM text. They may be regenerated by the +last phase of the optimizer.

+ +

Similar rules hold for the procedure table and the INP +and EXP pseudos.

+ +

3.5.2. Source files of IC

+ +

The source files of IC consist of the files ic.c, ic.h +and several packages. ic.h contains type definitions, macros +and variable declarations that may be used by ic.c and by +every package. ic.c contains the definitions of these +variables, the procedure main and some high level I/O +routines used by main.

+ +

Every package xxx consists of two files. ic_xxx.h +contains type definitions, macros, variable declarations and +procedure declarations that may be used by every .c file +that includes this .h file. The file ic_xxx.c provides the +definitions of these variables and the implementation of the +declared procedures. IC uses the following packages:

+ + + + + + +
+ +

lookup:

+
+ +

procedures that loop up procedure, data label and +instruction label names; procedures to dump the procedure +and data label names.

+
+ + + + + + +
+ +

lib:

+
+ +

one procedure that gets the next useful input module; +while scanning archives, it skips unnecessary modules.

+
+ + + + + + + +
+ +

aux:

+
+ +

several auxiliary routines.

+
+
+ + + + + + +
+ +

io:

+
+ +

low-level I/O routines that unravel the Compact Assembly +Language.

+
+ + + + + + +
+ +

put:

+
+ +

routines that output the intermediate code

+
+ +

4. The Control Flow Phase

+ +

In the previous chapter we described the intermediate +code of the global optimizer. We also specified which part +of this code was constructed by the IC phase of the +optimizer. The Control Flow Phase (CF) does the +remainder of the job, i.e. it determines:

+ + + + + + + +
+ +

-

+
+ +

the control flow graphs

+
+
+ + + + + + + +
+ +

-

+
+ +

the loop tables

+
+
+ + + + + + +
+ +

-

+
+ +

the calling, change and use attributes of the procedure +table entries

+
+ +

CF operates on one procedure at a time. For every +procedure it first reads the EM instructions from the +EM-text file and groups them into basic blocks. For every +basic block, its successors and predecessors are determined, +resulting in the control flow graph. Next, the immediate +dominator of every basic block is computed. Using these +dominators, any loop in the procedure is detected. Finally, +interprocedural analysis is done, after which we will know +the global effects of every procedure call on its +environment.

+ +

CF uses the same internal data structures for the +procedure table and object table as IC.

+ +

4.1. Partitioning into basic blocks

+ +

With regard to flow of control, we distinguish three +kinds of EM instructions: jump instructions, instruction +label definitions and normal instructions. Jump instructions +are all conditional or unconditional branch instructions, +the case instructions (CSA/CSB) and the RET (return) +instruction. A procedure call (CAL) is not considered to be +a jump. A defining occurrence of an instruction label is +regarded as an EM instruction.

+ +

An instruction starts a new basic block, in any of the +following cases:

+ + + + + + + +
+ +

1.

+
+ +

It is the first instruction of a procedure

+
+
+ + + + + + +
+ +

2.

+
+ +

It is the first of a list of instruction label defining +occurrences

+
+ + + + + + + +
+ +

3.

+
+ +

It follows a jump

+
+
+ +

If there are several consecutive instruction labels +(which is highly unusual), all of them are put in the same +basic block. Note that several cases may overlap, e.g. a +label definition at the beginning of a procedure or a label +following a jump.

+ +

A simple Finite State Machine is used to model the above +rules. It also recognizes the end of a procedure, marked by +an END pseudo. The basic blocks are stored internally as a +doubly linked linear list. The blocks are linked in textual +order. Every node of this list has the attributes described +in the previous chapter (see syntax rule for basic_block). +Furthermore, every node contains a pointer to its EM +instructions, which are represented internally as a linear, +doubly linked list, just as in the IC phase. However, +instead of one list per procedure (as in IC) there is now +one list per basic block.

+ +

On the fly, a table is build that maps every label +identifier to the label definition instruction. This table +is used for computing the control flow. The table is stored +as a dynamically allocated array. The length of the array is +the number of labels of the current procedure; this value +can be found in the procedure table, where it was stored by +IC.

+ +

4.2. Control Flow

+ +

A successor of a basic block B is a block C that +can be executed immediately after B. C is said to be a +predecessor of B. A block ending with a RET +instruction has no successors. Such a block is called a +return block. Any block that has no predecessors +cannot be executed at all (i.e. it is unreachable), unless +it is the first block of a procedure, called the +procedure entry block.

+ +

Internally, the successor and predecessor attributes of +a basic block are stored as sets. Alternatively, one +may regard all these sets of all basic blocks as a +conceptual graph, in which there is an edge from B to +C if C is in the successor set of B. We call this conceptual +graph the Control Flow Graph.

+ +

The only successor of a basic block ending on an +unconditional branch instruction is the block that contains +the label definition of the target of the jump. The target +instruction can be found via the LAB_ID that is the operand +of the jump instruction, by using the label-map table +mentioned above. If the last instruction of a block is a +conditional jump, the successors are the target block and +the textually next block. The last instruction can also be a +case jump instruction (CSA or CSB). We then analyze the case +descriptor, to find all possible target instructions and +their associated blocks. We require the case descriptor to +be allocated in a ROM, so it cannot be changed dynamically. +A case jump via an alterable descriptor could in principle +go to any label in the program. In the presence of such an +uncontrolled jump, hardly any optimization can be done. We +do not expect any front end to generate such a descriptor, +however, because of the controlled nature of case statements +in high level languages. If the basic block does not end in +a jump instruction, its only successor is the textually next +block.

+ +

4.3. Immediate dominators

+ +

A basic block B dominates a block C if every path in the +control flow graph from the procedure entry block to C goes +through B. The immediate dominator of C is the closest +dominator of C on any path from the entry block. See also +[Aho78a, section 13.1.]

+ +

There are a number of algorithms to compute the +immediate dominator relation.

+ + + + + + +
+ +

1.

+
+ +

Purdom and Moore give an algorithm that is easy to +program and easy to describe (although the description they +give is unreadable; it is given in a very messy Algol60 +program full of gotos). [Purd72a]

+
+ + + + + + +
+ +

2.

+
+ +

Aho and Ullman present a bitvector algorithm, which is +also easy to program and to understand. (See [Aho78a, +section 13.1.]).

+
+ + + + + + +
+ +

3

+
+ +

Lengauer and Tarjan introduce a fast algorithm that is +hard to understand, yet remarkably easy to implement. +[Leng79a]

+
+ +

The Purdom-Moore algorithm is very slow if the number of +basic blocks in the flow graph is large. The Aho-Ullman +algorithm in fact computes the dominator relation, from +which the immediate dominator relation can be computed in +time quadratic to the number of basic blocks, worst case. +The storage requirement is also quadratic to the number of +blocks. The running time of the third algorithm is +proportional to:

+
     (number of edges in the graph) * log(number of blocks).
+
+ +

We have chosen this algorithm because it is fast (as +shown by experiments done by Lengauer and Tarjan), it is +easy to program and requires little data space.

+ +

4.4. Loop detection

+ +

Loops are detected by using the loop construction +algorithm of. [Aho78a, section 13.1.] This algorithm uses +back edges. A back edge is an edge from B to C in the +CFG, whose head (C) dominates its tail (B). The loop +associated with this back edge consists of C plus all nodes +in the CFG that can reach B without going through C.

+ +

As an example of how the algorithm works, consider the +piece of program of Fig. 4.1. First just look at the program +and try to see what part of the code constitutes the +loop.

+
     loop
+        if cond then                       1
+           -- lots of simple
+           -- assignment
+           -- statements              2          3
+           exit; -- exit loop
+        else
+           S; -- one statement
+        end if;
+     end loop;
+
+
+     Fig. 4.1 A misleading loop
+
+ +

Although a human being may be easily deceived by the +brackets "loop" and "end loop", the loop +detection algorithm will correctly reply that only the test +for "cond" and the single statement in the +false-part of the if statement are part of the loop! The +statements in the true-part only get executed once, so there +really is no reason at all to say they’re part of the +loop too. The CFG contains one back edge, +"3->1". As node 3 cannot be reached from node +2, the latter node is not part of the loop.

+ +

A source of problems with the algorithm is the fact that +different back edges may result in the same loop. Such an +ill-structured loop is called a messy loop. After a +loop has been constructed, it is checked if it is really a +new loop.

+ +

Loops can partly overlap, without one being nested +inside the other. This is the case in the program of Fig. +4.2.

+
     1:                              1
+        S1;
+     2:
+        S2;                          2
+        if cond then
+           goto 4;
+        S3;                     3         4
+        goto 1;
+     4:
+        S4;
+        goto 1;
+
+
+     Fig. 4.2 Partly overlapping loops
+
+ +

There are two back edges "3->1" and +"4->1", resulting in the loops {1,2,3} and +{1,2,4}. With every basic block we associate a set of all +loops it is part of. It is not sufficient just to record its +most enclosing loop.

+ +

After all loops of a procedure are detected, we +determine the nesting level of every loop. Finally, we find +all strong and firm blocks of the loop. If the loop has only +one back edge (i.e. it is not messy), the set of firm blocks +consists of the head of this back edge and its dominators in +the loop (including the loop entry block). A firm block is +also strong if it is not a successor of a block that may +exit the loop; a block may exit a loop if it has an +(immediate) successor that is not part of the loop. For +messy loops we do not determine the strong and firm blocks. +These loops are expected to occur very rarely.

+ +

4.5. Interprocedural analysis

+ +

It is often desirable to know the effects a procedure +call may have. The optimization below is only possible if we +know for sure that the call to P cannot change A.

+ +

+ +

Although it is not possible to predict exactly all the +effects a procedure call has, we may determine a kind of +upper bound for it. So we compute all variables that may be +changed by P, although they need not be changed at every +invocation of P. We can get hold of this set by just looking +at all assignment (store) instructions in the body of P. EM +also has a set of indirect assignment instructions, +i.e. assignment through a pointer variable. In general, it +is not possible to determine which variable is affected by +such an assignment. In these cases, we just record the fact +that P does an indirect assignment. Note that this does not +mean that all variables are potentially affected, as the +front ends may generate messages telling that certain +variables can never be accessed indirectly. We also set a +flag if P does a use (load) indirect. Note that we only have +to look at global variables. If P changes or uses any +of its locals, this has no effect on its environment. Local +variables of a lexically enclosing procedure can only be +accessed indirectly.

+ +

A procedure P may of course call another procedure. To +determine the effects of a call to P, we also must know the +effects of a call to the second procedure. This second one +may call a third one, and so on. Effectively, we need to +compute the transitive closure of the effects. To do +this, we determine for every procedure which other +procedures it calls. This set is the "calling" +attribute of a procedure. One may regard all these sets as a +conceptual graph, in which there is an edge from P to Q if Q +is in the calling set of P. This graph will be referred to +as the call graph. (Note the resemblance with the +control flow graph).

+ +

We can detect which procedures are called by P by +looking at all CAL instructions in its body. Unfortunately, +a procedure may also be called indirectly, via a CAI +instruction. Yet, only procedures that are used as operand +of an LPI instruction can be called indirect, because this +is the only way to take the address of a procedure. We +determine for every procedure whether it does a CAI +instruction. We also build a set of all procedures used as +operand of an LPI.

+ +

After all procedures have been processed (i.e. all CFGs +are constructed, all loops are detected, all procedures are +analyzed to see which variables they may change, which +procedures they call, whether they do a CAI or are used in +an LPI) the transitive closure of all interprocedural +information is computed. During the same process, the +calling set of every procedure that uses a CAI is extended +with the above mentioned set of all procedures that can be +called indirect.

+ +

4.6. Source files

+ +

The sources of CF are in the following files and +packages:

+ + + + + + +
+ +

cf.h:

+
+ +

declarations of global variables and data structures

+
+ + + + + + +
+ +

cf.c:

+
+ +

the routine main; interprocedural analysis; transitive +closure

+
+ + + + + + +
+ +

succ:

+
+ +

control flow (successor and predecessor)

+
+ + + + + + + +
+ +

idom:

+
+ +

immediate dominators

+
+
+ + + + + + + +
+ +

loop:

+
+ +

loop detection

+
+
+ + + + + + +
+ +

get:

+
+ +

read object and procedure table; read EM text and +partition it into basic blocks

+
+ + + + + + + +
+ +

put:

+
+ +

write tables, CFGs and EM text

+
+
+ +

5. Inline substitution

+ +

5.1. Introduction

+ +

The Inline Substitution technique (IL) tries to decrease +the overhead associated with procedure calls (invocations). +During a procedure call, several actions must be undertaken +to set up the right environment for the called procedure. +[John81a] On return from the procedure, most of these +effects must be undone. This entire process introduces +significant costs in execution time as well as in object +code size.

+ +

The inline substitution technique replaces some of the +calls by the modified body of the called procedure, hence +eliminating the overhead. Furthermore, as the calling and +called procedure are now integrated, they can be optimized +together, using other techniques of the optimizer. This +often leads to extra opportunities for optimization +[Ball79a, Cart77a, Sche77a]

+ +

An inline substitution of a call to a procedure P +increases the size of the program, unless P is very small or +P is called only once. In the latter case, P can be +eliminated. In practice, procedures that are called only +once occur quite frequently, due to the introduction of +structured programming. (Carter [Cart82a] states that almost +50% of the Pascal procedures he analyzed were called just +once).

+ +

Scheifler [Sche77a] has a more general view of inline +substitution. In his model, the program under consideration +is allowed to grow by a certain amount, i.e. code size is +sacrificed to speed up the program. The above two cases are +just special cases of his model, obtained by setting the +size-change to (approximately) zero. He formulates the +substitution problem as follows:

+ + + + + +
+

"Given a program, a subset of all invocations, a +maximum program size, and a maximum procedure size, find a +sequence of substitutions that minimizes the expected +execution time."

+
+ +

Scheifler shows that this problem is NP-complete +[Aho74a, chapter 10] by reduction to the Knapsack Problem. +Heuristics will have to be used to find a near-optimal +solution.

+ +

In the following chapters we will extend +Scheifler’s view and adapt it to the EM Global +Optimizer. We will first describe the transformations that +have to be applied to the EM text when a call is substituted +in line. Next we will examine in which cases inline +substitution is not possible or desirable. Heuristics will +be developed for chosing a good sequence of substitutions. +These heuristics make no demand on the user (such as making +profiles [Sche77a] or giving pragmats [Ichb83a, section +6.3.2]), although the model could easily be extended to use +such information. Finally, we will discuss the +implementation of the IL phase of the optimizer.

+ +

We will often use the term inline expansion as a synonym +of inline substitution.
+The inverse technique of procedure abstraction (automatic +subroutine generation) [Shaf78a] will not be discussed in +this report.

+ +

5.2. Parameters and local variables.

+ +

In the EM calling sequence, the calling procedure pushes +its parameters on the stack before doing the CAL. The called +routine first saves some status information on the stack and +then allocates space for its own locals (also on the stack). +Usually, one special purpose register, the Local Base (LB) +register, is used to access both the locals and the +parameters. If memory is highly segmented, the stack frames +of the caller and the callee may be allocated in different +fragments; an extra Argument Base (AB) register is used in +this case to access the actual parameters. See 4.2 of +[Tane83a] for further details.

+ +

If a procedure call is expanded in line, there are two +problems:

+ + + + + + +
+ +

1.

+
+ +

No stack frame will be allocated for the called +procedure; we must find another place to put its locals.

+
+ + + + + + +
+ +

2.

+
+ +

The LB register cannot be used to access the actual +parameters; as the CAL instruction is deleted, the LB will +still point to the local base of the calling +procedure.

+
+ +

The local variables of the called procedure will be put +in the stack frame of the calling procedure, just after its +own locals. The size of the stack frame of the calling +procedure will be increased during its entire lifetime. +Therefore our model will allow a limit to be set on the +number of bytes for locals that the called procedure may +have (see next section).

+ +

There are several alternatives to access the parameters. +An actual parameter may be any auxiliary expression, which +we will refer to as the actual parameter expression. +The value of this expression is stored in a location on the +stack (see above), the parameter location.
+The alternatives for accessing parameters are:

+ + + + + + +
+ +

-

+
+ +

save the value of the stackpointer at the point of the +CAL in a temporary variable X; this variable can be used to +simulate the AB register, i.e. parameter locations are +accessed via an offset to the value of X.

+
+ + + + + + +
+ +

-

+
+ +

create a new temporary local variable T for the +parameter (in the stack frame of the caller); every access +to the parameter location must be changed into an access to +T.

+
+ + + + + + +
+ +

-

+
+ +

do not evaluate the actual parameter expression before +the call; instead, substitute this expression for every use +of the parameter location.

+
+ +

The first method may be expensive if X is not put in a +register. We will not use this method. The time required to +evaluate and access the parameters when the second method is +used will not differ much from the normal calling sequence +(i.e. not in line call). It is not expensive, but there are +no extra savings either. The third method is essentially the +’by name’ parameter mechanism of Algol60. If the +actual parameter is just a numeric constant, it is +advantageous to use it. Yet, there are several circumstances +under which it cannot or should not be used. We will deal +with this in the next section.
+In general we will use the third method, if it is possible +and desirable. Such parameters will be called in line +parameters. In all other cases we will use the second +method.

+ +

5.3. Feasibility and desirability analysis

+ +

Feasibility and desirability analysis of in line +substitution differ somewhat from most other techniques. +Usually, much effort is needed to find a feasible +opportunity for optimization (e.g. a redundant +subexpression). Desirability analysis then checks if it is +really advantageous to do the optimization. For IL, +opportunities are easy to find. To see if an in line +expansion is desirable will not be hard either. Yet, the +main problem is to find the most desirable ones. We will +deal with this problem later and we will first attend +feasibility and desirability analysis.

+ +

There are several reasons why a procedure invocation +cannot or should not be expanded in line.

+ +

A call to a procedure P cannot be expanded in line in +any of the following cases:

+ + + + + + +
+ +

1.

+
+ +

The body of P is not available as EM text. Clearly, +there is no way to do the substitution.

+
+ + + + + + +
+ +

2.

+
+ +

P, or any procedure called by P (transitively), follows +the chain of statically enclosing procedures (via a LXL or +LXA instruction) or follows the chain of dynamically +enclosing procedures (via a DCH). If the call were expanded +in line, one level would be removed from the chains, leading +to total chaos. This chaos could be solved by patching up +every LXL, LXA or DCH in all procedures that could be part +of the chains, but this is hard to implement.

+
+ + + + + + +
+ +

3.

+
+ +

P, or any procedure called by P (transitively), calls a +procedure whose body is not available as EM text. The +unknown procedure may use an LXL, LXA or DCH. However, in +several languages a separately compiled procedure has no +access to the static or dynamic chain. In this case this +point does not apply.

+
+ + + + + + +
+ +

4.

+
+ +

P, or any procedure called by P (transitively), uses the +LPB instruction, which converts a local base to an argument +base; as the locals and parameters are stored in a +non-standard way (differing from the normal EM calling +sequence) this instruction would yield incorrect +results.

+
+ + + + + + +
+ +

5.

+
+ +

The total number of bytes of the parameters of P is not +known. P may be a procedure with a variable number of +parameters or may have an array of dynamic size as value +parameter.

+
+ +

It is undesirable to expand a call to a procedure P in +line in any of the following cases:

+ + + + + + +
+ +

1.

+
+ +

P is large, i.e. the number of EM instructions of P +exceeds some threshold. The expanded code would be large +too. Furthermore, several programs in ACK, including the +global optimizer itself, may run out of memory if they they +have to run in a small address space and are provided very +large procedures. The threshold may be set to infinite, in +which case this point does not apply.

+
+ + + + + + +
+ +

2.

+
+ +

P has many local variables. All these variables would +have to be allocated in the stack frame of the calling +procedure.

+
+ +

If a call may be expanded in line, we have to decide how +to access its parameters. In the previous section we stated +that we would use in line parameters whenever possible and +desirable. There are several reasons why a parameter cannot +or should not be expanded in line.

+ +

No parameter of a procedure P can be expanded in line, +in any of the following cases:

+ + + + + + +
+ +

1.

+
+ +

P, or any procedure called by P (transitively), does a +store-indirect or a use-indirect (i.e. through a pointer). +However, if the front-end has generated messages telling +that certain parameters can not be accessed indirectly, +those parameters may be expanded in line.

+
+ + + + + + +
+ +

2.

+
+ +

P, or any procedure called by P (transitively), calls a +procedure whose body is not available as EM text. The +unknown procedure may do a store-indirect or a use-indirect. +However, the same remark about front-end messages as for 1. +holds here.

+
+ + + + + + +
+ +

3.

+
+ +

The address of a parameter location is taken (via a +LAL). In the normal calling sequence, all parameters are +stored sequentially. If the address of one parameter +location is taken, the address of any other parameter +location can be computed from it. Hence we must put every +parameter in a temporary location; furthermore, all these +locations must be in the same order as for the normal +calling sequence.

+
+ + + + + + +
+ +

4.

+
+ +

P has overlapping parameters; for example, it uses the +parameter at offset 10 both as a 2 byte and as a 4 byte +parameter. Such code may be produced by the front ends if +the formal parameter is of some record type with +variants.

+
+ +

Sometimes a specific parameter must not be expanded in +line.
+An actual parameter expression cannot be expanded in line in +any of the following cases:

+ + + + + + +
+ +

1.

+
+ +

P stores into the parameter location. Even if the actual +parameter expression is a simple variable, it is incorrect +to change the ’store into formal’ into a +’store into actual’, because of the parameter +mechanism used. In Pascal, the following expansion is +incorrect:

+
+ + + + + +
+
     procedure p (x:integer);
+     begin
+        x := 20;
+     end;
+     ...
+     a := 10;                a := 10;
+     p(a);        --->       a := 20;
+     write(a);               write(a);
+
+
+ + + + + + + +
+ +

2.

+
+ +

P changes any of the operands of the actual parameter +expression. If the expression is expanded and evaluated +after the operand has been changed, the wrong value will be +used.

+
+ + + + + + +
+ +

3.

+
+ +

The actual parameter expression has side effects. It +must be evaluated only once, at the place of the call.

+
+ +

It is undesirable to expand an actual parameter in line +in the following case:

+ + + + + + +
+ +

1.

+
+ +

The parameter is used more than once (dynamically) and +the actual parameter expression is not just a simple +variable or constant.

+
+ +

5.4. Heuristic rules

+ +

Using the information described in the previous section, +we can find all calls that can be expanded in line, and for +which this expansion is desirable. In general, we cannot +expand all these calls, so we have to choose the +’best’ ones. With every CAL instruction that may +be expanded, we associate a pay off, which expresses +how desirable it is to expand this specific CAL.

+ +

Let Tc denote the portion of EM text involved in a +specific call, i.e. the pushing of the actual parameter +expressions, the CAL itself, the popping of the parameters +and the pushing of the result (if any, via an LFR). Let Te +denote the EM text that would be obtained by expanding the +call in line. Let Pc be the original program and Pe the +program with Te substituted for Tc. The pay off of the CAL +depends on two factors:

+ + + + + + + +
+ +

-

+
+ +

T = execution_time(Pe) - execution_time(Pc)

+
+
+ + + + + + + +
+ +

-

+
+ +

S = code_size(Pe) - code_size(Pc)

+
+
+ +

The change in execution time (T) depends on:

+ + + + + + + +
+ +

-

+
+ +

T1 = execution_time(Te) - execution_time(Tc)

+
+
+ + + + + + + +
+ +

-

+
+ +

N = number of times Te or Tc get executed.

+
+
+ +

We assume that T1 will be the same every time the code +gets executed. This is a reasonable assumption. (Note that +we are talking about one CAL, not about different calls to +the same procedure). Hence

+
     T = N * T1
+
+ +

T1 can be estimated by a careful analysis of the +transformations that are performed. Below, we list +everything that will be different when a call is expanded in +line:

+ + + + + + +
+ +

-

+
+ +

The CAL instruction is not executed. This saves a +subroutine jump.

+
+ + + + + + +
+ +

-

+
+ +

The instructions in the procedure prolog are not +executed. These instructions, generated from the PRO pseudo, +save some machine registers (including the old LB), set the +new LB and allocate space for the locals of the called +routine. The savings may be less if there are no locals to +allocate.

+
+ + + + + + +
+ +

-

+
+ +

In line parameters are not evaluated before the call and +are not pushed on the stack.

+
+ + + + + + +
+ +

-

+
+ +

All remaining parameters are stored in local variables, +instead of being pushed on the stack.

+
+ + + + + + +
+ +

-

+
+ +

If the number of parameters is nonzero, the ASP +instruction after the CAL is not executed.

+
+ + + + + + +
+ +

-

+
+ +

Every reference to an in line parameter is substituted +by the parameter expression.

+
+ + + + + + +
+ +

-

+
+ +

RET (return) instructions are replaced by BRA (branch) +instructions. If the called procedure ’falls +through’ (i.e. it has only one RET, at the end of its +code), even the BRA is not needed.

+
+ + + + + + +
+ +

-

+
+ +

The LFR (fetch function result) is not executed

+
+ +

Besides these changes, which are caused directly by IL, +other changes may occur as IL influences other optimization +techniques, such as Register Allocation and Constant +Propagation. Our heuristic rules do not take into account +the quite inpredictable effects on Register Allocation. It +does, however, favour calls that have numeric +constants as parameter; especially the constant +"0" as an inline parameter gets high scores, as +further optimizations may often be possible.

+ +

It cannot be determined statically how often a CAL +instruction gets executed. We will use loop nesting +information here. The nesting level of the loop in which the +CAL appears (if any) will be used as an indication for the +number of times it gets executed.

+ +

Based on all these facts, the pay off of a call will be +computed. The following model was developed empirically. +Assume procedure P calls procedure Q. The call takes place +in basic block B.

+ +

+ +

S stands for the size increase of the program, which is +slightly less than the size of Q. The size of a procedure is +taken to be its number of (non-pseudo) EM instructions. The +terms "loop nesting level" and "firm" +were defined in the chapter on the Intermediate Code +(section "loop tables"). If a call is not inside a +loop and the calling procedure is itself never called from a +loop (transitively), then the call will probably be executed +at most once. Such a call is never expanded in line (its pay +off is zero). If the calling procedure doesn’t have +local variables, a penalty (L) is introduced, as it will +most likely get local variables if the call gets +expanded.

+ +

5.5. Implementation

+ +

A major factor in the implementation of Inline +Substitution is the requirement not to use an excessive +amount of memory. IL essentially analyzes the entire +program; it makes decisions based on which procedure calls +appear in the whole program. Yet, because of the memory +restriction, it is not feasible to read the entire program +in main memory. To solve this problem, the IL phase has been +split up into three subphases that are executed +sequentially:

+ + + + + + +
+ +

1.

+
+ +

analyze every procedure; see how it accesses its +parameters; simultaneously collect all calls appearing in +the whole program an put them in a call-list.

+
+ + + + + + +
+ +

2.

+
+ +

use the call-list and decide which calls will be +substituted in line.

+
+ + + + + + +
+ +

3.

+
+ +

take the decisions of subphase 2 and modify the program +accordingly.

+
+ +

Subphases 1 and 3 scan the input program; only subphase +3 modifies it. It is essential that the decisions can be +made in subphase 2 without using the input program, provided +that subphase 1 puts enough information in the call-list. +Subphase 2 keeps the entire call-list in main memory and +repeatedly scans it, to find the next best candidate for +expansion.

+ +

We will specify the data structures used by IL before +describing the subphases.

+ +

5.5.1. Data structures

+ +

5.5.1.1. The procedure table

+ +

In subphase 1 information is gathered about every +procedure and added to the procedure table. This information +is used by the heuristic rules. A proctable entry for +procedure p has the following extra information:

+ + + + + + +
+ +

-

+
+ +

is it allowed to substitute an invocation of p in +line?

+
+ + + + + + +
+ +

-

+
+ +

is it allowed to put any parameter of such a call in +line?

+
+ + + + + + + +
+ +

-

+
+ +

the size of p (number of EM instructions)

+
+
+ + + + + + + +
+ +

-

+
+ +

does p ’fall through’?

+
+
+ + + + + + +
+ +

-

+
+ +

a description of the formal parameters that p accesses; +this information is obtained by looking at the code of p. +For every parameter f, we record:

+
+ + + + + + + + +
+ +

-

+
+ +

the offset of f

+
+
+ + + + + + + +
+ +

-

+
+ +

the type of f (word, double word, pointer)

+
+ + + + + + + +
+ +

-

+
+ +

may the corresponding actual parameter be put in +line?

+
+ + + + + + + + +
+ +

-

+
+ +

is f ever accessed indirectly?

+
+
+ + + + + + + +
+ +

-

+
+ +

if f used: never, once or more than once?

+
+ + + + + + + +
+ +

-

+
+ +

the number of times p is called (see below)

+
+
+ + + + + + +
+ +

-

+
+ +

the file address of its call-count information (see +below).

+
+ +

5.5.1.2. Call-count information

+ +

As a result of Inline Substitution, some procedures may +become useless, because all their invocations have been +substituted in line. One of the tasks of IL is to keep track +which procedures are no longer called. Note that IL is +especially keen on procedures that are called only once +(possibly as a result of expanding all other calls to it). +So we want to know how many times a procedure is called +during Inline Substitution. It is not good enough to +compute this information afterwards. The task is rather +complex, because the number of times a procedure is called +varies during the entire process:

+ + + + + + +
+ +

1.

+
+ +

If a call to p is substituted in line, the number of +calls to p gets decremented by 1.

+
+ + + + + + +
+ +

2.

+
+ +

If a call to p is substituted in line, and p contains n +calls to q, then the number of calls to q gets incremented +by n.

+
+ + + + + + +
+ +

3.

+
+ +

If a procedure p is removed (because it is no longer +called) and p contains n calls to q, then the number of +calls to q gets decremented by n.

+
+ +

(Note that p may be the same as q, if p is +recursive).
+So we actually want to have the following information:

+
     NRCALL(p,q) = number of call to q appearing in p,
+
+
+     for all procedures p and q that may be put in line.
+
+ +

This information, called call-count information +is computed by the first subphase. It is stored in a file. +It is represented as a number of lists, rather than as a +(very sparse) matrix. Every procedure has a list of +(proc,count) pairs, telling which procedures it calls, and +how many times. The file address of its call-count list is +stored in its proctable entry. Whenever this information is +needed, it is fetched from the file, using direct access. +The proctable entry also contains the number of times a +procedure is called, at any moment.

+ +

5.5.1.3. The call-list

+ +

The call-list is the major data structure use by IL. +Every item of the list describes one procedure call. It +contains the following attributes:

+ + + + + + + +
+ +

-

+
+ +

the calling procedure (caller)

+
+
+ + + + + + + +
+ +

-

+
+ +

the called procedure (callee)

+
+
+ + + + + + +
+ +

-

+
+ +

identification of the CAL instruction (sequence +number)

+
+ + + + + + +
+ +

-

+
+ +

the loop nesting level; our heuristic rules appreciate +calls inside a loop (or even inside a loop nested inside +another loop, etc.) more than other calls

+
+ + + + + + +
+ +

-

+
+ +

the actual parameter expressions involved in the call; +for every actual, we record:

+
+ + + + + + + + +
+ +

-

+
+ +

the EM code of the expression

+
+
+ + + + + + + + +
+ +

-

+
+ +

the number of bytes of its result (size)

+
+
+ + + + + + + +
+ +

-

+
+ +

an indication if the actual may be put in line

+
+ +

The structure of the call-list is rather complex. +Whenever a call is expanded in line, new calls will suddenly +appear in the program, that were not contained in the +original body of the calling subroutine. These calls are +inherited from the called procedure. We will refer to these +invocations as nested calls (see Fig. 5.1).

+ +

+ +

+ +

Fig. 5.1 Example of nested procedure calls

+ +

Nested calls may subsequently be put in line too +(probably resulting in a yet deeper nesting level, etc.). So +the call-list does not always reflect the source program, +but changes dynamically, as decisions are made. If a call to +p is expanded, all calls appearing in p will be added to the +call-list.
+A convenient and elegant way to represent the call-list is +to use a LISP-like list. [Poel72a] Calls that appear at the +same level are linked in the CDR direction. If a call C to a +procedure p is expanded, all calls appearing in p are put in +a sub-list of C, i.e. in its CAR. In the example above, +before the decision to expand the call to p is made, the +call-list of procedure r looks like:

+
     (call-to-x, call-to-p, call-to-y)
+
+ +

After the decision, it looks like:

+
     (call-to-x, (call-to-p*, call-to-a, call-to-b), call-to-y)
+
+ +

The call to p is marked, because it has been +substituted. Whenever IL wants to traverse the call-list of +some procedure, it uses the well-known LISP technique of +recursion in the CAR direction and iteration in the CDR +direction (see page 1.19-2 of [Poel72a] ). All list +traversals look like:

+
     traverse(list)
+     {
+         for (c = first(list); c != 0; c = CDR(c)) {
+             if (c is marked) {
+                 traverse(CAR(c));
+             } else {
+                 do something with c
+             }
+         }
+     }
+
+ +

The entire call-list consists of a number of LISP-like +lists, one for every procedure. The proctable entry of a +procedure contains a pointer to the beginning of the +list.

+ +

5.5.2. The first subphase: procedure analysis

+ +

The tasks of the first subphase are to determine several +attributes of every procedure and to construct the basic +call-list, i.e. without nested calls. The size of a +procedure is determined by simply counting its EM +instructions. Pseudo instructions are skipped. A procedure +does not ’fall through’ if its CFG contains a +basic block that is not the last block of the CFG and that +ends on a RET instruction. The formal parameters of a +procedure are determined by inspection of its code.

+ +

The call-list in constructed by looking at all CAL +instructions appearing in the program. The call-list should +only contain calls to procedures that may be put in line. +This fact is only known if the procedure was analyzed +earlier. If a call to a procedure p appears in the program +before the body of p, the call will always be put in the +call-list. If p is later found to be unsuitable, the call +will be removed from the list by the second subphase.

+ +

An important issue is the recognition of the actual +parameter expressions of the call. The front ends produces +messages telling how many bytes of formal parameters every +procedure accesses. (If there is no such message for a +procedure, it cannot be put in line). The actual parameters +together must account for the same number of bytes.A +recursive descent parser is used to parse side-effect free +EM expressions. It uses a table and some auxiliary routines +to determine how many bytes every EM instruction pops from +the stack and how many bytes it pushes onto the stack. These +numbers depend on the EM instruction, its argument, and the +wordsize and pointersize of the target machine. Initially, +the parser has to recognize the number of bytes specified in +the formals-message, say N. Assume the first instruction +before the CAL pops S bytes and pushes R bytes. If R > N, +too many bytes are recognized and the parser fails. Else, it +calls itself recursively to recognize the S bytes used as +operand of the instruction. If it succeeds in doing so, it +continues with the next instruction, i.e. the first +instruction before the code recognized by the recursive +call, to recognize N-R more bytes. The result is a number of +EM instructions that collectively push N bytes. If an +instruction is come across that has side-effects (e.g. a +store or a procedure call) or of which R and S cannot be +computed statically (e.g. a LOS), it fails.
+Note that the parser traverses the code backwards. As EM +code is essentially postfix code, the parser works top +down.

+ +

If the parser fails to recognize the parameters, the +call will not be substituted in line. If the parameters can +be determined, they still have to match the formal +parameters of the called procedure. This check is performed +by the second subphase; it cannot be done here, because it +is possible that the called procedure has not been analyzed +yet.

+ +

The entire call-list is written to a file, to be +processed by the second subphase.

+ +

5.5.3. The second subphase: making decisions

+ +

The task of the second subphase is quite easy to +understand. It reads the call-list file, builds an incore +call-list and deletes every call that may not be expanded in +line (either because the called procedure may not be put in +line, or because the actual parameters of the call do not +match the formal parameters of the called procedure). It +assigns a pay-off to every call, indicating how +desirable it is to expand it.

+ +

The subphase repeatedly scans the call-list and takes +the call with the highest ratio. The chosen one gets marked, +and the call-list is extended with the nested calls, as +described above. These nested calls are also assigned a +ratio, and will be considered too during the next scans.
+After every decision the number of times every procedure is +called is updated, using the call-count information. +Meanwhile, the subphase keeps track of the amount of space +left available. If all space is used, or if there are no +more calls left to be expanded, it exits this loop. Finally, +calls to procedures that are called only once are also +chosen.

+ +

The actual parameters of a call are only needed by this +subphase to assign a ratio to a call. To save some space, +these actuals are not kept in main memory. They are removed +after the call has been read and a ratio has been assigned +to it. So this subphase works with abstracts of +calls. After all work has been done, the actual parameters +of the chosen calls are retrieved from a file, as they are +needed by the transformation subphase.

+ +

5.5.4. The third subphase: doing transformations

+ +

The third subphase makes the actual modifications to the +EM text. It is directed by the decisions made in the +previous subphase, as expressed via the call-list. The +call-list read by this subphase contains only calls that +were selected for expansion. The list is ordered in the same +way as the EM text, i.e. if a call C1 appears before a call +C2 in the call-list, C1 also appears before C2 in the EM +text. So the EM text is traversed linearly, the calls that +have to be substituted are determined and the modifications +are made. If a procedure is come across that is no longer +needed, it is simply not written to the output EM file. The +substitution of a call takes place in distinct steps:

+ +

change the calling sequence

+ + + + + +
+

The actual parameter expressions are changed. Parameters +that are put in line are removed. All remaining ones must +store their result in a temporary local variable, rather +than push it on the stack. The CAL instruction and any ASP +(to pop actual parameters) or LFR (to fetch the result of a +function) are deleted.

+
+ +

fetch the text of the called procedure

+ + + + + +
+

Direct disk access is used to to read the text of the +called procedure. The file offset is obtained from the +proctable entry.

+
+ +

allocate bytes for locals and temporaries

+ + + + + +
+

The local variables of the called procedure will be put +in the stack frame of the calling procedure. The same +applies to any temporary variables that hold the result of +parameters that were not put in line. The proctable entry of +the caller is updated.

+
+ +

put a label after the CAL

+ + + + + +
+

If the called procedure contains a RET (return) +instruction somewhere in the middle of its text (i.e. it +does not fall through), the RET must be changed into a BRA +(branch), to jump over the remainder of the text. This label +is not needed if the called procedure falls through.

+
+ +

copy the text of the called procedure and modify it

+ + + + + +
+

References to local variables of the called routine and +to parameters that are not put in line are changed to refer +to the new local of the caller. References to in line +parameters are replaced by the actual parameter expression. +Returns (RETs) are either deleted or replaced by a BRA. +Messages containing information about local variables or +parameters are changed. Global data declarations and the PRO +and END pseudos are removed. Instruction labels and +references to them are changed to make sure they do not have +the same identifying number as labels in the calling +procedure.

+
+ +

insert the modified text

+ + + + + +
+

The pseudos of the called procedure are put after the +pseudos of the calling procedure. The real text of the +callee is put at the place where the CAL was.

+
+ +

take care of nested substitutions

+ + + + + +
+

The expanded procedure may contain calls that have to be +expanded too (nested calls). If the descriptor of this call +contains actual parameter expressions, the code of the +expressions has to be changed the same way as the code of +the callee was changed. Next, the entire process of finding +CALs and doing the substitutions is repeated +recursively.

+
+ +

5.6. Source files of IL

+ +

The sources of IL are in the following files and +packages (the prefixes 1_, 2_ and 3_ refer to the three +subphases):

+ + + + + + +
+ +

il.h:

+
+ +

declarations of global variables and data structures

+
+ + + + + + +
+ +

il.c:

+
+ +

the routine main; the driving routines of the three +subphases

+
+ + + + + + +
+ +

1_anal:

+
+ +

contains a subroutine that analyzes a procedure

+
+ + + + + + +
+ +

1_cal:

+
+ +

contains a subroutine that analyzes a call

+
+ + + + + + +
+ +

1_aux:

+
+ +

implements auxiliary procedures used by subphase 1

+
+ + + + + + +
+ +

2_aux:

+
+ +

implements auxiliary procedures used by subphase 2

+
+ + + + + + +
+ +

3_subst:

+
+ +

the driving routine for doing the substitution

+
+ + + + + + +
+ +

3_change:

+
+ +

lower level routines that do certain modifications

+
+ + + + + + +
+ +

3_aux:

+
+ +

implements auxiliary procedures used by subphase 3

+
+ + + + + + +
+ +

aux:

+
+ +

implements auxiliary procedures used by several +subphases.

+
+ +

6. Strength reduction

+ +

6.1. Introduction

+ +

The Strength Reduction optimization technique (SR) tries +to replace expensive operators by cheaper ones, in order to +decrease the execution time of the program. A classical +example is replacing a ’multiplication by 2’ by +an addition or a shift instruction. These kinds of local +transformations are already done by the EM Peephole +Optimizer. Strength reduction can also be applied more +generally to operators used in a loop.

+ +

+ +

Fig. 6.1 An example of Strenght Reduction

+ +

In Fig. 6.1, a multiplication inside a loop is replaced +by an addition inside the loop and a multiplication outside +the loop. Clearly, this is a global optimization; it cannot +be done by a peephole optimizer.

+ +

In some cases a related technique, test +replacement, can be used to eliminate the loop variable +i. This technique will not be discussed in this report.
+In the example above, the resulting code can be further +optimized by using constant propagation. Obviously, this is +not the task of the Strength Reduction phase.

+ +

6.2. The model of strength reduction

+ +

In this section we will describe the transformations +performed by Strength Reduction (SR). Before doing so, we +will introduce the central notion of an induction +variable.

+ +

6.2.1. Induction variables

+ +

SR looks for variables whose values form an arithmetic +progression at the beginning of a loop. These variables are +called induction variables. The most frequently occurring +example of such a variable is a loop-variable in a +high-order programming language. Several quite sophisticated +models of strength reduction can be found in the literature. +[Cock77a, Alle81a, Lowr69a, Aho78a] In these models the +notion of an induction variable is far more general than the +intuitive notion of a loop-variable. The definition of an +induction variable we present here is more restricted, +yielding a simpler model and simpler transformations. We +think the principle source for strength reduction lies in +expressions using a loop-variable, i.e. a variable that is +incremented or decremented by the same amount after every +loop iteration, and that cannot be changed in any other +way.

+ +

Of course, the EM code does not contain high level +constructs such as for-statements. We will define an +induction variable in terms of the Intermediate Code of the +optimizer. Note that the notions of a loop in the EM text +and of a firm basic block were defined in section 3.3.5.

+ +

definition
+An induction variable i of a loop L is a local variable that +is never accessed indirectly, whose size is the word size of +the target machine, and that is assigned exactly once within +L, the assignment:

+ + + + + + +
+ +

-

+
+ +

being of the form i := i + c or i := c +i, c is a +constant called the step value of i.

+
+ + + + + + + +
+ +

-

+
+ +

occurring in a firm block of L.

+
+
+ +

(Note that the first restriction on the assignment is +not described in terms of the Intermediate Code; we will +give such a description later; the current definition is +easier to understand however).

+ +

6.2.2. Recognized expressions

+ +

SR recognizes certain expressions using an induction +variable and replaces them by cheaper ones. Two kinds of +expensive operations are recognized: multiplication and +array address computations. The expressions that are +simplified must use an induction variable as an operand of a +multiplication or as index in an array expression.

+ +

Often a linear function of an induction variable is +used, rather than the variable itself. In these cases +optimization is still possible. We call such expressions +iv-expressions.

+ +

definition:
+An iv-expression of an induction variable i of a loop L is +an expression that:

+ + + + + + +
+ +

-

+
+ +

uses only the operators + and - (unary as well as +binary)

+
+ + + + + + + +
+ +

-

+
+ +

uses i as operand exactly once

+
+
+ + + + + + +
+ +

-

+
+ +

uses (besides i) only constants or variables that are +never changed in L as operands.

+
+ +

The expressions recognized by SR are of the following +forms:

+ + + + + + + +
+ +

(1)

+
+ +

iv_expression * constant

+
+
+ + + + + + + +
+ +

(2)

+
+ +

constant * iv_expression

+
+
+ + + + + + +
+ +

(3)

+
+ +

A[iv-expression] := (assign to array element)

+
+ + + + + + + +
+ +

(4)

+
+ +

A[iv-expression] (use array element)

+
+
+ + + + + + +
+ +

(5)

+
+ +

& A[iv-expression] (take address of array +element)

+
+ +

(Note that EM has different instructions to use an array +element, store into one, or take the address of one, resp. +LAR, SAR, and AAR).
+The size of the elements of A must be known statically. In +cases (3) and (4) this size must equal the word size of the +target machine.

+ +

6.2.3. Transformations

+ +

With every recognized expression we associate a new +temporary local variable TMP, allocated in the stack frame +of the procedure containing the expression. At any program +point within the loop, TMP will contain the following +value:

+ + + + + + +
+ +

multiplication:

+
+ +

the current value of iv-expression * constant

+
+ + + + + + +
+ +

arrays:

+
+ +

the current value of &A[iv-expression].

+
+ +

In the second case, TMP essentially is a pointer +variable, pointing to the element of A that is currently in +use.
+If the same expression occurs several times in the loop, the +same temporary local is used each time.

+ +

Three transformations are applied to the EM text:

+ + + + + + +
+ +

(1)

+
+ +

TMP is initialized with the right value. This +initialization takes place just before the loop.

+
+ + + + + + + +
+ +

(2)

+
+ +

The recognized expression is simplified.

+
+
+ + + + + + +
+ +

(3)

+
+ +

TMP is incremented; this takes place just after the +induction variable is incremented.

+
+ +

For multiplication, the initial value of TMP is the +value of the recognized expression at the program point +immediately before the loop. For arrays, TMP is initialized +with the address of the first array element that is +accessed. So the initialization code is:

+
     TMP := iv-expression * constant;  or
+     TMP := &A[iv-expression]
+
+ +

At the point immediately before the loop, the induction +variable will already have been initialized, so the value +used in the code above will be the value it has during the +first iteration.

+ +

For multiplication, the recognized expression can simply +be replaced by TMP. For array optimizations, the replacement +depends on the form:

+ +

+ +

The ’*’ denotes the indirect operator. (Note +that EM has different instructions to do an assign-indirect +and a use-indirect). As the size of the array elements is +restricted to be the word size in case (3) and (4), only one +EM instruction needs to be generated in all cases.

+ +

The amount by which TMP is incremented is:

+ + + + + + + +
+ +

multiplication:

+
+ +

step value * constant

+
+
+ + + + + + + +
+ +

arrays:

+
+ +

step value * element size

+
+
+ +

Note that the step value (see definition of induction +variable above), the constant, and the element size (see +previous section) can all be determined statically. If the +sign of the induction variable in the iv-expression is +negative, the amount must be negated.

+ +

The transformations are demonstrated by an example.

+ +

+ +

Fig. 6.2 Example of complex Strength Reduction +transformations

+ +

The expression ’(6-i)*5’ is recognized +twice. The constant is 5. The step value is -3. The sign of +i in the recognized expression is ’-’. So the +increment value of TMP is -(-3*5) = +15.

+ +

6.3. Implementation

+ +

Like most phases, SR deals with one procedure at a time. +Within a procedure, SR works on one loop at a time. Loops +are processed in textual order. If loops are nested inside +each other, SR starts with the outermost loop and proceeds +in the inwards direction. This order is chosen, because it +enables the optimization of multi-dimensional array address +computations, if the elements are accessed in the usual way +(i.e. row after row, rather than column after column). For +every loop, SR first detects all induction variables and +then tries to recognize expressions that can be +optimized.

+ +

6.3.1. Finding induction variables

+ +

The process of finding induction variables can +conveniently be split up into two parts. First, the EM text +of the loop is scanned to find all candidate +induction variables, which are word-sized local variables +that are assigned precisely once in the loop, within a firm +block. Second, for every candidate, the single assignment is +inspected, to see if it has the form required by the +definition of an induction variable.

+ +

Candidates are found by scanning the EM code of the +loop. During this scan, two sets are maintained. The set +"cand" contains all variables that were assigned +exactly once so far, within a firm block. The set +"dismiss" contains all variables that should not +be made a candidate. Initially, both sets are empty. If a +variable is assigned to, it is put in the cand set, if three +conditions are met:

+ + + + + + +
+ +

1.

+
+ +

the variable was not in cand or dismiss already

+
+ + + + + + + +
+ +

2.

+
+ +

the assignment takes place in a firm block

+
+
+ + + + + + +
+ +

3.

+
+ +

the assignment is not a ZRL instruction (assignment by +zero) or a SDL instruction (store double local).

+
+ +

If any condition fails, the variable is dismissed from +cand (if it was there already) and put in dismiss (if it was +not there already).
+All variables for which no register message was generated +(i.e. those variables that may be accessed indirectly) are +assumed to be changed in the loop.
+All variables that remain in cand are candidate induction +variables.

+ +

From the set of candidates, the induction variables can +be determined, by inspecting the single assignment. The +assignment must match one of the EM patterns below. +(’x’ is the candidate. ’ws’ is the +word size of the target machine.

+ +

+ +

From the patterns the step size of the induction +variable can also be determined. These step sizes are +displayed on the right hand side.

+ +

For every induction variable we maintain the following +information:

+ + + + + + +
+ +

-

+
+ +

the offset of the variable in the stackframe of its +procedure

+
+ + + + + + +
+ +

-

+
+ +

a pointer to the EM text of the assignment statement

+
+ + + + + + + +
+ +

-

+
+ +

the step value

+
+
+ +

6.3.2. Optimizing expressions

+ +

If any induction variables of the loop were found, the +EM text of the loop is scanned again, to detect expressions +that can be optimized. SR scans for multiplication and array +instructions. Whenever it finds such an instruction, it +analyses the code in front of it. If an expression is to be +optimized, it must be generated by the following syntax +rules.

+ +

+ +

An ’address’ is an EM instruction that loads +an address on the stack. An instruction like LOL may be an +’address’, if the size of an address (pointer +size, =ps) is the same as the word size. If the pointer size +is twice the word size, instructions like LDL are an +’address’. (The addresses in the third grammar +rule denote resp. the array address and the array descriptor +address).

+ +

+ +

The notion of an iv-expression was introduced +earlier.

+ +

+ +

An iv_expression must satisfy one additional constraint: +it must use exactly one operand that is an induction +variable. A simple, hand written, top-down parser is used to +recognize an iv-expression. It scans the EM code from right +to left (recall that EM is essentially postfix). It uses +semantic attributes (inherited as well as derived) to check +the additional constraint.

+ +

All information assembled during the recognition process +is put in a ’code_info’ structure. This +structure contains the following information:

+ + + + + + + +
+ +

-

+
+ +

the optimizable code itself

+
+
+ + + + + + + +
+ +

-

+
+ +

the loop and basic block the code is part of

+
+
+ + + + + + + +
+ +

-

+
+ +

the induction variable

+
+
+ + + + + + + +
+ +

-

+
+ +

the iv-expression

+
+
+ + + + + + +
+ +

-

+
+ +

the sign of the induction variable in the +iv-expression

+
+ + + + + + +
+ +

-

+
+ +

the offset and size of the temporary local variable

+
+ +

-

+ + + + + +
+

the expensive operator (MLI, LAR etc.)

+
+ + + + + + +
+ +

-

+
+ +

the instruction that loads the constant (for +multiplication) or the array descriptor (for arrays).

+
+ +

The entire transformation process is driven by this +information. As the EM text is represented internally as a +list, this process consists mainly of straightforward list +manipulations.
+The initialization code must be put immediately before the +loop entry. For this purpose a header block is +created that has the loop entry block as its only successor +and that dominates the entry block. The CFG and all +relations (SUCC,PRED, IDOM, LOOPS etc.) are updated.
+An EM instruction that will replace the optimizable code is +created and put at the place of the old code. The list +representing the old optimizable code is used to create a +list for the initializing code, as they are similar. Only +two modifications are required:

+ + + + + + +
+ +

-

+
+ +

if the expensive operator is a LAR or SAR, it must be +replaced by an AAR, as the initial value of TMP is the +address of the first array element that is +accessed.

+
+ + + + + + +
+ +

-

+
+ +

code must be appended to store the result of the +expression in TMP.

+
+ +

Finally, code to increment TMP is created and put after +the code of the single assignment to the induction variable. +The generated code uses either an integer addition (ADI) or +an integer-to-pointer addition (ADS) to do the +increment.

+ +

SR maintains a set of all expressions that have already +been recognized in the present loop. Such expressions are +said to be available. If an expression is recognized +that is already available, no new temporary local variable +is allocated for it, and the code to initialize and +increment the local is not generated.

+ +

6.4. Source files of SR

+ +

The sources of SR are in the following files and +packages:

+ + + + + + +
+ +

sr.h:

+
+ +

declarations of global variables and data structures

+
+ + + + + + +
+ +

sr.c:

+
+ +

the routine main; a driving routine to process (possibly +nested) loops in the right order

+
+ + + + + + +
+ +

iv

+
+ +

implements a procedure that finds the induction +variables of a loop

+
+ + + + + + +
+ +

reduce

+
+ +

implements a procedure that finds optimizable +expressions and that does the transformations

+
+ + + + + + +
+ +

cand

+
+ +

implements a procedure that finds the candidate +induction variables; used to implement iv

+
+ + + + + + +
+ +

xform

+
+ +

implements several useful routines that transform lists +of EM text or a CFG; used to implement reduce

+
+ + + + + + +
+ +

expr

+
+ +

implements a procedure that parses iv-expressions

+
+ + + + + + +
+ +

aux

+
+ +

implements several auxiliary procedures.

+
+ +

7. Common subexpression elimination

+ +

7.1. Introduction

+ +

The Common Subexpression Elimination optimization +technique (CS) tries to eliminate multiple computations of +EM expressions that yield the same result. It places the +result of one such computation in a temporary variable, and +replaces the other computations by a reference to this +temporary variable. The primary goal of this technique is to +decrease the execution time of the program, but in general +it will save space too.

+ +

As an example of the application of Common Subexpression +Elimination, consider the piece of program in Fig. +7.1(a).

+ +

+ +

Fig. 7.1 Examples of Common Subexpression +Elimination

+ +

If neither a nor b is changed in CODE, the instructions +can be replaced by those of Fig. 7.1(b), which saves one +multiplication, but costs an extra store instruction. If the +value of x is not changed in CODE either, the instructions +can be replaced by those of Fig. 7.1(c). In this case the +extra store is not needed.

+ +

In the following sections we will describe which +transformations are done by CS and how this phase was +implemented.

+ +

7.2. Specification of the Common Subexpression Elimination phase

+ +

In this section we will describe the window through +which CS examines the code, the expressions recognized by +CS, and finally the changes made to the code.

+ +

7.2.1. The working window

+ +

The CS algorithm is applied to the largest sequence of +textually adjacent basic blocks B1,..,Bn, for which

+
     PRED(Bj) = {Bj-1},  j = 2,..,n.
+
+ +

Intuitively, this window consists of straight line code, +with only one entry point (at the beginning); it may contain +jumps, which should all have their targets outside the +window. This is illustrated in Fig. 7.2.

+ + + + +

x := a * b;

+ + + + + + + + + + + + + +
+ +

(1)
+if x < 10 then

+
+
+ +

(2)
+y := a * b;

+
+ +

(3)

+
+
+ +

Fig. 7.2 The working window of CS

+ +

Line (2) can only be executed after line (1). Likewise, +line (3) can only be executed after line (2). Both a and b +have the same values at line (1) and at line (3).

+ +

Larger windows were avoided. In Fig. 7.3, the value of a +at line (4) may have been obtained at more than one +point.

+ + + + +

x := a * b;

+ + + + + + + + + + + + + + + + + + + + + + + +
+ +

(1)
+if x < 10 then

+
+
+ +

(2)
+a := 100;

+
+
+ +

(3)
+y := a * b;

+
+
+ +

(4)

+
+
+ +

Fig. 7.3 Several working windows

+ +

7.2.2. Recognized expressions.

+ +

The computations eliminated by CS need not be normal +expressions (like "a * b"), but can even consist +of a single operand that is expensive to access, such as an +array element or a record field. If an array element is +used, its address is computed implicitly. CS is able to +eliminate either the element itself or its address, +whichever one is most profitable. A variable of a textually +enclosing procedure may also be expensive to access, +depending on the lexical level difference.

+ +

7.2.3. Transformations

+ +

CS creates a new temporary local variable (TMP) for +every eliminated expression, unless it is able to use an +existing local variable. It emits code to initialize this +variable with the result of the expression. Most recurrences +of the expression can simply be replaced by a reference to +TMP. If the address of an array element is recognized as a +common subexpression, references to the element itself are +replaced by indirect references through TMP (see Fig. +7.4).

+ +

+ +

Fig. 7.4 Elimination of an array address computation

+ +

Here, ’&’ is the ’address +of’ operator, and unary ’*’ is the +indirection operator. (Note that EM actually has different +instructions to do a use-indirect or an +assign-indirect.)

+ +

7.3. Implementation

+ +

7.3.1. The value number method

+ +

To determine whether two expressions have the same +result, there must be some way to determine whether their +operands have the same values. We use a system of value +numbers [Kenn81a] in which each distinct value of +whatever type, created or used within the working window, +receives a unique identifying number, its value number. Two +items have the same value number if and only if, based only +upon information from the instructions in the window, their +values are provably identical. For example, after processing +the statement

+
     a := 4;
+
+ +

the variable a and the constant 4 have the same value +number.

+ +

The value number of the result of an expression depends +only on the kind of operator and the value number(s) of the +operand(s). The expressions need not be textually equal, as +shown in Fig. 7.5.

+ +

+ +

Fig. 7.5 Different expressions with the same value +number

+ +

At line (1) a receives the same value number as c. At +line (2) d receives the same value number as b. At line (4) +the expression "c * d" receives the same value +number as the expression "a * b" at line (2), +because the value numbers of their left and right operands +are the same, and the operator (*) is the same.

+ +

As another example of the value number method, consider +Fig. 7.6.

+ +

+ +

Fig. 7.6 Identical expressions with the different value +numbers

+ +

Although textually the expressions "a * b" in +line 1 and line 3 are equal, a will have different value +numbers at line 3 and line 1. The two expressions will not +mistakenly be recognized as equivalent.

+ +

7.3.2. Entities

+ +

The Value Number Method distinguishes between operators +and operands. The value numbers of operands are stored in a +table, called the symbol table. The value number of a +subexpression depends on the (root) operator of the +expression and on the value numbers of its operands. A table +of "available expressions" is used to do this +mapping.

+ +

CS recognizes the following kinds of EM operands, called +entities:

+
     - constant
+     - local variable
+     - external variable
+     - indirectly accessed entity
+     - offsetted entity
+     - address of local variable
+     - address of external variable
+     - address of offsetted entity
+     - address of local base
+     - address of argument base
+     - array element
+     - procedure identifier
+     - floating zero
+     - local base
+     - heap pointer
+     - ignore mask
+
+ +

Whenever a new entity is encountered in the working +window, it is entered in the symbol table and given a brand +new value number. Most entities have attributes (e.g. the +offset in the current stackframe for local variables), which +are also stored in the symbol table.

+ +

An entity is called static if its value cannot be +changed (e.g. a constant or an address).

+ +

7.3.3. Parsing expressions

+ +

Common subexpressions are recognized by simulating the +behaviour of the EM machine. The EM code is parsed from left +to right; as EM is postfix code, this is a bottom up parse. +At any point the current state of the EM runtime stack is +reflected by a simulated "fake stack", containing +descriptions of the parsed operands and expressions. A +descriptor consists of:

+
     (1) the value number of the operand or expression
+     (2) the size of the operand or expression
+     (3) a pointer to the first line of EM-code
+         that constitutes the operand or expression
+
+ +

Note that operands may consist of several EM +instructions. Whenever an operator is encountered, the +descriptors of its operands are on top of the fake stack. +The operator and the value numbers of the operands are used +as indices in the table of available expressions, to +determine the value number of the expression.

+ +

During the parsing process, we keep track of the first +line of each expression; we need this information when we +decide to eliminate the expression.

+ +

7.3.4. Updating entities

+ +

An entity is assigned a value number when it is used for +the first time in the working window. If the entity is used +as left hand side of an assignment, it gets the value number +of the right hand side. Sometimes the effects of an +instruction on an entity cannot be determined exactly; the +current value and value number of the entity may become +inconsistent. Hence the current value number must be +forgotten. This is achieved by giving the entity a new value +number that was not used before. The entity is said to be +killed.

+ +

As information is lost when an entity is killed, CS +tries to save as many entities as possible. In case of an +indirect assignment through a pointer, some analysis is done +to see which variables cannot be altered. For a procedure +call, the interprocedural information contained in the +procedure table is used to restrict the set of entities that +may be changed by the call. Local variables for which the +front end generated a register message can never be changed +by an indirect assignment or a procedure call.

+ +

7.3.5. Changing the EM text

+ +

When a new expression comes available, it is checked +whether its result is saved in a local that may go in a +register. The last line of the expression must be followed +by a STL or SDL instruction (depending on the size of the +result) and a register message must be present for this +local. If there is such a local, it is recorded in the +available expressions table. Each time a new occurrence of +this expression is found, the value number of the local is +compared against the value number of the result. If they are +different the local cannot be used and is forgotten.

+ +

The available expressions are linked in a list. New +expressions are linked at the head of the list. In this way +expressions that are contained within other expressions +appear later in the list, because EM-expressions are +postfix. The elimination process walks through the list, +starting at the head, to find the largest expressions first. +If an expression is eliminated, any expression later on in +the list, contained in the former expression, is removed +from the list, as expressions can only be eliminated +once.

+ +

A STL or SDL is emitted after the first occurrence of +the expression, unless there was an existing local variable +that could hold the result.

+ +

7.3.6. Desirability analysis

+ +

Although the global optimizer works on EM code, the goal +is to improve the quality of the object code. Therefore some +machine-dependent information is needed to decide whether it +is desirable to eliminate a given expression. Because it is +impossible for the CS phase to know exactly what code will +be generated, some heuristics are used. CS essentially looks +for some special cases that should not be eliminated. These +special cases can be turned on or off for a given machine, +as indicated in a machine descriptor file.

+ +

Some operators can sometimes be translated into an +addressing mode for the machine at hand. Such an operator is +only eliminated if its operand is itself expensive, i.e. it +is not just a simple load. The machine descriptor file +contains a set of such operators.

+ +

Eliminating the loading of the Local Base or the +Argument Base by the LXL resp. LXA instruction is only +beneficial if the difference in lexical levels exceeds a +certain threshold. The machine descriptor file contains this +threshold.

+ +

Replacing a SAR or a LAR by an AAR followed by a LOI may +possibly increase the size of the object code. We assume +that this is only possible when the size of the array +element is greater than some limit.

+ +

There are back ends that can very efficiently translate +the index computing instruction sequence LOC SLI ADS. If +this is the case, the SLI instruction between a LOC and an +ADS is not eliminated.

+ +

To handle unforseen cases, the descriptor file may also +contain a set of operators that should never be +eliminated.

+ +

7.3.7. The algorithm

+ +

After these preparatory explanations, the algorithm +itself is easy to understand. For each instruction within +the current window, the following steps are performed in the +given order :

+ + + + + + +
+ +

1.

+
+ +

Check if this instruction defines an entity. If so, the +set of entities is updated accordingly.

+
+ + + + + + +
+ +

2.

+
+ +

Kill all entities that might be affected by this +instruction.

+
+ + + + + + +
+ +

3.

+
+ +

Simulate the instruction on the fake-stack. If this +instruction is an operator, update the list of available +expressions accordingly.

+
+ +

The result of this process is a list of available +expressions plus the information needed to eliminate them. +Expressions that are desirable to eliminate are eliminated. +Next, the window is shifted and the process is repeated.

+ +

7.4. Implementation.

+ +

In this section we will discuss the implementation of +the CS phase. We will first describe the basic actions that +are undertaken by the algorithm, than the algorithm +itself.

+ +

7.4.1. Partioning the EM instructions

+ +

There are over 100 EM instructions. For our purpose we +partition this huge set into groups of instructions which +can be more or less conveniently handled together.

+ +

There are groups for all sorts of load instructions: +simple loads, expensive loads, loads of an array element. A +load is considered expensive when more than one EM +instructions are involved in loading it. The load of a +lexical entity is also considered expensive. For instance: +LOF is expensive, LAL is not. LAR forms a group on its own, +because it is not only an expensive load, but also +implicitly includes the ternary operator AAR, which computes +the address of the array element.

+ +

There are groups for all sorts of operators: unary, +binary, and ternary. The groups of operators are further +partitioned according to the size of their operand(s) and +result.

+ +

There are groups for all sorts of stores: direct, +indirect, array element. The SAR forms a group on its own +for the same reason as appeared with LAR.

+ +

The effect of the remaining instructions is less clear. +They do not help very much in parsing expressions or in +constructing our pseudo symboltable. They are partitioned +according to the following criteria:

+ + + + + + + +
+ +

-

+
+ +

They change the value of an entity without using the +stack (e.g. ZRL, DEE).

+
+ + + + + + + + +
+ +

-

+
+ +

They are subroutine calls (CAI, CAL).

+
+
+ + + + + + + +
+ +

-

+
+ +

They change the stack in some irreproduceable way (e.g. +ASP, LFR, DUP).

+
+ + + + + + + +
+ +

-

+
+ +

They have no effect whatever on the stack or on the +entities. This does not mean they can be deleted, but they +can be ignored for the moment (e.g. MES, LIN, NOP).

+
+ + + + + + + +
+ +

-

+
+ +

Their effect is too complicate too compute, so we just +assume worst case behaviour. Hopefully, they do not occur +very often. (e.g. MON, STR, BLM).

+
+ + + + + + + +
+ +

-

+
+ +

They signal the end of the basic block (e.g. BLT, RET, +TRP).

+
+ +

7.4.2. Parsing expressions

+ +

To recognize expressions, we simulate the behaviour of +the EM machine, by means of a fake-stack. When we scan the +instructions in sequential order, we first encounter the +instructions that load the operands on the stack, and then +the instruction that indicates the operator, because EM +expressions are postfix. When we find an instruction to load +an operand, we load on the fake-stack a struct with the +following information:

+ +

+ +

In most cases, (3) will point to the line that loaded +the operand (e.g. LOL, LOC), i.e. there is only one line +that refers to this operand, but sometimes some information +must be popped to load the operand (e.g. LOI, LAR). This +information must have been pushed before, so we also pop a +pointer to the first line that pushed the information. This +line is now the first line that defines the operand.

+ +

When we find the operator instruction, we pop its +operand(s) from the fake-stack. The first line that defines +the first operand is now the first line of the expression. +We now have all information to determine whether the just +parsed expression has occurred before. We also know the +first and last line of the expression; we need this when we +decide to eliminate it. Associated with each available +expression is a set of which the elements contains the first +and last line of a recurrence of this expression.

+ +

Not only will the operand(s) be popped from the +fake-stack, but the following will be pushed:

+ +

+ +

In this way an item on the fake-stack always contains +the necessary information. EM expressions are parsed bottum +up.

+ +

7.4.3. Updating entities

+ +

As said before, we build our private +"symboltable", while scanning the EM-instructions. +The behaviour of the EM-machine is not only reflected in the +fake-stack, but also in the entities. When an entity is +created, we do not yet know its value, so we assign a brand +new value number to it. Each time a store-instruction is +encountered, we change the value number of the target entity +of this store to the value number of the token that was +popped from the fake-stack. Because entities may overlap, we +must also "forget" the value numbers of entities +that might be affected by this store. Each such entity will +be killed, i.e. assigned a brand new valuenumber.

+ +

Because we lose information when we forget the value +number of an entity, we try to save as much entities as +possible. When we store into an external, we don’t +have to kill locals and vice versa. Furthermore, we can see +whether two locals or two externals overlap, because we know +the offset from the local base, resp. the offset within the +data block, and the size. The situation becomes more +complicated when we have to consider indirection. The worst +case is that we store through an unknown pointer. In that +case we kill all entities except those locals for which a +so-called register message has been generated; this +register message indicates that this local can never be +accessed indirectly. If we know this pointer we can be more +careful. If it points to a local then the entity that is +accessed through this pointer can never overlap with an +external. If it points to an external this entity can never +overlap with a local. Furthermore, in the latter case, we +can find the data block this entity belongs to. Since +pointer arithmetic is only defined within a data block, this +entity can never overlap with entities that are known to +belong to another data block.

+ +

Not only after a store-instruction but also after a +subroutine-call it may be necessary to kill entities; the +subroutine may affect global variables or store through a +pointer. If a subroutine is called that is not available as +EM-text, we assume worst case behaviour, i.e. we kill all +entities without register message.

+ +

7.4.4. Additions and replacements.

+ +

When a new expression comes available, we check whether +the result is saved in a local that may go in a register. +The last line of the expression must be followed by a STL or +SDL instruction, depending on the size of the result (resp. +WS and 2*WS), and a register message must be present for +this local. If we have found such a local, we store a +pointer to it with the available expression. Each time a new +occurrence of this expression is found, we compare the value +number of the local against the value number of the result. +When they are different we remove the pointer to it, because +we cannot use it.

+ +

The available expressions are singly linked in a list. +When a new expression comes available, we link it at the +head of the list. In this way expressions that are contained +within other expressions appear later in the list, because +EM-expressions are postfix. When we are going to eliminate +expressions, we walk through the list, starting at the head, +to find the largest expressions first. When we decide to +eliminate an expression, we look at the expressions in the +tail of the list, starting from where we are now, to delete +expressions that are contained within the chosen one because +we cannot eliminate an expression more than once.

+ +

When we are going to eliminate expressions, and we do +not have a local that holds the result, we emit a STL or SDL +after the line where the expression was first found. The +other occurrences are simply removed, unless they contain +instructions that not only have effect on the stack; e.g. +messages, stores, calls. Before each instruction that needs +the result on the stack, we emit a LOL or LDL. When the +expression was an AAR, but the instruction was a LAR or a +SAR, we append a LOI resp. a STI of the number of bytes in +an array-element after each LOL/LDL.

+ +

7.4.5. Desirability analysis

+ +

Although the global optimizer works on EM code, the goal +is to improve the quality of the object code. Therefore we +need some machine dependent information to decide whether it +is desirable to eliminate a given expression. Because it is +impossible for the CS phase to know exactly what code will +be generated, we use some heuristics. In most cases it will +save time when we eliminate an operator, so we just do it. +We only look for some special cases.

+ +

Some operators can in some cases be translated into an +addressing mode for the machine at hand. We only eliminate +such an operator, when its operand is itself +"expensive", i.e. not just a simple load. The user +of the CS phase has to supply a set of such operators.

+ +

Eliminating the loading of the Local Base or the +Argument Base by the LXL resp. LXA instruction is only +beneficial when the number of lexical levels we have to go +back exceeds a certain threshold. This threshold will be +different when registers are saved by the back end. The user +must supply this threshold.

+ +

Replacing a SAR or a LAR by an AAR followed by a LOI may +possibly increase the size of the object code. We assume +that this is only possible when the size of the array +element is greater than some (user-supplied) limit.

+ +

There are back ends that can very efficiently translate +the index computing instruction sequence LOC SLI ADS. If +this is the case, we do not eliminate the SLI instruction +between a LOC and an ADS.

+ +

To handle unforeseen cases, the user may also supply a +set of operators that should never be eliminated.

+ +

7.4.6. The algorithm

+ +

After these preparatory explanations, we can be short +about the algorithm itself. For each instruction within our +window, the following steps are performed in the order +given:

+ + + + + + +
+ +

1.

+
+ +

We check if this instructin defines an entity. If this +is the case the set of entities is updated accordingly.

+
+ + + + + + +
+ +

2.

+
+ +

We kill all entities that might be affected by this +instruction.

+
+ + + + + + +
+ +

3.

+
+ +

The instruction is simulated on the fake-stack. Copy +propagation is done. If this instruction is an operator, we +update the list of available expressions accordingly.

+
+ +

When we have processed all instructions this way, we +have built a list of available expressions plus the +information we need to eliminate them. Those expressions of +which desirability analysis tells us so, we eliminate. The +we shift our window and continue.

+ +

7.5. Source files of CS

+ +

The sources of CS are in the following files and +packages:

+ + + + + + +
+ +

cs.h

+
+ +

declarations of global variables and data structures

+
+ + + + + + +
+ +

cs.c

+
+ +

the routine main; a driving routine to process the basic +blocks in the right order

+
+ + + + + + +
+ +

vnm

+
+ +

implements a procedure that performs the value numbering +on one basic block

+
+ + + + + + +
+ +

eliminate

+
+ +

implements a procedure that does the transformations, if +desirable

+
+ + + + + + +
+ +

avail

+
+ +

implements a procedure that manipulates the list of +available expressions

+
+ + + + + + +
+ +

entity

+
+ +

implements a procedure that manipulates the set of +entities

+
+ + + + + + +
+ +

getentity

+
+ +

implements a procedure that extracts the pseudo +symboltable information from EM-instructions; uses a small +table

+
+ + + + + + +
+ +

kill

+
+ +

implements several routines that find the entities that +might be changed by EM-instructions and kill them

+
+ + + + + + +
+ +

partition

+
+ +

implements several routines that partition the huge set +of EM-instructions into more or less manageable, more or +less logical chunks

+
+ + + + + + +
+ +

profit

+
+ +

implements a procedure that decides whether it is +advantageous to eliminate an expression; also removes +expressions with side-effects

+
+ + + + + + +
+ +

stack

+
+ +

implements the fake-stack and operations on it

+
+ + + + + + +
+ +

alloc

+
+ +

implements several allocation routines

+
+ + + + + + +
+ +

aux

+
+ +

implements several auxiliary routines

+
+ + + + + + +
+ +

debug

+
+ +

implements several routines to provide debugging and +verbose output

+
+ +

8. Stack pollution

+ +

8.1. Introduction

+ +

The "Stack Pollution" optimization technique +(SP) decreases the costs (time as well as space) of +procedure calls. In the EM calling sequence, the actual +parameters are popped from the stack by the calling +procedure. The ASP (Adjust Stack Pointer) instruction is +used for this purpose. A call in EM is shown in Fig. 8.1

+ +

+ +

Fig. 8.1 An example procedure call in Pascal and EM

+ +

As procedure calls occur often in most programs, the ASP +is one of the most frequently used EM instructions.

+ +

The main intention of removing the actual parameters +after a procedure call is to avoid the stack size to +increase rapidly. Yet, in some cases, it is possible to +delay or even avoid the removal of the +parameters without letting the stack grow significantly. In +this way, considerable savings in code size and execution +time may be achieved, at the cost of a slightly increased +stack size.

+ +

A stack adjustment may be delayed if there is some other +stack adjustment later on in the same basic block. The two +ASPs can be combined into one.

+ +

+ +

Fig. 8.2 An example of local Stack Pollution

+ +

The stacksize will be increased only temporarily. If the +basic block contains another ASP, the ASP 10 may +subsequently be combined with that next ASP, and so on.

+ +

For some back ends, a stack adjustment also takes place +at the point of a procedure return. There is no need to +specify the number of bytes to be popped at a return. This +provides an opportunity to remove ASPs more globally. If all +ASPs outside any loop are removed, the increase of the stack +size will still only be small, as no such ASP is executed +more than once without an intervening return from the +procedure it is part of.

+ +

This second approach is not generally applicable to all +target machines, as some back ends require the stack to be +cleaned up at the point of a procedure return.

+ +

8.2. Implementation

+ +

There is one main problem the implementation has to +solve. In EM, the stack is not only used for passing +parameters, but also for evaluating expressions. Hence, ASP +instructions can only be combined or removed if certain +conditions are satisfied.

+ +

Two consecutive ASPs of one basic block can only be +combined (as described above) if:

+ + + + + + +
+ +

1.

+
+ +

On no point of text in between the two ASPs, any item is +popped from the stack that was pushed onto it before the +first ASP.

+
+ + + + + + +
+ +

2.

+
+ +

The number of bytes popped from the stack by the second +ASP must equal the number of bytes pushed since the first +ASP.

+
+ +

Condition 1. is not satisfied in Fig. 8.3.

+ +

+ +

Fig. 8.3 An illegal transformation

+ +

If the first ASP were removed (delayed), the first ADI +would add 10 and f(10), instead of 5 and f(10).

+ +

Condition 2. is not satisfied in Fig. 8.4.

+ +

+ +

Fig. 8.4 A second illegal transformation

+ +

If the two ASPs were combined into one ’ASP +4’, the constant 5 would have been popped, rather than +the parameter 10 (so ’10 + f(10)*g(30)’ would +have been computed).

+ +

The second approach to deleting ASPs (i.e. let the +procedure return do the stack clean-up) is only applied to +the last ASP of every basic block. Any preceding ASPs are +dealt with by the first approach. The last ASP of a basic +block B will only be removed if:

+ + + + + + +
+ +

-

+
+ +

on no path in the control flow graph from B to any block +containing a RET (return) there is a basic block that, at +some point of its text, pops items from the stack that it +has not itself pushed earlier.

+
+ +

Clearly, if this condition is satisfied, no harm can be +done; no other basic block will ever access items that were +pushed on the stack before the ASP.

+ +

The number of bytes pushed onto or popped from the stack +can be easily encoded in a so called "pop-push +table". The numbers in general depend on the target +machine word- and pointer size and on the argument given to +the instruction. For example, an ADS instruction is +described by:

+
        -a-p+p
+
+ +

which means: an ’ADS n’ first pops an n-byte +value (n being the argument), next pops a pointer-size value +and finally pushes a pointer-size value. For some +infrequently used EM instructions the pop-push numbers +cannot be computed statically.

+ +

The stack pollution algorithm first performs a depth +first search over the control flow graph and marks all +blocks that do not satisfy the global condition. Next it +visits all basic blocks in turn. For every pair of adjacent +ASPs, it checks conditions 1. and 2. and combines the ASPs +if they are satisfied. The new ASP may be used as first ASP +in the next pair. If a condition fails, it simply continues +with the next ASP. Finally, the last ASP is removed if:

+ + + + + + +
+ +

-

+
+ +

nothing has been popped from the stack after the last +ASP that was pushed before it

+
+ + + + + + +
+ +

-

+
+ +

the block was not marked by the depth first search

+
+ + + + + + + +
+ +

-

+
+ +

the block is not in a loop

+
+
+ +

9. Cross jumping

+ +

9.1. Introduction

+ +

The "Cross Jumping" optimization technique +(CJ) [Wulf75a] is basically a space optimization technique. +It looks for pairs of basic blocks (B1,B2), for which:

+
     SUCC(B1) = SUCC(B2) = {S}
+
+ +

(So B1 and B2 both have one and the same successor). If +the last few non-branch instructions are the same for B1 and +B2, one such sequence can be eliminated.

+
     Pascal:
+
+
+     if cond then
+         S1
+         S3
+     else
+         S2
+         S3
+
+
+     (pseudo) EM:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +

+ +

Fig. 9.1 An example of Cross Jumping

+ +

As the basic blocks have the same successor, at least +one of them ends in an unconditional branch instruction +(BRA). Hence no extra branch instruction is ever needed, +just the target of an existing branch needs to be changed; +neither the program size nor the execution time will ever +increase. In general, the execution time will remain the +same, unless further optimizations can be applied because of +this optimization.

+ +

This optimization is particularly effective, because it +cannot always be done by the programmer at the source level, +as demonstrated by the Fig. 8.2.

+ + + + +

Pascal:

+
+ +

if cond then
+x := f(4)
+else
+x := g(5)

+ +

EM:

+ +

+ +

Fig. 9.2 Effectiveness of Cross Jumping

+ +

At the source level there is no common tail, but at the +EM level there is a common tail.

+ +

9.2. Implementation

+ +

The implementation of cross jumping is rather +straightforward. The technique is applied to one procedure +at a time. The control flow graph of the procedure is +scanned for pairs of basic blocks with the same (single) +successor and with common tails. Note that there may be more +than two such blocks (e.g. as the result of a case +statement). This is dealt with by repeating the entire +process until no further optimizations can de done for the +current procedure.

+ +

If a suitable pair of basic blocks has been found, the +control flow graph must be altered. One of the basic blocks +must be split into two. The control flow graphs before and +after the optimization are shown in Fig. 9.3 and Fig. +9.4.

+
             --------                                --------
+             |      |                                |      |
+             | S1   |                                | S2   |
+             | S3   |                                | S3   |
+             |      |                                |      |
+             --------                                --------
+                |                                       |
+                |------------------|--------------------|
+                                   |
+                                   v
+
+
+     Fig. 9.3 CFG before optimization
+
+
             --------                                --------
+             |      |                                |      |
+             | S1   |                                | S2   |
+             |      |                                |      |
+             --------                                --------
+                |                                       |
+                |--------------------<------------------|
+                v
+             --------
+             |      |
+             | S3   |
+             |      |
+             --------
+                |
+                v
+
+
+     Fig. 9.4 CFG after optimization
+
+ +

Some attributes of the three resulting blocks (such as +immediate dominator) are updated.

+ +

In some cases, cross jumping might split the computation +of an expression into two, by inserting a branch somewhere +in the middle. Most code generators will generate very poor +assembly code when presented with such EM code. Therefor, +cross jumping is not performed in these cases.

+ +

10. Branch Optimization

+ +

10.1. Introduction

+ +

The Branch Optimization phase (BO) performs two related +(branch) optimizations.

+ +

10.1.1. Fusion of basic blocks

+ +

If two basic blocks B1 and B2 have the following +properties:

+
     SUCC(B1) = {B2}
+     PRED(B2) = {B1}
+
+ +

then B1 and B2 can be combined into one basic block. If +B1 ends in an unconditional jump to the beginning of B2, +this jump can be eliminated, hence saving a little execution +time and object code size. This technique can be used to +eliminate some deficiencies introduced by the front ends +(for example, the "C" front end translates switch +statements inefficiently due to its one pass nature).

+ +

10.1.2. While-loop optimization

+ +

The straightforward way to translate a while loop is to +put the test for loop termination at the beginning of the +loop.

+
     while cond loop                       LAB1: Test cond
+        body of the loop     --->                Branch On False To LAB2
+     end loop                                    code for body of loop
+                                                 Branch To LAB1
+                                           LAB2:
+
+
+     Fig. 10.1 Example of Branch Optimization
+
+ +

If the condition fails at the Nth iteration, the +following code gets executed (dynamically):

+ +

+ +

An alternative translation is:

+
          Branch To LAB2
+     LAB1:
+          code for body of loop
+     LAB2:
+          Test cond
+          Branch On True To LAB1
+
+ +

This translation results in the following profile:

+ +

+ +

So the second translation will be significantly faster +if N >> 2. If N=2, execution time will be slightly +increased. On the average, the program will be speeded up. +Note that the code sizes of the two translations will be the +same.

+ +

10.2. Implementation

+ +

The basic block fusion technique is implemented by +traversing the control flow graph of a procedure, looking +for basic blocks B with only one successor (S). If one is +found, it is checked if S has only one predecessor (which +has to be B). If so, the two basic blocks can in principle +be combined. However, as one basic block will have to be +moved, the textual order of the basic blocks will be +altered. This reordering causes severe problems in the +presence of conditional jumps. For example, if S ends in a +conditional branch, the basic block that comes textually +next to S must stay in that position. So the transformation +in Fig. 10.2 is illegal.

+ +

+ +

Fig. 10.2 An illegal transformation of Branch +Optimization

+ +

If B is moved towards S the same problem occurs if the +block before B ends in a conditional jump. The problem could +be solved by adding one extra branch, but this would reduce +the gains of the optimization to zero. Hence the +optimization will only be done if the block that follows S +(in the textual order) is not a successor of S. This +condition assures that S does not end in a conditional +branch. The condition always holds for the code generated by +the "C" front end for a switch statement.

+ +

After the transformation has been performed, some +attributes of the basic blocks involved (such as successor +and predecessor sets and immediate dominator) must be +recomputed.

+ +

The while-loop technique is applied to one loop at a +time. The list of basic blocks of the loop is traversed to +find a block B that satisfies the following conditions:

+ + + + + + +
+ +

1.

+
+ +

the textually next block to B is not part of the +loop

+
+ + + + + + +
+ +

2.

+
+ +

the last instruction of B is an unconditional branch; +hence B has only one successor, say S

+
+ + + + + + +
+ +

3.

+
+ +

the textually next block of B is a successor of S

+
+ + + + + + +
+ +

4.

+
+ +

the last instruction of S is a conditional branch

+
+ +

If such a block B is found, the control flow graph is +changed as depicted in Fig. 10.3.

+
            |                                    |
+            |                                    v
+            v                                    |
+            |-----<------|                       ----->-----|
+        ____|____        |                                  |
+        |       |        |               |-------|          |
+        |  S1   |        |               |       v          |
+        |  Bcc  |        |               |     ....         |
+     |--|       |        |               |                  |
+     |  ---------        |               |   ----|----      |
+     |                   |               |   |       |      |
+     |     ....          ^               |   |  S2   |      |
+     |                   |               |   |       |      |
+     |   ---------       |               |   |       |      |
+     v   |       |       |               ^   ---------      |
+     |   |  S2   |       |               |       |          |
+     |   | BRA   |       |               |       |-----<-----
+     |   |       |       |               |       v
+     |   ---------       |               |   ____|____
+     |       |           |               |   |       |
+     |       ------>------               |   |  S1   |
+     |                                   |   |  Bnn  |
+     |-------|                           |   |       |
+             |                           |   ----|----
+             v                           |       |
+                                         |----<--|
+                                                 |
+                                                 v
+
+
+     Fig. 10.3 Transformation of the CFG by Branch Optimization
+
+ +

11. Use-Definition analysis

+ +

11.1. Introduction

+ +

The "Use-Definition analysis" phase (UD) +consists of two related optimization techniques that both +depend on "Use-Definition" information. The +techniques are Copy Propagation and Constant Propagation. +They are best explained via an example (see Figs. 11.1 and +11.2).

+
        (1)  A := B                  A := B
+
+ + + + + +

... --> ...

+
+ +

(2) use(A) use(B)

+ +

Fig. 11.1 An example of Copy Propagation

+
        (1)  A := 12                  A := 12
+
+ + + + + +

... --> ...

+
+ +

(2) use(A) use(12)

+ +

Fig. 11.2 An example of Constant Propagation

+ +

Both optimizations have to check that the value of A at +line (2) can only be obtained at line (1). Copy Propagation +also has to assure that the value of B is the same at line +(1) as at line (2).

+ +

One purpose of both transformations is to introduce +opportunities for the Dead Code Elimination optimization. If +the variable A is used nowhere else, the assignment A := B +becomes useless and can be eliminated.
+If B is less expensive to access than A (e.g. this is +sometimes the case if A is a local variable and B is a +global variable), Copy Propagation directly improves the +code itself. If A is cheaper to access the transformation +will not be performed. Likewise, a constant as operand may +be cheeper than a variable. Having a constant as operand may +also facilitate other optimizations.

+ +

The design of UD is based on the theory described in +section 14.1 and 14.3 of. [Aho78a] As a main departure from +that theory, we do not demand the statement A := B to become +redundant after Copy Propagation. If B is cheaper to access +than A, the optimization is always performed; if B is more +expensive than A, we never do the transformation. If A and B +are equally expensive UD uses the heuristic rule to replace +infrequently used variables by frequently used ones. This +rule increases the chances of the assignment to become +useless.

+ +

In the next section we will give a brief outline of the +data flow theory used for the implementation of UD.

+ +

11.2. Data flow information

+ +

11.2.1. Use-Definition information

+ +

A definition of a variable A is an assignment to +A. A definition is said to reach a point p if there +is a path in the control flow graph from the definition to +p, such that A is not redefined on that path.

+ +

For every basic block B, we define the following +sets:

+ + + + + + +
+ +

GEN[b]

+
+ +

the set of definitions in b that reach the end of b.

+
+ + + + + + +
+ +

KILL[b]

+
+ +

the set of definitions outside b that define a variable +that is changed in b.

+
+ + + + + + +
+ +

IN[b]

+
+ +

the set of all definitions reaching the beginning of +b.

+
+ + + + + + +
+ +

OUT[b]

+
+ +

the set of all definitions reaching the end of b.

+
+ +

GEN and KILL can be determined by inspecting the code of +the procedure. IN and OUT are computed by solving the +following data flow equations:

+
     (1)    OUT[b] = IN[b] - KILL[b] + GEN[b]
+     (2)    IN[b]  = OUT[p1] + ... + OUT[pn],
+
+ + + + + +

where PRED(b) = {p1, ... , pn}

+
+ +

11.2.2. Copy information

+ +

A copy is a definition of the form "A := +B". A copy is said to be generated in a basic +block n if it occurs in n and there is no subsequent +assignment to B in n. A copy is said to be killed in +n if:

+ + + + + + +
+ +

(i)

+
+ +

it occurs in n and there is a subsequent assignment to B +within n, or

+
+ + + + + + +
+ +

(ii)

+
+ +

it occurs outside n, the definition A := B reaches the +beginning of n and B is changed in n (note that a copy also +is a definition).

+
+ +

A copy reaches a point p, if there are no +assignments to B on any path in the control flow graph from +the copy to p.

+ +

We define the following sets:

+ + + + + + +
+ +

C_GEN[b]

+
+ +

the set of all copies in b generated in b.

+
+ + + + + + + +
+ +

C_KILL[b]

+
+ +

the set of all copies killed in b.

+
+
+ + + + + + +
+ +

C_IN[b]

+
+ +

the set of all copies reaching the beginning of b.

+
+ + + + + + +
+ +

C_OUT[b]

+
+ +

the set of all copies reaching the end of b.

+
+ +

C_IN and C_OUT are computed by solving the following +equations: (root is the entry node of the current procedure; +’*’ denotes set intersection)

+
     (1)    C_OUT[b] = C_IN[b] - C_KILL[b] + C_GEN[b]
+     (2)    C_IN[b]  = C_OUT[p1] * ... * C_OUT[pn],
+
+ + + + + +

where PRED(b) = {p1, ... , pn} and b /= root

+
+ +

C_IN[root] = {all copies}

+ +

11.3. Pointers and subroutine calls

+ +

The theory outlined above assumes that variables can +only be changed by a direct assignment. This condition does +not hold for EM. In case of an assignment through a pointer +variable, it is in general impossible to see which variable +is affected by the assignment. Similar problems occur in the +presence of procedure calls. Therefore we distinguish two +kinds of definitions:

+ + + + + + +
+ +

-

+
+ +

an explicit definition is a direct assignment to +one specific variable

+
+ + + + + + +
+ +

-

+
+ +

an implicit definition is the potential +alteration of a variable as a result of a procedure call or +an indirect assignment.

+
+ +

An indirect assignment causes implicit definitions to +all variables that may be accessed indirectly, i.e. all +local variables for which no register message was generated +and all global variables. If a procedure contains an +indirect assignment it may change the same set of variables, +else it may change some global variables directly. The KILL, +GEN, IN and OUT sets contain explicit as well as implicit +definitions.

+ +

11.4. Implementation

+ +

UD first builds a number of tables:

+ + + + + + +
+ +

locals:

+
+ +

contains information about the local variables of the +current procedure (offset,size,whether a register message +was found for it and, if so, the score field of that +message)

+
+ + + + + + +
+ +

defs:

+
+ +

a table of all explicit definitions appearing in the +current procedure.

+
+ + + + + + +
+ +

copies:

+
+ +

a table of all copies appearing in the current +procedure.

+
+ +

Every variable (local as well as global), definition and +copy is identified by a unique number, which is the index in +the table. All tables are constructed by traversing the EM +code. A fourth table, "vardefs" is used, indexed +by a ’variable number’, which contains for every +variable the set of explicit definitions of it. Also, for +each basic block b, the set CHGVARS containing all variables +changed by it is computed.

+ +

The GEN sets are obtained in one scan over the EM text, +by analyzing every EM instruction. The KILL set of a basic +block b is computed by looking at the set of variables +changed by b (i.e. CHGVARS[b]). For every such variable v, +all explicit definitions to v (i.e. vardefs[v]) that are not +in GEN[b] are added to KILL[b]. Also, the implicit +defininition of v is added to KILL[b]. Next, the data flow +equations for use-definition information are solved, using a +straight forward, iterative algorithm. All sets are +represented as bitvectors, so the operations on sets (union, +difference) can be implemented efficiently.

+ +

The C_GEN and C_KILL sets are computed simultaneously in +one scan over the EM text. For every copy A := B appearing +in basic block b we do the following:

+ + + + + + +
+ +

1.

+
+ +

for every basic block n /= b that changes B, see if the +definition A := B reaches the beginning of n (i.e. check if +the index number of A := B in the "defs" table is +an element of IN[n]); if so, add the copy to C_KILL[n]

+
+ + + + + + +
+ +

2.

+
+ +

if B is redefined later on in b, add the copy to +C_KILL[b], else add it to C_GEN[b]

+
+ +

C_IN and C_OUT are computed from C_GEN and C_KILL via +the second set of data flow equations.

+ +

Finally, in one last scan all opportunities for +optimization are detected. For every use u of a variable A, +we check if there is a unique explicit definition d reaching +u.

+ +

If the definition is a copy A := B and B has the same +value at d as at u, then the use of A at u may be changed +into B. The latter condition can be verified as follows:

+ + + + + + +
+ +

-

+
+ +

if u and d are in the same basic block, see if there is +any assignment to B in between d and u

+
+ + + + + + +
+ +

-

+
+ +

if u and d are in different basic blocks, the condition +is satisfied if there is no assignment to B in the block of +u prior to u and d is in C_IN[b].

+
+ +

Before the transformation is actually done, UD first +makes sure the alteration is really desirable, as described +before. The information needed for this purpose (access +costs of local and global variables) is read from a machine +descriptor file.

+ +

If the only definition reaching u has the form "A +:= constant", the use of A at u is replaced by the +constant.

+ +

11.5. Source files of UD

+ +

The sources of UD are in the following files and +packages:

+ + + + + + +
+ +

ud.h:

+
+ +

declarations of global variables and data structures

+
+ + + + + + +
+ +

ud.c:

+
+ +

the routine main; initialization of target machine +dependent tables

+
+ + + + + + +
+ +

defs:

+
+ +

routines to compute the GEN and KILL sets and routines +to analyse EM instructions

+
+ + + + + + +
+ +

const:

+
+ +

routines involved in constant propagation

+
+ + + + + + +
+ +

copy:

+
+ +

routines involved in copy propagation

+
+ + + + + + + +
+ +

aux:

+
+ +

contains auxiliary routines

+
+
+ +

12. Live-Variable analysis

+ +

12.1. Introduction

+ +

The "Live-Variable analysis" optimization +technique (LV) performs some code improvements and computes +information that may be used by subsequent optimizations. +The main task of this phase is the computation of +live-variable information. [Aho78a section 14.4] A +variable A is said to be dead at some point p of the +program text, if on no path in the control flow graph from p +to a RET (return), A can be used before being changed; else +A is said to be live.

+ +

A statement of the form

+
     VARIABLE := EXPRESSION
+
+ +

is said to be dead if the left hand side variable is +dead just after the statement and the right hand side +expression has no side effects (i.e. it doesn’t change +any variable). Such a statement can be eliminated entirely. +Dead code will seldom be present in the original program, +but it may be the result of earlier optimizations, such as +copy propagation.

+ +

Live-variable information is passed to other phases via +messages in the EM code. Live/dead messages are generated at +points in the EM text where variables become dead or live. +This information is especially useful for the Register +Allocation phase.

+ +

12.2. Implementation

+ +

The implementation uses algorithm 14.6 of. [Aho78a] +First two sets DEF and USE are computed for every basic +block b:

+ + + + + + +
+ +

DEF(b)

+
+ +

the set of all variables that are assigned a value in b +before being used

+
+ + + + + + +
+ +

USE(b)

+
+ +

the set of all variables that may be used in b before +being changed.

+
+ +

(So variables that may, but need not, be used resp. +changed via a procedure call or through a pointer are +included in USE but not in DEF). The next step is to compute +the sets IN and OUT :

+ + + + + + +
+ +

IN[b]

+
+ +

the set of all variables that are live at the beginning +of b

+
+ + + + + + +
+ +

OUT[b]

+
+ +

the set of all variables that are live at the end of +b

+
+ +

IN and OUT can be computed for all blocks simultaneously +by solving the data flow equations:

+
     (1)   IN[b] = OUT[b] - DEF[b] + USE[b]
+     [2]   OUT[b] = IN[s1] + ... + IN[sn] ;
+
+ + + + + +

where SUCC[b] = {s1, ... , sn}

+
+ +

The equations are solved by a similar algorithm as for +the Use Definition equations (see previous chapter).

+ +

Finally, each basic block is visited in turn to remove +its dead code and to emit the live/dead messages. Every +basic block b is traversed from its last instruction +backwards to the beginning of b. Initially, all variables +that are dead at the end of b are marked dead. All others +are marked live. If we come across an assignment to a +variable X that was marked live, a live-message is put after +the assignment and X is marked dead; if X was marked dead, +the assignment may be removed, provided that the right hand +side expression contains no side effects. If we come across +a use of a variable X that was marked dead, a dead-message +is put after the use and X is marked live. So at any point, +the mark of X tells whether X is live or dead immediately +before that point. A message is also generated at the start +of a basic block for every variable that was live at the end +of the (textually) previous block, but dead at the entry of +this block, or v.v.

+ +

Only local variables are considered. This significantly +reduces the memory needed by this phase, eases the +implementation and is hardly less efficient than considering +all variables. (Note that it is very hard to prove that an +assignment to a global variable is dead).

+ +

13. Register Allocation

+ +

13.1. Introduction

+ +

The efficient usage of the general purpose registers of +the target machine plays a key role in any optimizing +compiler. This subject, often referred to as Register +Allocation, has great impact on both the code generator +and the optimizing part of such a compiler. The code +generator needs registers for at least the evaluation of +arithmetic expressions; the optimizer uses the registers to +decrease the access costs of frequently used entities (such +as variables). The design of an optimizing compiler must pay +great attention to the cooperation of optimization, register +allocation and code generation.

+ +

Register allocation has received much attention in +literature (see [Leve81a, Chai81a, Frei74a] and +[Site79a]).

+ +

13.2. Usage of registers in ACK compilers

+ +

We will first describe the major design decisions of the +Amsterdam Compiler Kit, as far as they concern register +allocation. Subsequently we will outline the role of the +Global Optimizer in the register allocation process and the +interface between the code generator and the optimizer.

+ +

13.2.1. Usage of registers without the intervention of the Global Optimizer

+ +

Registers are used for two purposes:

+ + + + + + + +
+ +

1.

+
+ +

for the evaluation of arithmetic expressions

+
+
+ + + + + + +
+ +

2.

+
+ +

to hold local variables, for the duration of the +procedure they are local to.

+
+ +

It is essential to note that no translation part of the +compilers, except for the code generator, knows anything at +all about the register set of the target computer. Hence all +decisions about registers are ultimately made by the code +generator. Earlier phases of a compiler can only +advise the code generator.

+ +

The code generator splits the register set into two: a +fixed part for the evaluation of expressions (called +scratch registers) and a fixed part to store local +variables. This partitioning, which depends only on the +target computer, significantly reduces the complexity of +register allocation, at the penalty of some loss of code +quality.

+ +

The code generator has some (machine-dependent) +knowledge of the access costs of memory locations and +registers and of the costs of saving and restoring +registers. (Registers are always saved by the called +procedure). This knowledge is expressed in a set of +procedures for each target machine. The code generator also +knows how many registers there are and of which type they +are. A register can be of type pointer, floating +point or general.

+ +

The front ends of the compilers determine which local +variables may be put in a register; such a variable may +never be accessed indirectly (i.e. through a pointer). The +front end also determines the types and sizes of these +variables. The type can be any of the register types or the +type loop variable, which denotes a general-typed +variable that is used as loop variable in a for-statement. +All this information is collected in a register +message in the EM code. Such a message is a pseudo EM +instruction. This message also contains a score +field, indicating how desirable it is to put this variable +in a register. A front end may assign a high score to a +variable if it was declared as a register variable (which is +only possible in some languages, such as "C"). Any +compiler phase before the code generator may change this +score field, if it has reason to do so. The code generator +bases its decisions on the information contained in the +register message, most notably on the score.

+ +

If the global optimizer is not used, the score fields +are set by the Peephole Optimizer. This optimizer simply +counts the number of occurrences of every local (register) +variable and adds this count to the score provided by the +front end. In this way a simple, yet quite effective +register allocation scheme is achieved.

+ +

13.2.2. The role of the Global Optimizer

+ +

The Global Optimizer essentially tries to improve the +scheme outlined above. It uses the following principles for +this purpose:

+ + + + + + +
+ +

-

+
+ +

Entities are not always assigned a register for the +duration of an entire procedure; smaller regions of the +program text may be considered too.

+
+ + + + + + +
+ +

-

+
+ +

several variables may be put in the same register +simultaneously, provided at most one of them is live at any +point.

+
+ + + + + + +
+ +

-

+
+ +

besides local variables, other entities (such as +constants and addresses of variables and procedures) may be +put in a register.

+
+ + + + + + + +
+ +

-

+
+ +

more accurate cost estimates are used.

+
+
+ +

To perform its task, the optimizer must have some +knowledge of the target machine.

+ +

13.2.3. The interface between the register allocator and the code generator

+ +

The RA phase of the optimizer must somehow be able to +express its decisions. Such decisions may look like: +’put constant 1283 in a register from line 12 to line +40’. To be precise, RA must be able to tell the code +generator to:

+ + + + + + + +
+ +

-

+
+ +

initialize a register with some value

+
+
+ + + + + + + +
+ +

-

+
+ +

update an entity from a register

+
+
+ + + + + + +
+ +

-

+
+ +

replace all occurrences of an entity in a certain region +of text by a reference to the register.

+
+ +

At least three problems occur here: the code generator +is only used to put local variables in registers, it only +assigns a register to a variable for the duration of an +entire procedure and it is not used to have some earlier +compiler phase make all the decisions.

+ +

All problems are solved by one mechanism, that involves +no changes to the code generator. With every (non-scratch) +register R that will be used in a procedure P, we associate +a new variable T, local to P. The size of T is the same as +the size of R. A register message is generated for T with an +exceptionally high score. The scores of all original +register messages are set to zero. Consequently, the code +generator will always assign precisely those new variables +to a register. If the optimizer wants to put some entity, +say the constant 1283, in a register, it emits the code +"T := 1283" and replaces all occurrences of +’1283’ by T. Similarly, it can put the address +of a procedure in T and replace all calls to that procedure +by indirect calls. Furthermore, it can put several different +entities in T (and thus in R) during the lifetime of P.

+ +

In principle, the code generated by the optimizer in +this way would always be valid EM code, even if the +optimizer would be presented a totally wrong description of +the target computer register set. In practice, it would be a +waste of data as well as text space to allocate memory for +these new variables, as they will always be assigned a +register (in the correct order of events). Hence, no memory +locations are allocated for them. For this reason they are +called pseudo local variables.

+ +

13.3. The register allocation phase

+ +

13.3.1. Overview

+ +

The RA phase deals with one procedure at a time. For +every procedure, it first determines which entities may be +put in a register. Such an entity is called an item. +For every item it decides during which parts of the +procedure it might be assigned a register. Such a region is +called a timespan. For any item, several (possibly +overlapping) timespans may be considered. A pair +(item,timespan) is called an allocation. If the items +of two allocations are both live at some point of time in +the intersections of their timespans, these allocations are +said to be rivals of each other, as they cannot be +assigned the same register. The rivals-set of every +allocation is computed. Next, the gains of assigning a +register to an allocation are estimated, for every +allocation. With all this information, decisions are made +which allocations to store in which registers +(packing). Finally, the EM text is transformed to +reflect these decisions.

+ +

13.3.2. The item recognition subphase

+ +

RA tries to put the following entities in a +register:

+ + + + + + +
+ +

-

+
+ +

a local variable for which a register message was +found

+
+ + + + + + +
+ +

-

+
+ +

the address of a local variable for which no register +message was found

+
+ + + + + + + +
+ +

-

+
+ +

the address of a global variable

+
+
+ + + + + + + +
+ +

-

+
+ +

the address of a procedure

+
+
+ + + + + + + +
+ +

-

+
+ +

a numeric constant.

+
+
+ +

Only the address of a global variable may be put +in a register, not the variable itself. This approach avoids +the very complex problems that would be caused by procedure +calls and indirect pointer references (see [Aho78a sections +14.7 and 14.8] and [Spil71a]). Still, on most machines +accessing a global variable using indirect addressing +through a register is much cheaper than accessing it via its +address. Similarly, if the address of a procedure is put in +a register, the procedure can be called via an indirect +call.

+ +

With every item we associate a register type. This type +is

+
     for local variables: the type contained in the register message
+     for addresses of variables and procedures: the pointer type
+     for constants: the general type
+
+ +

An entity other than a local variable is not taken to be +an item if it is used only once within the current +procedure.

+ +

An item is said to be live at some point of the +program text if its value may be used before it is changed. +As addresses and constants are never changed, all items but +local variables are always live. The region of text during +which a local variable is live is determined via the +live/dead messages generated by the Live Variable analysis +phase of the Global Optimizer.

+ +

13.3.3. The allocation determination subphase

+ +

If a procedure has more items than registers, it may be +advantageous to put an item in a register only during those +parts of the procedure where it is most heavily used. Such a +part will be called a timespan. With every item we may +associate a set of timespans. If two timespans of an item +overlap, at most one of them may be granted a register, as +there is no use in putting the same item in two registers +simultaneously. If two timespans of an item are distinct, +both may be chosen; the item will possibly be put in two +different registers during different parts of the procedure. +The timespan may also consist of the whole procedure.

+ +

A list of (item,timespan) pairs (allocations) is build, +which will be the input to the decision making subphase of +RA (packing subphase). This allocation list is the main data +structure of RA. The description of the remainder of RA will +be in terms of allocations rather than items. The phrase +"to assign a register to an allocation" means +"to assign a register to the item of the allocation for +the duration of the timespan of the allocation". +Subsequent subphases will add more information to this +list.

+ +

Several factors must be taken into account when a +timespan for an item is constructed:

+ + + + + + +
+ +

1.

+
+ +

At any entry point of the timespan where the item +is live, the register must be initialized with the item

+
+ + + + + + +
+ +

2.

+
+ +

At any exit point of the timespan where the item is +live, the item must be updated.

+
+ +

In order to decrease these costs, we will only consider +timespans with one entry point and no live exit points.

+ +

13.3.4. The rivals computation subphase

+ +

As stated before, several different items may be put in +the same register, provided they are not live +simultaneously. For every allocation we determine the +intersection of its timespan and the lifetime of its item +(i.e. the part of the procedure during which the item is +live). The allocation is said to be busy during this +intersection. If two allocations are ever busy +simultaneously they are said to be rivals of each other. The +rivals information is added to the allocation list.

+ +

13.3.5. The profits computation subphase

+ +

To make good decisions, the packing subphase needs to +know which allocations can be assigned the same register +(rivals information) and how much is gained by granting an +allocation a register.

+ +

Besides the gains of using a register instead of an +item, two kinds of overhead costs must be taken into +account:

+ + + + + + +
+ +

-

+
+ +

the register must be initialized with the item

+
+ + + + + + +
+ +

-

+
+ +

the register must be saved at procedure entry and +restored at procedure exit.

+
+ +

The latter costs should not be due to a single +allocation, as several allocations can be assigned the same +register. These costs are dealt with after packing has been +done. They do not influence the decisions of the packing +algorithm, they may only undo them.

+ +

The actual profits consist of improvements of execution +time and code size. As the former is far more difficult to +estimate , we will discuss code size improvements first.

+ +

The gains of putting a certain item in a register +depends on how the item is used. Suppose the item is a +pointer variable. On machines that do not have a +double-indirect addressing mode, two instructions are needed +to dereference the variable if it is not in a register, but +only one if it is put in a register. If the variable is not +dereferenced, but simply copied, one instruction may be +sufficient in both cases. So the gains of putting a pointer +variable in a register are higher if the variable is +dereferenced often.

+ +

To make accurate estimates, detailed knowledge of the +target machine and of the code generator would be needed. +Therefore, a simplification has been made that substantially +limits the amount of target machine information that is +needed. The estimation of the number of bytes saved does not +take into account how an item is used. Rather, an average +number is used. So these gains are computed as follows:

+
     #bytes_saved = #occurrences * gains_per_occurrence
+
+ +

The number of occurrences is derived from the EM code. +Note that this is not exact either, as there is no +one-to-one correspondence between occurrences in the EM code +and in the assembler code.

+ +

The gains of one occurrence depend on:

+ + + + + + + +
+ +

1.

+
+ +

the type of the item

+
+
+ + + + + + + +
+ +

2.

+
+ +

the size of the item

+
+
+ + + + + + + +
+ +

3.

+
+ +

the type of the register

+
+
+ +

and for local variables and addresses of local +variables:

+ + + + + + + +
+ +

4.

+
+ +

the type of the local variable

+
+
+ + + + + + + +
+ +

5.

+
+ +

the offset of the variable in the stackframe

+
+
+ +

For every allocation we try two types of registers: the +register type of the item and the general register type. +Only the type with the highest profits will subsequently be +used. This type is added to the allocation information.

+ +

To compute the gains, RA uses a machine-dependent table +that is read from a machine descriptor file. By means of +this table the number of bytes saved can be computed as a +function of the five properties.

+ +

The costs of initializing a register with an item is +determined in a similar way. The cost of one initialization +is also obtained from the descriptor file. Note that there +can be at most one initialization for any allocation.

+ +

To summarize, the number of bytes a certain allocation +would save is computed as follows:

+ +

+ +

It is inherently more difficult to estimate the +execution time saved by putting an item in a register, +because it is impossible to predict how many times an item +will be used dynamically. If an occurrence is part of a +loop, it may be executed many times. If it is part of a +conditional statement, it may never be executed at all. In +the latter case, the speed of the program may even get worse +if an initialization is needed. As a clear example, consider +the piece of "C" code in Fig. 13.1.

+
     switch(expr) {
+           case 1:  p(); break;
+           case 2:  p(); p(); break;
+           case 3:  p(); break;
+           default: break;
+     }
+
+
+     Fig. 13.1 A "C" switch statement
+
+ +

Lots of bytes may be saved by putting the address of +procedure p in a register, as p is called four times +(statically). Dynamically, p will be called zero, one or two +times, depending on the value of the expression.

+ +

The optimizer uses the following strategy for optimizing +execution time:

+ + + + + + +
+ +

1.

+
+ +

try to put items in registers during loops +first

+
+ + + + + + +
+ +

2.

+
+ +

always keep the initializing code outside the loop

+
+ + + + + + +
+ +

3.

+
+ +

if an item is not used in a loop, do not put it in a +register if the initialization costs may be higher than the +gains

+
+ +

The latter condition can be checked by determining the +minimal number of usages (dynamically) of the item during +the procedure, via a shortest path algorithm. In the example +above, this minimal number is zero, so the address of p is +not put in a register.

+ +

The costs of one occurrence is estimated as described +above for the code size. The number of dynamic occurrences +is guessed by looking at the loop nesting level of every +occurrence. If the item is never used in a loop, the minimal +number of occurrences is used. From these facts, the +execution time improvement is assessed for every +allocation.

+ +

13.3.6. The packing subphase

+ +

The packing subphase takes as input the allocation list +and outputs a description of which allocations should be put +in which registers. So it is essentially the decision making +part of RA.

+ +

The packing system tries to assign a register to +allocations one at a time, in some yet to be defined order. +For every allocation A, it first checks if there is a +register (of the right type) that is already assigned to one +or more allocations, none of which are rivals of A. In this +case A is assigned the same register. Else, A is assigned a +new register, if one exists. A table containing the number +of free registers for every type is maintained. It is +initialized with the number of non-scratch registers of the +target computer and updated whenever a new register is +handed out. The packing algorithm stops when no more +allocations can or need be assigned a register.

+ +

After an allocation A has been packed, all allocations +with non-disjunct timespans (including A itself) are removed +from the allocation list.

+ +

In case the number of items exceeds the number of +registers, it is important to choose the most profitable +allocations. Due to the possibility of having several +allocations occupying the same register, this problem is +quite complex. Our packing algorithm uses simple heuristic +rules and avoids any combinatorial search. It has distinct +rules for different costs measures.

+ +

If object code size is the most important factor, the +algorithm is greedy and chooses allocations in decreasing +order of their profits attribute. It does not take into +account the fact that other allocations may be passed over +because of this decision.

+ +

If execution time is at prime stake, the algorithm first +considers allocations whose timespans consist of loops. +After all these have been packed, it considers the remaining +allocations. Within the two subclasses, it considers +allocations with the highest profits first. When assigning a +register to an allocation with a loop as timespan, the +algorithm checks if the item has already been put in a +register during another loop. If so, it tries to use the +same register for the new allocation. After all packing has +been done, it checks if the item has always been assigned +the same register (although not necessarily during all +loops). If so, it tries to put the item in that register +during the entire procedure. This is possible if the +allocation (item,whole_procedure) is not a rival of any +allocation with a different item that has been assigned to +the same register. Note that this approach is essentially +’bottom up’, as registers are first assigned +over small regions of text which are later collapsed into +larger regions. The advantage of this approach is the fact +that the decisions for one loop can be made independently of +all other loops.

+ +

After the entire packing process has been completed, we +compute for each register how much is gained in using this +register, by simply adding the net profits of all +allocations assigned to it. This total yield should outweigh +the costs of saving/restoring the register at procedure +entry/exit. As most modern processors (e.g. 68000, Vax) have +special instructions to save/restore several registers, the +differential costs of saving one extra register are by no +means constant. The costs are read from the machine +descriptor file and compared to the total yields of the +registers. As a consequence of this analysis, some +allocations may have their registers taken away.

+ +

13.3.7. The transformation subphase

+ +

The final subphase of RA transforms the EM text +according to the decisions made by the packing system. It +traverses the text of the currently optimized procedure and +changes all occurrences of items at points where they are +assigned a register. It also clears the score field of the +register messages for normal local variables and emits +register messages with a very high score for the pseudo +locals. At points where registers have to be initialized +with items, it generates EM code to do so. Finally it tries +to decrease the size of the stackframe of the procedure by +looking at which local variables need not be given memory +locations.

+ +

13.4. Source files of RA

+ +

The sources of RA are in the following files and +packages:

+ + + + + + +
+ +

ra.h:

+
+ +

declarations of global variables and data structures

+
+ + + + + + +
+ +

ra.c:

+
+ +

the routine main; initialization of target +machine-dependent tables

+
+ + + + + + +
+ +

items:

+
+ +

a routine to build the list of items of one procedure; +routines to manipulate items

+
+ + + + + + +
+ +

lifetime:

+
+ +

contains a subroutine that determines when items are +live/dead

+
+ + + + + + +
+ +

alloclist:

+
+ +

contains subroutines that build the initial allocations +list and that compute the rivals sets.

+
+ + + + + + +
+ +

profits:

+
+ +

contains a subroutine that computes the profits of the +allocations and a routine that determines the costs of +saving/restoring registers

+
+ + + + + + + +
+ +

pack:

+
+ +

contains the packing subphase

+
+
+ + + + + + + +
+ +

xform:

+
+ +

contains the transformation subphase

+
+
+ + + + + + +
+ +

interval:

+
+ +

contains routines to manipulate intervals of time

+
+ + + + + + + +
+ +

aux:

+
+ +

contains auxiliary routines

+
+
+ +

14. Compact assembly generation

+ +

14.1. Introduction

+ +

The "Compact Assembly generation phase" (CA) +transforms the intermediate code of the optimizer into EM +code in Compact Assembly Language (CAL) format. In the +intermediate code, all program entities (such as procedures, +labels, global variables) are denoted by a unique +identifying number (see 3.5). In the CAL output of the +optimizer these numbers have to be replaced by normal +identifiers (strings). The original identifiers of the input +program are used whenever possible. Recall that the IC phase +generates two files that can be used to map unique +identifying numbers to procedure names and global variable +names. For instruction labels CA always generates new names. +The reasons for doing so are:

+ + + + + + +
+ +

-

+
+ +

instruction labels are only visible inside one +procedure, so they can not be referenced in other +modules

+
+ + + + + + +
+ +

-

+
+ +

the names are not very suggestive anyway, as they must +be integer numbers

+
+ + + + + + +
+ +

-

+
+ +

the optimizer considerably changes the control structure +of the program, so there is really no one to one mapping of +instruction labels in the input and the output program.

+
+ +

As the optimizer combines all input modules into one +module, visibility problems may occur. Two modules M1 and M2 +can both define an identifier X (provided that X is not +externally visible in any of these modules). If M1 and M2 +are combined into one module M, two distinct entities with +the same name would exist in M, which is not allowed. +[Tane83a, section 11.1.4.3] In these cases, CA invents a new +unique name for one of the entities.

+ +

14.2. Implementation

+ +

CA first reads the files containing the procedure and +global variable names and stores the names in two tables. It +scans these tables to make sure that all names are +different. Subsequently it reads the EM text, one procedure +at a time, and outputs it in CAL format. The major part of +the code that does the latter transformation is adapted from +the EM Peephole Optimizer.

+ +

The main problem of the implementation of CA is to +assure that the visibility rules are obeyed. If an +identifier must be externally visible (i.e. it was +externally visible in the input program) and the identifier +is defined (in the output program) before being referenced, +an EXA or EXP pseudo must be generated for it. (Note that +the optimizer may change the order of definitions and +references, so some pseudos may be needed that were not +present in the input program). On the other hand, an +identifier may be only internally visible. If such an +identifier is referenced before being defined, an INA or INP +pseudo must be emitted prior to its first reference.

+ +

Acknowledgements

+ +

The author would like to thank Andy Tanenbaum for his +guidance, Duk Bekema for implementing the Common +Subexpression Elimination phase and writing the initial +documentation of that phase, Dick Grune for reading the +manuscript of this report and Ceriel Jacobs, Ed Keizer, +Martin Kersten, Hans van Staveren and the members of the +S.T.W. user’s group for their interest and +assistance.

+ +

References

+ +

References

+ + + + + +
+ +

a.

+
+
+ + + + + +
+ +

b.

+
+
+ +

Aho74a.

+ + + + + +
+

A.V. Aho, J.E. Hopcroft, and J.D. Ullman, The Design +and Analysis of Computer Algorithms, Addison-Wesley, +Reading, Massachusetts (1974).

+
+ +

Aho78a.

+ + + + + +
+

A.V. Aho and J.D. Ullman, Principles of compiler +design, Addison-Wesley, Reading, Massachusetts +(1978).

+
+ +

Alle81a.

+ + + + + +
+

F.E. Allen, J. Cocke, and K. Kennedy, “Reduction of +Operator Strength” in Program Flow Analysis, +ed. S.S. Muchnick and D. Jones, Prentice-Hall, Englewood +Cliffs, N.J. (1981).

+
+ +

Ankl82a.

+ + + + + +
+

P. Anklam, D. Cutler, R. Heinen, and M. MacLaren, +Engineering a compiler: Vax-11 code generation and +optimization, Digital Equipment Corporation (1982).

+
+ +

Bal86a.

+ + + + + +
+

H.E. Bal and A.S. Tanenbaum, “Language- and +Machine-independent Global Optimization on Intermediate +Code,” Computer Languages, 11, 2, pp. 105-121 +(April 1986).

+
+ +

Ball79a.

+ + + + + +
+

J.E. Ball, “Predicting the Effects of Optimization +on a Procedure Body,” SIGPLAN Notices, 14, 8, +pp. 214-220 (August 1979).

+
+ +

Cart77a.

+ + + + + +
+

J.L. Carter, “A Case Study of a New Code Generation +Technique for Compilers,” CACM, 20, 12, pp. +914-920 (December 1977).

+
+ +

Cart82a.

+ + + + + +
+

L.R. Carter, An analysis of Pascal Programs, UMI +Research Press, Ann Arbor, Michigan (1982).

+
+ +

Chai81a.

+ + + + + +
+

G.J. Chaitin, M.A. Auslander, A.K. Chandra, J. Cocke, +M.E. Hopkins, and P.W. Markstein, “Register Allocation +via Coloring,” Computer Languages, 6, 1, pp. +47-57 (January 1981).

+
+ +

Cock77a.

+ + + + + +
+

J. Cocke and K. Kennedy, “An algorithm for +Reduction of Operator Strength,” CACM, 20, 11, +pp. 850-856 (November 1977).

+
+ +

Davi81a.

+ + + + + +
+

J.W. Davidson, “Simplifying Code Generation Through +Peephole Optimization,” Ph.D. thesis, Dept. of +Computer Science, Univ. of Arizona (December 1981).

+
+ +

Faim80a.

+ + + + + +
+

R.N. Faiman and A.A. Kortesoja, “An Optimizing +Pascal Compiler,” IEEE Trans. on Softw. Eng., +6, 6, pp. 512-518 (November 1980).

+
+ +

Frei74a.

+ + + + + +
+

R.A. Freiburghouse, “Register Allocation Via Usage +Counts,” CACM, 17, 11, pp. 638-642 (November +1974).

+
+ +

Freu83a.

+ + + + + +
+

S.M. Freudenberger and J.T. Schwartz, “Experience +with the SETL Optimizer,” TOPLAS, 5, 1, pp. +26-45 (Januari 1983).

+
+ +

Harr79a.

+ + + + + +
+

W.H. Harrison, “A New Strategy for Code Generation +- the General-Purpose Optimizing Compiler,” IEEE +Trans. on Softw. Eng., 5, 4, pp. 367-373 (July +1979).

+
+ +

Ichb83a.

+ + + + + +
+

J.D. Ichbiah, “Ada Programming Language - MILITARY +STANDARD,” ANSI/MIL-STD-1815A, U.S. Department of +Defense (22 January 1983).

+
+ +

Ichb79a.

+ + + + + +
+

J.D. Ichbiah, “Rationale for the Design of the Ada +Programming Language,” SIGPLAN Notices, 14, 6 +(June 1979).

+
+ +

John81a.

+ + + + + +
+

S.C. Johnson and D.M. Ritchie, The C Language Calling +Sequence, Bell Laboratories, Murray Hill, New Jersey +(September 1981).

+
+ +

Katk73a.

+ + + + + +
+

G.R. Katkus, “A study of selective optimization +techniques,” Ph.D. Thesis, University of Southern +California (1973).

+
+ +

Kenn81a.

+ + + + + +
+

K. Kennedy, “A Survey of Data Flow Analysis +Techniques” in Program Flow Analysis, ed. S.S. +Muchnick and D. Jones, Prentice-Hall, Englewood Cliffs +(1981).

+
+ +

Kern79a.

+ + + + + +
+

B.W. Kernighan and M.D. McIlroy, Unix +programmer’s manual, Seventh Edition, 1, Bell +Laboratories, Murray Hill, New Jersey (January 1979).

+
+ +

Kirc83a.

+ + + + + +
+

W. Kirchgaesner, J. Uhl, G. Winterstein, G. Goos, M. +Dausmann, and S. Drossopoulou, An Optimizing Ada +Compiler, Institut fur Informatik II, Universitat +Karlsruhe (February 1983).

+
+ +

Leng79a.

+ + + + + +
+

T. Lengauer and R.E. Tarjan, “A Fast Algorithm for +Finding Dominators in a Flowgraph,” TOPLAS, 1, +1, pp. 121-141 (July 1979).

+
+ +

Leve81a.

+ + + + + +
+

B.W. Leverett, “Register Allocation in Optimizing +Compilers,” Ph.D. Thesis, CMU-CS-81-103, +Carnegie-Mellon University, Pittsburgh (February 1981).

+
+ +

Leve79a.

+ + + + + +
+

B.W. Leverett, R.G.G Cattell, S.O. Hobbs, J.M. Newcomer, +A.H. Reiner, B.R. Schatz, and W.A. Wulf, “An Overview +of the Production-Quality Compiler-Compiler Project,” +CMU-CS-79-105, Carnegie-Mellon University, Pittsburgh +(1979).

+
+ +

Leve80a.

+ + + + + +
+

B.W. Leverett, R.G.G Cattell, S.O. Hobbs, J.M. Newcomer, +A.H. Reiner, B.R. Schatz, and W.A. Wulf, “An Overview +of the Production-Quality Compiler-Compiler Project,” +IEEE Computer, 13, 8, pp. 38-49 (August 1980).

+
+ +

Lowr69a.

+ + + + + +
+

E.S. Lowry and C.W. Medlock, “Object Code +Optimization,” CACM, 12, 1, pp. 13-22 (Januari +1969).

+
+ +

Mint79a.

+ + + + + +
+

R.J. Mintz, G.A. Fisher, and M. Sharir, “The design +of a global optimizer,” SIGPLAN Notices, 14, 9, +pp. 226-234 (September 1979).

+
+ +

More79a.

+ + + + + +
+

E. Morel and C. Renvoise, “Global Optimization by +Suppression of Partial Redundancies,” CACM, 22, +2, pp. 96-103 (February 1979).

+
+ +

Perk79a.

+ + + + + +
+

D.R. Perkins and R.L. Sites, “Machine-independent +Pascal code optimization,” SIGPLAN Notices, 14, +8, pp. 201-207 (August 1979).

+
+ +

Phot81a.

+ + + + + +
+

D.S. Photopoulos, “Optimal mixed code generation +for microcomputers,” Ph.D. Thesis, Northeastern +University (1981).

+
+ +

Poel72a.

+ + + + + +
+

W.L. van der Poel, The Programming Languages LISP and +TRAC, Technische Hogeschool Delft, Delft (1972).

+
+ +

Prab80a.

+ + + + + +
+

B. Prabhala and R. Sethi, “Efficient Computation of +Expressions with Common Subexpressions,” JACM, +27, 1, pp. 146-163 (Januari 1980).

+
+ +

Purd72a.

+ + + + + +
+

P.W. Purdom and E.F. Moore, “Immediate +Predominators in a Directed Graph,” CACM, 15, +8, pp. 777-778 (August 1972).

+
+ +

Ritc78a.

+ + + + + +
+

D.M. Ritchie, The C Programming Language - Reference +Manual, Bell Laboratories, Murray Hill, New Jersey +(1978).

+
+ +

Sche77a.

+ + + + + +
+

R.W. Scheifler, “An Analysis of Inline Substitution +for a Structured Programming Language,” CACM, +20, 9, pp. 647-654 (September 1977).

+
+ +

Seth70a.

+ + + + + +
+

R. Sethi and J.D. Ullman, “The Generation of +Optimal Code for Arithmetic Expressions,” JACM, +17, 4, pp. 715-728 (October 1970).

+
+ +

Shaf78a.

+ + + + + +
+

J.B. Shaffer, “Automatic subroutine generation in +an optimizing compiler,” Ph.D. Thesis, University of +Maryland (1978).

+
+ +

Site79a.

+ + + + + +
+

R.L. Sites, “Machine-independent register +allocation,” SIGPLAN Notices, 14, 8, pp. +221-225 (August 1979).

+
+ +

Spil71a.

+ + + + + +
+

T.C. Spillman, “Exposing side-effects in a PL/I +optimizing compiler” in Information Processing +1971, pp. 376-381, North-Holland Publishing Company, +Amsterdam (1971).

+
+ +

Tane83a.

+ + + + + +
+

A.S. Tanenbaum, H. van Staveren, E.G. Keizer, and J.W. +Stevenson, “Description of a machine architecture for +use with block structured languages,” Rapport nr +IR-81, Vrije Universiteit, Amsterdam (August 1983).

+
+ +

Tane81a.

+ + + + + +
+

A.S. Tanenbaum, H. van Staveren, E.G. Keizer, and J.W. +Stevenson, “A Practical Toolkit for Making Portable +Compilers,” Rapport nr IR-74, Vrije Universiteit, +Amsterdam (October 1981).

+
+ +

Tane83b.

+ + + + + +
+

A.S. Tanenbaum, H. van Staveren, E.G. Keizer, and J.W. +Stevenson, “A Practical Toolkit for Making Portable +Compilers,” CACM, 26, 9, pp. 654-660 (September +1983).

+
+ +

Wulf75a.

+ + + + + +
+

W.A. Wulf, R.K. Johnsson, C.B. Weinstock, S.O. Hobbs, and +C.M. Geschke, The Design of an Optimizing Compiler, +American Elsevier Publishing Company, New York (1975).

+
+ +

Wulf80a.

+ + + + + +
+

W.M. Wulf, “PQCC: A Machine-Relative Compiler +Technology,” CMU-CS-80-144, Carnegie-Mellon +University, Pittsburgh (25 september 1980).

+
+
+ + diff --git a/src/olddocs/ego.pdf b/src/olddocs/ego.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e69f36d4600ed82413cfe7ce0273d7cca789fe58 GIT binary patch literal 512595 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

W0Hma6az1FpHe-b|FFjCU<-DQW%2hGw>rUGnh zp^ptk_)Gf5ZdomFHhS9VeZ7r;-URScZi@d0#Q7g^`5(l|!OX?=zw2BqO#dBmvM~Su zAkHOSoth2F-~TK&yBp*FLq-Oxzbps>N~0peAK4$GON|(!hYuRE=Dv2y57r`zIR^Zo=hI%+-p>M zv{p8&41696&+q291}bhzmrji=Q*g74n6Eh5+~aDt=~IuNEVX%Jz6x}@zi&GHLMYOu z_E1yX8>*N}v~WE3A-;R?#ar*smW-PW*g96+e;%ZDJPJZe4_p_x(W?c%nlkS07v+Zq zWMZy3WB0m;-U3$+`8?z<9H$z)n!b^5PRzFtd?1#0Z&+@>?F%e)o4=o`mVH}bUigA- z09U2A(F>b+0~L~#?G9D62QIfOhWMmkzau)FzDsZ9r(hV|uPi@d@pyyS&$SB&^x}5d zeDOti`dDtk_Z%9BM}Ft=)i~9?$J5E4sn@}|*gPE)3gl(UwNAkUbOpjUR*9}Xx8gZN z`{pWiDfYKREhvj6Rj1+aqpJ~hxGuAtn>X+E$T!`4tf!|s#|W%K-4yFR79Kza>SE6! z*O%w_cO0_VwmF*D;Tt^~+iPE6LO?pyX_9E-LsV=h%WHR^HfbA{=&P8wwNs@V^bq&9 zr<%ADw$5|Gscy1Xj0Aj2E$J|PDN@{Qgq}K$TAepY&1_B6>)Na# znW`HZ49*Q!lv{AV1(FPLb`J&_m++(GVr%ZdTHfY6$6m5WNh1_qoEz-bS8S&s$dHN) zzhX|>xOh#~ZHYTw_`F`d>NmS7U|B1thCZ>_mtEVF`Sqf<isJvJP10zI746T z8H|(2gXL!fay(8>dxK^4H63rQ;MbS4jbGy0p2|{L7LAYmmelrdH*~c%vk8WOb%S(6 z`SNmv94Y9-W*iN?b61QZQH+6I>8%bi)-mZo1Hzom)Do=_JK~B2De4xvp>@;l({d`z zpt#PnqX=!=Pg)3rJ`2&wp=s-c+52_s5d5)^_C`45j8sH;?#=&bZVie*eIaJ7Xs_;~ z<);@VzD!YLdV&n~_BQSbo|s_U%Es&yhdwrQbG#IXt>%*P&QxZs6WLRiAdHOYH5}=& z6ajTOlisY)QP+%^X9+OsjeP%xdWHmUxFPFNN$x%~LX&0Mg(nLIdVTWNj0Wl6)*z8r zj(DzPkbKp(Ty{Y*!Pe|CU`w;DGdvC=uY#aGfB43eh1Q*)FBDAj(Zz*+{`X$!Uly=TSZm;(?_nG7r0MKe%y*KmNtW{fbhaO%+m6rG-fkT3l$^ z%bXF_Oozj;?Scdkvf9P3t)K#vUaF_p92N2_{@dn1=G{bZxH}@$`zKPrb&xs)Xhfo$ z;ZK_XW_J#hX-;mYNq{=Agyq`qpJ_Tebc+~yvCMLEpe9#UHt&(X$Q;+m?n6P4e9p|V zgEXLW5o7-k)*Ac;j;p)d2xe|m*@Myb%Hvaats{no-6|!;Y`_Z8Kok;8Y85$xpS;{Y znJ1lzE*hF3818jPwuo?aEOY<4hg`)1H8~|DJsrU!a(0NUi&6Aca|FlmyXjw?8yEZT z35-V8gY;!YRl|Hd5#KBC=R!SUq?tL?7+VbZK+%5 zt~U>tP(>qLa2crcPzsaZ&(y=i0Ky@cEq*IV(gh?mYoc1Fo_*BBB*~^11*6hOikMnu z13hXc0pX8>#oJLxe_=1EkPThX8Kpcoy2~3T{b31~iCFptZ&Py1g|9nNsc>O7-}r*>qXBPWIU zCGXcbCVN{IwSScyre#y`+qZr+H~#jdDu^M9pVDRKM^dt5@S?*e6pYR($Igp1!(Mv0 z2cc@i{WVeAsi@}kQVR)z-+`a69X|gh`6rk4LlyWZ{?9pScWSK{;eBQ&+~>UZ_M}#4B@C7l%YZcprXS6)^>3mm<O$O zJfsb~9kkKF4&{aKU%qJWOJZWS@>yvbvnyLTu*fd6Bnq>#RUX_30{L+p%F)PGJ;gb; z8f+Pkm6xL|M8v7KN36E1AxpyRg~*^Fdhc0?qw$zbpW6hOn%8bDJw)7XbGVO4C74Uj zMGQm*Gs^Qmo03+kRC_TJ&4_#kX=0Pr-6^z0VL`f6v##m1JQckxvtt6FDm2az6I9=h z)oTNqL;Vt~JNuVITr_;4*=h3x{5@3<$s1m1y61~3;_wHBmE&$Mh}|rj+7l!IT>xls z0d*1pTuGj`W+|6i!WyY49bbKtzJUq+pV(QwEQn2s#k$`0N|y+>Q|3}#F4I-JRVa@! zcP{ohyJSI6XQ-H7gM!QXF40_a$8GpG%dZom*&@%OS|7mdb4O|a(tJwi>eB8G#Ml5i z=&m8|a4n4yD-6-)UGJKGJsZf*x9)m55ISiv4<%YSb)w435 z%4tENEs7CUZY4wD^v6kKm>O;$Ue)#+u)2bp{HU?n;$%1}OxeOjA*dOFFF{dm$Y4&y z%+;8r2K^()q=!@wNz2?xsyJKkGImoopWk*vsQSE(ZUI&r;U}OC)oRwNdir`|VWQ`u zq$eX+CBehW_1H7uo}fGNpjx#yUzL6lFtr-gHJkdT$5YU%bQXGZ?)QCO1 z4+6YNtEm**3^y z?M(L_YTiiMHXB&@{~$mamx4SavF(76sLC!Rcq|j8);JPjux0FFlKf{EEH`)RVsqLx9rQ8_zC5(XZCeHc zt!){qx+U;O=)uYy$fBsZF_|rB7;|*Hx7`}Gie#(rl0LR_U0=0=f>=fXpS(RQDd?7S zhSNA3tKf4Lh5PXVUT&H;S3600nLl|%ML_16URL-m)_r~ zZ0>>ZR6Ws6?W$C3>A;K`u)tG)s)~eFPx*#jj?Ae!mF&ygavkFm)4tQdQGZN*x>RL=| z3dnIQJXxMNG&$pB$+fI2P-L8huIMOV08~tMQaFcn@5bSFa1agoawd1>OT95lL~4Mm zSaejW@;6o70M>pxJ>xu!$LSyI^feMhRwH6s+}uN;N{OjCrN46hQd^KCxQ$6yQI_2l z)xDw_%;|4?{IK`k5J{mn_C-UcunxP9``Kuo8Y%2lmdfygZ*8;Hac06EhgFBkZIiHo^g1)e0S1x)6)uk)ega2Ap^>7@sBBv|2A003H&wS+C-*3pioIs0s zm|;(y0VBJhpI$~+D*yC5e}RHzk$0Q|J9m!w7K3{Y_D2B`2|!gWsebxFieF60HlT!De7#D_6Oc(Bi(k+ zo(U0wQyKGX^)zN<(<@JDSfm_z)^RIuCrTJksrLvo(w0%+u`(zbgGCY!W@)cNG5dHh zLm@w{sO&$rVtm65y3i!2Rna_0uDU7U8hd~4^+_A5ajS2J-4sDF%K}BtG4gS^z-xh* z4{ZrQmh*63zl6u4cgsZR(ofRTXQeB=>=(Fo%)lVmvRDy}NM6WjH36K{B5LVZ*bSff z-taBQxlU|&mdP-RYSq`Fc$Q^*7;rkT$$ZnTnYcuDPrr$2xonC#cKHNHGMBR~f!(1eGhN5uAa= zh3A_IXpQXYV<}Bx+%gfJGe_St7tJ`Xz0Q$cT-U6{$mR2+1X{+(7sz8u8#3ER@!+#vk@w3~ygTbreZwV8SRe@Cc_vEP+V+ zX_qM~JseEAmq7$47)p2kf??uHxGfri&l9$%h`v^)&p`QFK`fDOzApDN!;`7A{GG;_ zoY`*XuJ9Wet>Cg&1Yv@m6j%E(&KJTgl8e4n2RPCy8T8UA1eo{yLOt*=k=W&=W$NZz zUX}2zCDNIn_)E4_zRzgAx9cL`%``2ZyBWXRo~UK>OQ3DGZ$D;^R4a4)5nX~YHZ-se zXqEd|x?XK!_i$ccYKl+W4OrwSGF0D!U6=kiA~ov1)`+lz33iWPlwv$f8_JrD`mX$v zTeS+@TqahPd`&ZY_S)qZU!l!Mx)nl;5q4@m0(_%du|`O;f2O0NqvzgiY6H6ouCymZ zEQ*ic96ujO!uHB}^w#)2Q-3F0qR+OkT=|r*O)GepX2!ryuzo;x9{-JnS^Kp$OIRM) z%ZHULwPmrHCxe#|95ZyLEzF#jOW`q>kkwwgrgro8VDm$Orl45oW{F=O$}wZj35*4) z?38S}9~pIU({G<#?FQ2^x9H(f2In38^&ssY(x?pT=f|CF96m-xLUl>_iot4kf`-MDPrQh_p1vm2?*j=VUo!YZ<&u@Cnq-iLT8YB@1RoEsLX02Yw| z)t49}i+YTfL68*Cga$|En-q|*XN5*?B(`=LTM?R70tb^p`{xeKbte|>Nj4?C6vZ(PS(?^u}8%$D~(HGheha_`DH;lPi&4 zOu*VFb%Q}kjt<8gFC9njXtWH(+q{KHJVPWU73YH&p2EdWDr)l2g`_fd_oTfsX39$x z3qyooMB*|tOW0#Px=>I1Q<=K6{87ToVe-ZQmB2rQh~4zcGBFcU0zy!T6LRUvIln}V zHz#H;cQ5$CVCH>OOuV?zH!CTuvI3^gIZY_e|Dy?YPdmgW&;I(BwefjTC2@;c8Of z%ZL|2{GM-3&{`yOq=S{WKkLTLKaKXbM=ZKxnx6#opvRz1S%Ru>$?uh99uS=E%Z;&U z85?u}$n;N7eFcV!RE>7q-I@LEli~{`vgVjG&CUo#^GPnyg!l(TGViW^@Sba@p8@sy zvt0H>MR@F1$X4||>(UMaS(|U?53ivvB|=xR6J=e|+alQNK|n3(YN3x>JmqPfDpKfW z0hmvs6J9y5);5Y3CCgkq%g0=KeZ9pD?Dp|g9OOtbJq)fhACBFJa2?@+X!`l33 z)Xsq<{1s+cd=~hE4?;zPef+Y#+7lTI8Xu<5hViS(EfhmlkUa+%Y5)3+oZ5yzhv90? zg*o8zzCEJ=?1gro^v-pLWO$J2%TY2`R9UDKD+0+0@1i@J)7N*n`t--bJ_(bAi`AFVw(cJ>!DV5dlL&~Uu!+Zr5|0`9`pY~ECbcTKVx_~RaGv<>&L zyuYHfcB7mxb7^j81t+M}ZI}=$_#jn7vp(9m_-L9X83fH?@%L``!V>k%x)Tychobpr z<`fV277F$T$ftAAMNGuNWEBeR(py{SgyQ8Di$si>7U#BDYRI!Wfk6uu#ihPjs;&RzdGT+^>$`D~q#7JJiqs$myb4$ zEB3lpsPC_#Fw*XJgiU-oFiPYqyfbxYVk$)_e`~q@AOb@2hSa-q`c{0MBTHpteh2MN zm2k}Z3o0JAHtxw*=)}6nW2W%xOx29nOP=&sivs-?s?eW}BpC^L*uwTF?f`oL!L3du zCB(t)B{X|Vzc+#3ESw6zhLO%YFXqgPDPIn!U27v&vhHVa?!6QO=KakF3NtAx?e}U7 z*Ykw-Q1-3TCwKx1;quts$x@qY0~i!O{}@Evt0MviTgZSru-0h)3S_40mAIAsXd1rn zE~y@>hK6z7BlJW-1mzBX3ZlFZC7nlf>0f9)@wefK925D#zsOJ%f5x-0{td#5p?U9% zczzPV`nSu>jNB|N34HVod7~R}X#dMBPwa8eY=5g(s5+T2SO`65@B$;qOD8H%%N}Ie zd(#}&`bp#+6}4Ue3&jB#@fD^N!#SKr`r1({^y?M55$z+_|!pQck-|O);G^|VRM7ID8G(iMGY7cSQ7RT^X@+=1N^UT6Mzg#3IlzG-$oDu9V58jRwAFq|BF z&i$D9!hK*BjESz>5*K#i)p`C9lOX49o<67hQt~BXxA{jm(*BIX5@6jSF{4SxDXe1s zddotd62DrSN_T00+W{9chzdtD0zQw;b;U|xz+MACaqlb8i7e^?)W_V(gKz)V@fW+T zId^E1_>p9oW~TO&5le+$(?gcM^(z`%!QKFGVRIP*y0BJA9)7bCg+ASU4sFMJ*4oh)A!n|9z4JaQ5*T>%KG|zdej*gUMztWS6Fq_c*J}C zdRRkjL4%=cDtfKeKt00J&O!tG)9Re67sFTgbAs5BPnilaHL8Uj?hRLGhOx6^^Xyg;*n92Xd5 z!#fw=;Jo#2)(=;}Qv`B;%s^`vEDp(~ZWanpvynnGp%Sk4`)M*Y30^k7`O|DoVc&w{ zuf>oS)?PWe)-!e)o(n8EG}LYDtuqG$8L zvoLMf*2#gRZ{UPhaHJO+wk`t<;qgq{3PMLVP~hAB+jKy=j%Qs4=8CQzBuq-B$qrj^KD>!{^gneMx{L(P!usZN;hG#jfXC>ccx|VB8TVM z+!4u0NI{n)GLF zjCUL5+8Pxy zZ#1Bgm`v|2serk{QVNPDFmRAIxT4ve1*JBFW{uCqU1-TZx8*itwk?`mz>6|%=h8`X zP5>W@d;IYqI2?kbUzZr7$LS{VD!UoR5Hq3!l$Zn|q9o!@(in~}-KzM{B(*xs5mtGM z3&HcbEoaqWuUtHLB6y|eR4atJ772uvjNZg)PpZQh`~JRJ9s|X07eGW>Acc*6Yma(F z9xy&6wUy?BSFL8m`Zb9|jXwW|RwdWL`l>W6F9rLPjnd=+jXaQQzu`zL8wn%gsUh1> z(et1thll-?f{xsNr7ln*wz+6%9v@+RA?L(IO-3I#NbyDejx5)5h%sVkBD;tmzh5wJ z=n7cPUyjkfbm!kc1eQ}_!Cx= zZewasAiq#ms7(PEWd}L+7Bp?YlNLRU)wVbRhs>#TFAv*J^8LO1ci~j*8hMhq{}eh@ z6s&8En6W>e<-GRBN)Ml=FFj|d_Sq9+{|h~m^P0Pt-C91Qhz2ti-d`n zEamB5Bpb+-+WQK-gsy~Dtbd-{G!|~^2F>znAcAK7uv+d)I6sKqn6FClIjphL;B`Fi z)QQ%9>hp=Un$rCMG(8y$md&V&TTiFkzkAbCEM9+M{@BBC^dC9@{}mSxU>36YfMiFZ8~mnGd&Z^g`Z$DFN_aU0JJYko2Hr8|)m*dxXH# zhJn%#Q;@6Lf&=JxjHff*Vk?f>(q@hf>1oqaj0+PmTBsyimCPGxO&H$QiElgqVjf2j zqI2xtc_>XHUXe^)5Ova%TVv=;sM3Ud*XC1XI#gGVMp7zy*yaO@W^>4 zxwyTCxoL1|82qI@XP|OH<2h_6kG6borZWy&VKUPs42eVWuUUmB-l==#>PkNt)L`Vp6kLY|n6JFj&B8=VcC7~2RlE7oJ>nOvJOqZ4EnRBGp&M-nNs zW*YXH4XCj~z?dKv$hT7KBV8+R>>BXoZoS&dnq%ZdrbtJ%f+2Rn?}fc>?&(Sb{(R6E zFSzBc*|3|LHg2nTxJy`(5vWmW;k4)P7Z?(ErukQMQ4AByyrnFOL;6s$hh*k+!#+wS zT_UwKmiEBWbqkVe;`+mlUVd1aP1#06VT*)<;8(k`)6PZG?8(v0XPk`~$_Pb8^#xewH@u|HarlwP(VGUAD39q+(UWsSFG!vW3D-d6mo(lz!eX)DMX+IfvV(vna+LIzuaAlvf(*IiA_1as&Uej52z%%vDrV zc1ZWnH+Bx5C#Q^MqQIgeR9Q$9OG95WdUX1drC}UOs@1^C z7)hRaeoMwz#b?2tR6#lua%Z9!X*36|m`#o>nnMV_FB5L(eg;;`xLwq4OI(7;BlufG zJ{Y&hnx3mmn!&Bbx3QzQ3I^eLU+VMjF#@8tEW6JSK--( z0XjPgiNmay_<;ixPZIl1~j8)BOD!u}Hgx3>wfRxSfLdxHG0GlwB(fcuVs?>pq#XWcTPdeu zOf!bG{#u`i++IJ^#witBWXI@2<4`HC(B){JT6ojrKDhgz=%_BkgGNhq_&ZspAr(j2 z#b1bqXnzQ_bPX6poVlou6TO_(ao{AaaFw{~b8^Q2D=Xje^Oczg|A_n7+sX#75OJ29 zqImoAKQ^aLK3j<8ow8l#b|%anlq@TIw_y933RIR4!|VD#*<1xZFx@Lyn$MaI+U*OlBz`rYRQ1C?E z$S8L=U~{9kt}Z~vsQTVf`;%_Ft#T7q^@o7JQK#cM8X@2zj!L29Rv=6}T*@hm>Q{(L zmdG`28!n@Ah4RQnYRMTNd^i6Pz8z#a$;o^b*Gi^W^uIF2t$2tzS&uleQ6YP(U83;) zrwbKi1a0BTYh#(WRv0B~M%$PBW3pJg&7Y{;QGKq#R?gh;f9AL&^867I9N3f$5YU;7 zz%%0?$fRpPUH=6*&u7`!@J1PJ-s=#P^J^v{*7tYG1Pv!Ni*?hjT5lw;4e~`O4gR^z ztY^f%I9-aCjJ*#rsurSStht4$=px)lL7ckt{FFzKz-NSLu|eJAKEH*HN7}k}Dh7I% zb>hW%)Q-Dpo8h6yYMQ=4$8eF(R3Bs8+o2+PuW^iw_SCk*urji6!f`dH^fs5)YIJh9u4X#qo6PAZf1!($_5jpl5+1?QAwi5$TvoNF8D zPuT&1SOgQg?`r+i-wLSdHbORA&p%E?7um4PogWm_LkU!y%XGTR&G7!kQ$yAbr7>2F zvDNh(*@+YUMt|rdt3{**Gx=v8|ItQYxr(|~qZ@-V!zx>)yG%zJgFql#2**VdoH48po?X=G;u~-k*lAqEi(u`a<7SSvp_V!_J>BFxM!-(VY?> z$j?#B+z!5KT0))h_pq)AZh-byr0O_PG>jr^z0MGNMOZS-k^4B{yiqKYUUkqtBO;LhG{UXWo$i1C*Gf zIWMMezdL%i=+zI!>fg;}B@0GcU~W}I#250Yz?QL6$)AA=LD>EC(;k!Md-5W#GPMdU z>imcwhxUdT6WwfED9C1Ngs$~xBpQnfhWDn{b>=PqqUtuc3R%mGb^nY2o<|(>k^Xz^ zw23k5GR_UWUy*YUrY)R4G`<2@K({cD^2r1TddBBwNc0SQs|<74`ntnZQgxSsJL75| z9R9bV4eMC_*dr(=C`H|v!2e_7aj94FslE%1jQhtf-X@;zfoW0loJu?{lTSD-6J#?^ zBPz{4j8bB~#XIX%9@l)WSq;9B$i^i7S^JL7FLXk1)4l?}Kj_j13fg`0W3baI9o&C^ z;I_-DF`vXCVq)jTS=PN|T!bzFxQcf*&dkEp+UtD8W~}>~h*l0s*x8#I2t%<1PHOj` zgM|tLW?Mx9@TUT&jQ&%u2PVWzy5%^ zyQ1JiOS@w5JnWyXTftFFkcj4vM4%zC`Q?tLAKJvEfx z(v6lt5aQr3_N1fzh%;;Vsu3Yn#{QX;o31*^|!Br---w4CLd4r&Dl zc625E84K-V{+!6Ev;zXkblMo|4QfQR78=XlT9wt%FpYP&eLp2JqC-Jrb13~5ZQpj1 z^-_P#Y(K;bi}X5xNOWS)+wv0SDQaLsxLe{oaCGuHzB~o}u4PpdsL|jdekBWYttxXR z6%Y%$M8iG3RF(s)ZH(Up+iBgO`SwuWY96Nr8WXOGI7(O?{4JbKrbIKkE?bDg5VUbV zK$%q6YLN(~l_0yGDGqyIKMAVPRKEdJUiiprX6R>*tkr0l9lU8oY+@n?F6ZElk^-6G zG-wLCxkaA$Wm2pvUXvL{;pACweP-dS_58vOL`uRo5Y{#BK{KG9V_N7IbAbA{*vZ#= z#%^9$c5W4mM5&-pnr2Hla==4G)CKdsOK^Oi_Jg?=aBP3F6nj)D0GJ@DxB)#4 zz-Wf@h~df7SP^JfGELgok??nvxp2*ExOaU+w#ToHmye`=QEUuiof+GWL`H)?Hz}gt{KKY2upc;%&_u zfH%0=OnI=G`H*^*+myvTRPrf#ayq%Sjpsa`w;_LW`v;ND3hKg5bc@QXvouy z|3pk(%5vkZ8}=Wm5IvUNKaxpZPlQJ?!4@60^FaNw4hsImUSHw!{v{s`r03x)-b{os zhZrHeEA71!Uv9)%O~_iyw%R+B)^Ci9TSmKEJ3nONUuS&}0kM!Fc&+^?nqFK`Zc(~r zS80eUZ{?{O+3uaNxuo8fbKcGm_U%!MM@d{xF_PCv?a53k4Uqy;BbueDr1Tm|T6Pj7 zl}!GXO&R3`w@updnJv}MYFIhlpJUE4yJD~Eng`w%)7Ln5HVvtxecO8YV2G0YO=kjM zkL^n<_9=_}I@1LbrZY+k;7#TrRy52Yko?N&i^}ZX6KwWqp=*$T@j9Mde~jraE_>&I z7yfvA1LK8Y{u9>i=|(bnW5117@C4+m8e`WqneG#|^svzu>)2{Tqy3|n39t}KVLa=6 zTAu$y4X)??NsPFzr4jp$UR_5ylt-+8W4Y4HA$9NPPLd&u9PE|#5rK9b!PQInq~mcz z2>WS#m;I_vTEp1B{z$1;ZQQ2!Dwuy&d}MAr;MVl_3vf3%a73raQyCf2o=_?LUum0)c`#G`rN@TtW@(xO*i~W8cD6?XU zJ*XYhy9LAHSJj?7`8ut1H&AFR(Te0TRe06JH}aBPJ=m(XMkP7FINJs>yuYUeQ?__p zB{a1S-;G)RTaprYJ@47LWrB1y);3(rXBT+&yuoLO@(;P7i=4s^uJ^un`bnFru5&kR z?Q?X3nA}4aX;4piKg*t{@X@ucYSGMidj{ga&-4oEQ>IEMMBU!bQxed(%YD-8F6R10Yx5&J;U$+ zWG7a&3?bvX+_Q$40t~lb5ICFHixfvKSx|u8CuftY3QkiNxh`BGj|p?X@iPPtu?RH1 z`{Tf4tL%vD!5}=QH{hkA2^`zzDIo&4AfW}Qnf@>b@jHzDP$l>6dp;)vUk5n|fRd+k zM{KV3Az+2KO;|V7iXSHW3w$Z-;Aaxj`yx6EA&Nm(%i)@;X?C})!?dXFa)dQa)~cc# zBU_Xnj*RJjik4#NAo1h#p{J{^Px}06j`82y>6*3{vx(I^Q$b*S#-0Za%3oFYu7{L7 z*%_b}s*r#N+x8VT1I`Ebltk-lT7HvX{)y|1&yK+yg0_-hbVTRo%-hqQlKF)ZFFhzc zd-I~UGsfL^U2cqzBH=OPu~zxPFNQjCtfcvOCRr zZ>d}?Du&B!7(L^OG5@ZHOrHft1#rKBXpYp9SN7Y|BJ<@%)#lG)_p>aO58r7{kh<>I zh*kE5Dc)@9L>o8eiQ?ms2)k%&(?_iaA$Pw-iLT=H(;u4K;mAEU^Vc%w^9CzEF0xH> z%{fj~JvJwYBb5?`Vdt`nkGN#mh~`VC?&>qd=U&OYh6fc{PP+Nmd@M^Et5gEJFZ$oN zf{$Cbo4j9e<1L5z{{db6Z$~&2Gwc6B7ypAJoaO(?5k8_N6}L5x+&foyzRf-mZ@`vi z%@l>3Ed#=?4wf|o#NqBZZ_dsf$(l%Gu?oO=hn(<}MX##VOYR0R%??8T!PwBb{rETF zR$1Fzd5`$pPszif{T0qQ`qjM>g7GFVq^2bJXx?fD?Jy()iQWy>0Me;rCZA}Pdme~ zqu5!16RMlCDc!d#E1W)wMLek7Vnpn$rqUKnaLWknu@G2t; z&THBm`tPICVq4k;r&x>Mv~)m6umbQlm+Ln@5$xx3bD8+=L~fe>ZT-h; zAv!Q-XHjCbaXPGWK`6hSqzj8+S<;5-nS->P%Rq!65Zwh&yevy=0g`zB*}3M@9}`&_ z_A4phHZn^pMQdh$u;n_!%I#pYm8mvwPxCPD94l!VzFmH-8{gEg`u`;krlBc#8|tgjPd*Oh}rWk81)m-U>W)wOvJm^KO$4a z_xItV0KyA*{IySk0969ZrcC&ia_iO2(D;2&eG0j-)L9jf%j|m1SF;S7;S2TJGl#1p z<;Joj9Zp6GHRrGVI~J@MAA`SM9Eq5O*?$zOjWPt07w{`)%zZ81&wGip+~HPCo1or? zLjS4T{m9z_d8d8$LEi-Ft#L&J{|y0JH5{H6^~G<*H-s^gzG+B&)j_%X;7gmB-WV9( z!Q!Kb9TU)4)(z5(oaTqULe%1^Tr&Q_?wH)n;}nRUIAfX7XSVq`3-V!kl|5Oej0i+% z2|#BLq|o+O4inCW2=vA4#w|kPef6$F=ujo`=qGH#8Ge+JG*pF>(*(HYC zc=;eX5l0I@8slC90(o4Xm)PVtJr6%CDr6Br2F-24IX{1kex@=ZLSa|WD`Ex|t^arE zR#`@P-Kq2OwCq%75wq@}Hvl!rzVVZ0ZjIDvN~IeJUZKphOKu^qu*{& z;bVf~FS1jN-q|aX(s{-n`@K4lpb3SD-j%(qql2v^hUckvT#I3yk*+&yo&k1LF@87# zZm2uarKcRr35utw5j5I`rWQEk=@N{wRnn89IP{RoY*jSb@u$cbZ-;2|T@uVmO>Nmg zSlQ$J4Ky*4jAarvuEbIXLHs*o`a$Y@V=r{JV-_(CzP8&Xx4{!DiE8?K%@&}3?XzQy z00eE?^~D1+Jx;;B6CdLGHu_R-0{tia=~y1eqDbO(rRC;^?Mc8w46JNy1&CbY##vmf zis?9D;95`yqJ;x1#Byap@cfyAKc2et`mP*^3m=d%$aUntmK_J!~xJ0 zH3XciwVEf8qKujkXP`VHg5*ljBEzPC|Jv7!3-xGG0= zbqk4;0DC#bt{&bw_*J86=$U`Xyex*JH~6k2--OQY8K4Q*lPq zeKsgzMQc=6lhd8t`EE4=3~0$UD3@bLvU?U4q`&?3;A!U7!vk3#@r*Gr_i~ubv^+Q$ zR4ujnb~C=|xY5r$YZK^n;f8ydAq9M47KI<;|!l`eR|J|g=l4To6$emqxU?Gr)xIHI+un4K`{SEdXBnOv7pI4_r;JCO6-r(M= zWTHhq1T1q-ohN80cE~{cP;av-Hdz!L{%Fbal1qpEf!(zkE4O~J2{4=fw(goq?kvr8NRol7 zf2E%QmKOgLk!oy7dn^U4tH*K()C-xF_RCETw>k2mXzbV}W8lFu2R;)e2Tao^i5)H; zZRtqib2A6BP>$HNQ-zjPxb|7gdLYjq`!T%DY{RRsw%yun~4885(PiYbK6Gn8K&E%R5sn!$72)aeZsxqEvrwktLRQ{?j0OU05U)wF8>#hCR zxaLOwzj6;N7!NjnhQ=TNc=uI1#<1gL9A+n97^jFhn{%V(h}3xbS6#cN|r>!@;DlF}Pn(eiAw z=KPP--__1mVBd83DjNwR4pO-F24k1fwqx^fbEa#mpmOA3yg>FHlN1HXz6kVFdGV!| z%0#r6HWbV>&iOE0w88B{-eM8__nzgSZm~FUGC(w}J5Yu+-&TjXGS_N5v^dCH$bm8^ z*D(OsIX$8h&lwdG&>UOpQE=?WYT_zOqH?c({xdvo4RdAAjhg9ZXL@u|GL>fF8GR-ib{PZvWv{I6fWyQhXxH@< zQhpZR!wR7-`*PO4* zUyUI^=XRi7c+#F|DFB&XRnS zflAwpR`)9!Xus_{L@Z_e^UVma#Qq?$_BMMVgdvX4W?8b!vxL4Gg6GVbq7YquZA{eo z+`MD9qY7u_u?AOL!x6d3~xhcN+3FflW7;|l5*0!e`ui0DRC&H z#Szy{mD4GYhry@G;KgY~5wp4b_Z}1mcgOdnK~D(Q<9$7D?G||GK9h=KHmRdfEU-H)CF$Hny<}kj(_$*Z*h)SQtA&iMxA&RJGRj zm0*Rl;EqwBNZj(w65DaV_BZ(k+zyGTFwF%V5i?|h{sK(!3-#>0pYH;@#|lVv%M+nT z-Icrz9Tg8dJ{7s?Zgd+zO;#r)`ZPVbi~`awK?h=k7lQ7b#6K# z3PFyG`uLZ+2uSkpvtQ<$18FOmJj(+pDE~#`P5opyP-z-^=xCfa6ARqU!BpN%)B29} zZbV+leevssD!GCSEt$$)rX;2|&VRN`JaO;l9_{q_@1ej#VVL6b}!r={i5 zQy(l-mn0ad>bj_s>V!{zFr!SPd62J+h%1Cgn7O7otHR~!@SwsnbAzF9e8byP-nUqa zpMcGPp-;mXhz^K**@?%vdc|e)DC8p&suQY@_NxgO(|;c$z_YJ9F{h4*SByGusCwGB zTy8Gfr5JuUt)7Oy35R(x3Q>ue3deY2E82{@7`jtWTFWCUz7_ALTFikC*Ot{e?>+RH zx-#0(TeGgZl8?hjsGh6B5za6p0q=`47FP2@1TQ{=E?u;~Sh+K!hk#LUz^Pj0k-}=3 zTIJ9-&1WN?ZR4Vdd(d8!9>~N9#LsAHa29u@cJpHtEaD>YIap6H)jwYVUYmhTnMH6U zjk2)Fa7D>HpKev3?tb1c2y^TZ)&HIU{Qs%W|5sgQVP$0c-}w*A|6uiH`G2zd&gf_* z{b_UbU8_rP6HYP2L7G+4@aaY%<9HQ1mobj*t~+_GqJB%<@miPy>gFQX)^c z@_tq9*sX+Uz@!bA@`el%bQ2k3oWwd6UY!~#9CQ{@5*b4nM(%J zhAA8geBInx5QlcF4QEoJ!r|x}`Yj z>{H?lw1^zOdRHi*x@6Xi8t~vIjtE5)n_W1B_e3^s?O|WK2+8j2_d9Y+9XO8zPer9t znL?X5>xQ`HBivI8$Yze5(`FWO+DdG)Z6BCt&&oy8kN#nS@$OKSn8#kacoZFCMab_$ zUd)6f7UK?st~GWe-VO#m%((;|-a~jJusmlm=-Qdj

n&Y%zr1h;*DHGz&67Ds6Fx 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

{G^2n2s_`&CUO3- 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%0AGpo`7008yWhpT(Gs!~ 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

{~_Q{b1T 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

KVX8je9HZ$(tb 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 + + + + + + + + + +
+ +

DESCRIPTION OF A MACHINE
+ARCHITECTURE FOR USE WITH
+BLOCK STRUCTURED LANGUAGES

+ +

Andrew S. Tanenbaum
+Hans van Staveren
+Ed G. Keizer
+Johan W. Stevenson*

+ +

August 1983

+ +

Informatica Rapport IR-81

+ +

Abstract

+ + + + + +
+

EM is a family of intermediate languages designed for +producing portable compilers. A program called front +end translates source programs to EM. Another program, +back end, translates EM to the assembly language of +the target machine. Alternatively, the EM program can be +assembled to a highly efficient binary format for +interpretation. This document describes the EM languages in +detail.

+ +

* Present affiliation: NV Philips, Eindhoven

+ +

1

+ +

1. INTRODUCTION

+ +

EM is a family of intermediate languages designed for +producing portable compilers. The general strategy is for a +program called front end to translate the source +program to EM. Another program, back end, translates +EM to target assembly language. Alternatively, the EM code +can be assembled to a binary form and interpreted. These +considerations led to the following goals:

+ + + + + + + +
+ +

1

+
+ +

The design should allow translation to, or +interpretation on, a wide range of existing machines. Design +decisions should be delayed as far as possible and the +implications of these decisions should be localized as much +as possible.

+
+
+ + + + + +
+

The current microcomputer technology offers 8, 16 and 32 +bit machines with various sizes of address space. EM should +be flexible enough to be useful on most of these machines. +The differences between the members of the EM family should +only concern the wordsize and address space size.

+
+ + + + + + + + + + + + + + + + + +
+ +

2

+
+ +

The architecture should ease the task of code generation +for high level languages such as Pascal, C, Ada, Algol 68, +BCPL.

+
+
+ +

3

+
+ +

The instruction set used by the interpreter should be +compact, to reduce the amount of memory needed for program +storage, and to reduce the time needed to transmit programs +over communication lines.

+
+
+ +

3

+
+ +

It should be designed with microprogrammed +implementations in mind; in particular, the use of many +short fields within instruction opcodes should be avoided, +because their extraction by the microprogram or conversion +to other instruction formats is inefficient.

+
+
+ +

The basic architecture is based on the concept of a +stack. The stack is used for procedure return addresses, +actual parameters, local variables, and arithmetic +operations. There are several built-in object types, for +example, signed and unsigned integers, floating point +numbers, pointers and sets of bits. There are instructions +to push and pop objects to and from the stack. The push and +pop instructions are not typed. They only care about the +size of the objects. For each built-in type there are +reverse Polish type instructions that pop one or more +objects from the top of the stack, perform an operation, and +push the result back onto the stack. For all types except +pointers, these instructions have the object size as +argument.

+ +

There are no visible general registers used for +arithmetic operands etc. This is in contrast to most third +generation computers, which usually have 8 or 16 general +registers. The decision not to have a group of general +registers was fully intentional, and follows W.L. Van der +Poel’s dictum that a machine should have 0, 1, or an +infinite number of any feature. General registers have two +primary uses: to hold intermediate results of complicated +expressions, e.g.

+
     ((a*b + c*d)/e + f*g/h) * i
+
+ +

and to hold local variables.

+ +

Various studies have shown that the average expression +has fewer than two operands, making the former use of +registers of doubtful value. The present trend toward +structured programs consisting of many small procedures +greatly reduces the value of registers to hold local +variables because the large number of procedure calls +implies a large overhead in saving and restoring the +registers at every call.

+ +

Although there are no general purpose registers, there +are a few internal registers with specific functions as +follows:

+ +

+ +

Furthermore, reverse Polish code is much easier to +generate than multi-register machine code, especially if +highly efficient code is desired. When translating to +assembly language the back end can make good use of the +target machine’s registers. An EM machine can achieve +high performance by keeping part of the stack in high speed +storage (a cache or microprogram scratchpad memory) rather +than in primary memory.

+ +

Again according to van der Poel’s dictum, all EM +instructions have zero or one argument. We believe that +instructions needing two arguments can be split into two +simpler ones. The simpler ones can probably be used in other +circumstances as well. Moreover, these two instructions +together often have a shorter encoding than the single +instruction before.

+ +

This document describes EM at three different levels: +the abstract level, the assembly language level and the +machine language level.
+The most important level is that of the abstract EM +architecture. This level deals with the basic design issues. +Only the functional capabilities of instructions are +relevant, not their format or encoding. Most chapters of +this document refer to the abstract level and it is +explicitly stated whenever another level is described.
+The assembly language is intended for the compiler writer. +It presents a more or less orthogonal instruction set and +provides symbolic names for data. Moreover, it facilitates +the linking of separately compiled ’modules’ +into a single program by providing several +pseudoinstructions.
+The machine language is designed for interpretation with a +compact program text and easy decoding. The binary +representation of the machine language instruction set is +far from orthogonal. Frequent instructions have a short +opcode. The encoding is fully byte oriented. These bytes do +not contain small bit fields, because bit fields would slow +down decoding considerably.

+ +

A common use for EM is for producing portable (cross) +compilers. When used this way, the compilers produce EM +assembly language as their output. To run the compiled +program on the target machine, the back end, translates the +EM assembly language to the target machine’s assembly +language. When this approach is used, the format of the EM +machine language instructions is irrelevant. On the other +hand, when writing an interpreter for EM machine language +programs, the interpreter must deal with the machine +language and not with the symbolic assembly language.

+ +

As mentioned above, the current microcomputer technology +offers 8, 16 and 32 bit machines with address spaces ranging +from 2 16 to 2 32 bytes. +Having one size of pointers and integers restricts the +usefulness of the language. We decided to have a different +language for each combination of word and pointer size. All +languages offer the same instruction set and differ only in +memory alignment restrictions and the implicit size assumed +in several instructions. The languages differ slightly for +the different size combinations. For example: the size of +any object on the stack and alignment restrictions. The +wordsize is restricted to powers of 2 and the pointer size +must be a multiple of the wordsize. Almost all programs +handling EM will be parametrized with word and pointer +size.

+ +

2

+ +

2. MEMORY

+ +

The EM machine has two distinct address spaces, one for +instructions and one for data. The data space is divided up +into 8-bit bytes. The smallest addressable unit is a byte. +Bytes are numbered consecutively from 0 to some maximum. All +sizes in EM are expressed in bytes.

+ +

Some EM instructions can transfer objects containing +several bytes to and/or from memory. The size of all objects +larger than a word must be a multiple of the wordsize. The +size of all objects smaller than a word must be a divisor of +the wordsize. For example: if the wordsize is 2 bytes, +objects of the sizes 1, 2, 4, 6,... are allowed. The address +of such an object is the lowest address of all bytes it +contains. For objects smaller than the wordsize, the address +must be a multiple of the object size. For all other objects +the address must be a multiple of the wordsize. For example, +if an instruction transfers a 4-byte object to memory at +location m and the wordsize is 2, m must be a +multiple of 2 and the bytes at locations m, +m+1,m+2 and m+3 are overwritten.

+ +

The size of almost all objects in EM is an integral +number of words. Only two operations are allowed on objects +whose size is a divisor of the wordsize: push it onto the +stack and pop it from the stack. The addressing of these +objects in memory is always indirect. If such a small object +is pushed onto the stack it is assumed to be a small integer +and stored in the least significant part of a word. The rest +of the word is cleared to zero, although EM provides a way +to sign-extend a small integer. Popping a small object from +the stack removes a word from the stack, stores the least +significant byte(s) of this word in memory and discards the +rest of the word.

+ +

The format of pointers into both address spaces is +explicitly undefined. The size of a pointer, however, is +fixed for a member of EM, so that the compiler writer knows +how much storage to allocate for a pointer.

+ +

A minor problem is raised by the undefined pointer +format. Some languages, notably Pascal, require a special, +otherwise illegal, pointer value to represent the nil +pointer. The current Pascal-VU compiler uses the integer +value 0 as nil pointer. This value is also used by many C +programs as a normally impossible address. A better solution +would be to have a special instruction loading an illegal +pointer value, but it is hard to imagine an implementation +for which the current solution is inadequate, especially +because the first word in the EM data space is special and +probably not the target of any pointer.

+ +

The next two chapters describe the EM memory in more +detail. One describes the instruction address space, the +other the data address space.

+ +

A design goal of EM has been to allow its implementation +on a wide range of existing machines, as well as allowing a +new one to be built in hardware. To this extent we have +tried to minimize the demands of EM on the memory structure +of the target machine. Therefore, apart from the logical +partitioning, EM memory is divided into +’fragments’. A fragment consists of consecutive +machine words and has a base address and a size. Pointer +arithmetic is only defined within a fragment. The only +exception to this rule is comparison with the null pointer. +All fragments must be word aligned.

+ +

3

+ +

3. INSTRUCTION ADDRESS SPACE

+ +

The instruction space of the EM machine contains the +code for procedures. Tables necessary for the execution of +this code, for example, procedure descriptor tables, may +also be present. The instruction space does not change +during the execution of a program, so that it may be +protected. No further restrictions to the instruction +address space are necessary for the abstract and assembly +language level.

+ +

Each procedure has a single entry point: the first +instruction. A special type of pointer identifies a +procedure. Pointers into the instruction address space have +the same size as pointers into data space and can, for +example, contain the address of the first instruction or an +index in a procedure descriptor table.

+ +

There is a single EM program counter, PC, pointing to +the next instruction to be executed. The procedure pointed +to by PC is called the ’current’ procedure. A +procedure may call another procedure using the CAL or CAI +instruction. The calling procedure remains +’active’ and is resumed whenever the called +procedure returns. Note that a procedure has several +’active’ invocations when called +recursively.

+ +

Each procedure must return properly. It is not allowed +to fall through to the code of the next procedure. There are +several ways to exit from a procedure:

+ + + + + + + + + + + + + + + + + +
+ +

-

+
+ +

the RET instruction, which returns to the calling +procedure.

+
+
+ +

-

+
+ +

the RTT instruction, which exits a trap handling routine +and resumes the trapping instruction (see next chapter).

+
+
+ +

-

+
+ +

the GTO instruction, which is used for non-local +goto’s. It can remove several frames from the stack +and transfer control to an active procedure. (see also MES +11 in paragraph 11.1.4.4)

+
+
+ +

All branch instructions can transfer control to any +label within the same procedure. Branch instructions can +never jump out of a procedure.

+ +

Several language implementations use a so called +procedure instance identifier, a combination of a procedure +identifier and the LB of a stack frame, also called static +link.

+ +

The program text for each procedure, as well as any +tables, are fragments and can be allocated anywhere in the +instruction address space.

+ +

4

+ +

4. DATA ADDRESS SPACE

+ +

The data address space is divided into three parts, +called ’areas’, each with its own addressing +method: global data area, local data area (including the +stack), and heap data area. These data areas must be part of +the same address space because all data is accessed by the +same type of pointers.

+ +

Space for global data is reserved using several +pseudoinstructions in the assembly language, as described in +the next paragraph and chapter 11. The size of the global +data area is fixed per program.

+ +

Global data is addressed absolutely in the machine +language. Many instructions are available to address global +data. They all have an absolute address as argument. +Examples are LOE, LAE and STE.

+ +

Part of the global data area is initialized by the +compiler, the rest is not initialized at all or is +initialized with a value, typically −32768 or 0. Part +of the initialized global data may be made read-only if the +implementation supports protection.

+ +

The local data area is used as a stack, which grows from +high to low addresses and contains some data for each active +procedure invocation, called a ’frame’. The size +of the local data area varies dynamically during execution. +Below the current procedure frame resides the operand stack. +The stack pointer SP always points to the bottom of the +local data area. Local data is addressed by offsetting from +the local base pointer LB. LB always points to the frame of +the current procedure. Only the words of the current frame +and the parameters can be addressed directly. Variables in +other active procedures are addressed by following the chain +of statically enclosing procedures using the LXL or LXA +instruction. The variables in dynamically enclosing +procedures can be addressed with the use of the DCH +instruction.

+ +

Many instructions have offsets to LB as argument, for +instance LOL, LAL and STL. The arguments of these +instructions range from −1 to some (negative) minimum +for the access of local storage and from 0 to some +(positive) maximum for parameter access.

+ +

The procedure call instructions CAL and CAI each create +a new frame on the stack. Each procedure has an +assembly-time parameter specifying the number of bytes +needed for local storage. This storage is allocated each +time the procedure is called and must be a multiple of the +wordsize. Each procedure, therefore, starts with a stack +with the local variables already allocated. The return +instructions RET and RTT remove a frame. The actual +parameters must be removed by the calling procedure.

+ +

RET may copy some words from the stack of the returning +procedure to an unnamed ’function return area’. +This area is available for ’READ-ONCE’ access +using the LFR instruction. The result of a LFR is only +defined if the size used to fetch is identical to the size +used in the last return. The instruction ASP, used to remove +the parameters from the stack, the branch instruction BRA +and the non-local goto instruction GTO are the only ones +that leave the contents of the ’function return +area’ intact. All other instructions are allowed to +destroy the function return area. Thus parameters can be +popped before fetching the function result. The maximum size +of all function return areas is implementation dependent, +but should allow procedure instance identifiers and all +implemented objects of type integer, unsigned, float and +pointer to be returned. In most implementations the maximum +size of the function return area is twice the pointer size, +because we want to be able to handle ’procedure +instance identifiers’ which consist of a procedure +identifier and the LB of a frame belonging to that +procedure.

+ +

The heap data area grows upwards, to higher numbered +addresses. It is initially empty. The initial value of the +heap pointer HP marks the low end. The heap pointer may be +manipulated by the LOR and STR instructions. The heap can +only be addressed indirectly, by pointers derived from +previous values of HP.

+ +

4.1 Global data area

+ +

The initial size of the global data area is determined +at assembly time. Global data is allocated by several +pseudoinstructions in the EM assembly language. Each +pseudoinstruction allocates one or more bytes. The bytes +allocated for a single pseudo form a ’block’. A +block differs from a fragment, because, under certain +conditions, several blocks are allocated in a single +fragment. This guarantees that the bytes of these blocks are +consecutive.

+ +

Global data is addressed absolutely in binary machine +language. Most compilers, however, cannot assign absolute +addresses to their global variables, especially not if the +language allows programs to be composed of several +separately compiled modules. The assembly language therefore +allows the compiler to name the first address of a global +data block with an alphanumeric label. Moreover, the only +way to address such a named global data block in the +assembly language is by using its name. It is the task of +the assembler/loader to translate these labels into absolute +addresses. These labels may also be used in CON and ROM +pseudoinstructions to initialize pointers.

+ +

The pseudoinstruction CON allocates initialized data. +ROM acts like CON but indicates that the initialized data +will not change during execution of the program. The +pseudoinstruction BSS allocates a block of uninitialized or +identically initialized data. The pseudoinstruction HOL is +similar to BSS, but it alters the meaning of subsequent +absolute addressing in the assembly language.

+ +

Another type of global data is a small block, called the +ABS block, with an implementation defined size. Storage in +this type of block can only be addressed absolutely in +assembly language. The first word has address 0 and is used +to maintain the source line number. Special instructions LIN +and LNI are provided to update this counter. A pointer at +location 4 points to a string containing the current source +file name. The instruction FIL can be used to update the +pointer.

+ +

All numeric arguments of the instructions that address +the global data area refer to locations in the ABS block +unless they are preceded by at least one HOL pseudo in the +same module, in which case they refer to the storage area +allocated by the last HOL pseudoinstruction. Thus LOE 0 +loads the zeroth word of the most recent HOL, unless no HOL +has appeared in the current file so far, in which case it +loads the zeroth word of the ABS fragment.

+ +

The global data area is highly fragmented. The ABS block +and each HOL and BSS block are separate fragments. The way +fragments are formed from CON and ROM blocks is more +complex. The assemblers group several blocks into a single +fragment. A fragment only contains blocks of the same type: +CON or ROM. It is guaranteed that the bytes allocated for +two consecutive CON pseudos are allocated consecutively in a +single fragment, unless these CON pseudos are separated in +the assembly language program by a data label definition or +one or more of the following pseudos:

+
     ROM, BSS, HOL and END
+
+ +

An analogous rule holds for ROM pseudos.

+ +

4.2 Local data area

+ +

The local data area consists of a sequence of frames, +one for each active procedure. Below the frame of the +current procedure resides the expression stack. Frames are +generated by procedure calls and are removed by procedure +returns. A procedure frame consists of six +’zones’:

+
     1.  The return status block
+     2.  The local variables and compiler temporaries
+     3.  The register save block
+     4.  The dynamic local generators
+     5.  The operand stack.
+     6.  The parameters of a procedure one level deeper
+
+ +

A sample frame is shown in Figure 1.

+ +

Before a procedure call is performed the actual +parameters are pushed onto the stack of the calling +procedure. The exact details are compiler dependent. EM +allows procedures to be called with a variable number of +parameters. The implementation of the C-language almost +forces its runtime system to push the parameters in reverse +order, that is, the first positional parameter last. Most +compilers use the C calling convention to be compatible. The +parameters of a procedure belong to the frame of the calling +procedure. Note that the evaluation of the actual parameters +may imply the calling of procedures. The parameters can be +accessed with certain instructions using offsets of 0 and +greater. The first byte of the last parameter pushed has +offset 0. Note that the parameter at offset 0 has a special +use in the instructions following the static chain (LXL and +LXA). These instructions assume that this parameter contains +the LB of the statically enclosing procedure. Procedures +that do not have a dynamically enclosing procedure do not +need a static link at offset 0.

+ +

Two instructions are available to perform procedure +calls, CAL and CAI. Several tasks are performed by these +call instructions.

+ +

First, a part of the status of the calling procedure is +saved on the stack in the return status block. This block +should contain the return address of the calling procedure, +its LB and other implementation dependent data. The size of +this block is fixed for any given implementation because the +lexical instructions LPB, LXL and LXA must be able to obtain +the base addresses of the procedure parameters and +local variables. An alternative solution can be used on +machines with a highly segmented address space. The stack +frames need not be contiguous then and the first status save +area can contain the parameter base AB, which has the value +of SP just after the last parameter has been pushed.

+ +

Second, the LB is changed to point to the first word +above the local variables. The new LB is a copy of the SP +after the return status block has been pushed.

+ +

Third, the amount of local storage needed by the +procedure is reserved. The parameters and local storage are +accessed by the same instructions. Negative offsets are used +for access to local variables. The highest byte, that is the +byte nearest to LB, has to be accessed with offset −1. +The pseudoinstruction specifying the entry point of a +procedure, has an argument that specifies the amount of +local storage needed. The local variables allocated by the +CAI or CAL instructions are the only ones that can be +accessed with a fixed negative offset. The initial value of +the allocated words is not defined, but implementations that +check for undefined values will probably initialize them +with a special ’undefined’ pattern, typically +−32768.

+ +

Fourth, any EM implementation is allowed to reserve a +variable size block beneath the local variables. This block +could, for example, be used to save a variable number of +registers.

+ +

Finally, the address of the entry point of the called +procedure is loaded into the Program Counter.

+ +

The ASP instruction can be used to allocate further +(dynamic) local storage. The base address of such storage +must be obtained with a LOR SP instruction. This same +instruction ASP may also be used to remove some words from +the stack.

+ +

There is a version of ASP, called ASS, which fetches the +number of bytes to allocate from the stack. It can be used +to allocate space for local objects whose size is unknown at +compile time, so called ’dynamic local +generators’.

+ +

Control is returned to the calling procedure with a RET +instruction. Any return value is then copied to the +’function return area’. The frame created by the +call is deallocated and the status of the calling procedure +is restored. The value of SP just after the return value has +been popped must be the same as the value of SP just before +executing the first instruction of this invocation. This +means that when a RET is executed the operand stack can only +contain the return value and all dynamically generated +locals must be deallocated. Violating this restriction might +result in hard to detect errors. The calling procedure has +to remove the parameters from the stack. This can be done +with the aforementioned ASP instruction.

+ +

Each procedure frame is a separate fragment. Because any +fragment may be placed anywhere in memory, procedure frames +need not be contiguous.

+ +

|===============================| | actual parameter +n-1 | |-------------------------------| | . | | . | | . | +|-------------------------------| | actual parameter 0 | ( +<− AB ) |===============================|

+ +

|===============================| +|///////////////////////////////| |///// return status block +/////| |///////////////////////////////| <− LB +|===============================| | | | local variables | | +| |-------------------------------| | | | compiler +temporaries | | | |===============================| +|///////////////////////////////| |///// register save block +/////| |///////////////////////////////| +|===============================| | | | dynamic local +generators | | | |===============================| | operand +| |-------------------------------| | operand | +|===============================| | parameter m-1 | +|-------------------------------| | . | | . | | . | +|-------------------------------| | parameter 0 | +<− SP |===============================|

+ +

Figure 1. A sample procedure frame and +parameters.

+ +

4.3 Heap data area

+ +

The heap area starts empty, with HP pointing to the low +end of it. HP always contains a word address. A copy of HP +can always be obtained with the LOR instruction. A new value +may be stored in the heap pointer using the STR instruction. +If the new value is greater than the old one, then the heap +grows. If it is smaller, then the heap shrinks. HP may never +point below its original value. All words between the +current HP and the original HP are allocated to the heap. +The heap may not grow into a part of memory that is already +allocated. When this is attempted, the STR instruction will +cause a trap to occur. In this case, HP retains its old +value.

+ +

The only way to address the heap is indirectly. Whenever +an object is allocated by increasing HP, then the old HP +value must be saved and can be used later to address the +allocated object. If, in the meantime, HP is decreased so +that the object is no longer part of the heap, then an +attempt to access the object is not allowed. Furthermore, if +the heap pointer is increased again to above the object +address, then access to the old object gives undefined +results.

+ +

The heap is a single fragment. All bytes have +consecutive addresses. No limits are imposed on the size of +the heap as long as it fits in the available data address +space.

+ +

5

+ +

5. MAPPING OF EM DATA MEMORY ONTO TARGET MACHINE +MEMORY

+ +

The EM architecture is designed to be implemented on +many existing and future machines. EM memory is highly +fragmented to make adaptation to various memory +architectures possible. Format and encoding of pointers is +explicitly undefined.

+ +

This chapter gives solutions to some of the anticipated +problems. First, we describe a possible memory layout for +machines with 64K bytes of address space. Here we use a +member of the EM family with 2-byte word and pointer size. +The most straightforward layout is shown in figure 2.

+ +

65534 −> |-------------------------------| +|///////////////////////////////| |//// unimplemented memory +/////| |///////////////////////////////| ML −> +|-------------------------------| | | | | <− LB | +stack and local area | | | |-------------------------------| +<− SP |///////////////////////////////| |//////// +inaccessible /////////| |///////////////////////////////| +|-------------------------------| <− HP | | | heap +area | | | | | HB −> +|-------------------------------| | | | global data area | | +| EB −> |-------------------------------| | | | +program text | <− PC | | | ( and tables ) | | | | | +PB −> |-------------------------------| +|///////////////////////////////| |////////// undefined +//////////| |///////////////////////////////| 0 −> +|-------------------------------|

+ +

Figure 2. Memory layout showing typical +register
+positions during execution of an EM program.

+ +

The base registers for the various memory pieces can be +stored in target machine registers or memory.

+ +

+ +

The stack grows from high EM addresses to low EM +addresses, and the heap the other way. The memory between SP +and HP is not accessible, but may be allocated later to the +stack or the heap if needed. The local data area is +allocated starting at the high end of memory.

+ +

Because EM address 0 is not mapped onto target address +0, a problem arises when pointers are used. If a program +pushed a constant, say 6, onto the stack, and then tried to +indirect through it, the wrong word would be fetched, +because EM address 6 is mapped onto target address EB+6 and +not target address 6 itself. This particular problem is +solved by explicitly declaring the format of a pointer to be +undefined, so that using a constant as a pointer is +completely illegal. However, the general problem of mapping +pointers still exists.

+ +

There are two possible solutions. In the first solution, +EM pointers are represented in the target machine as true EM +addresses, for example, a pointer to EM address 6 really is +stored as a 6 in the target machine. This solution implies +that every time a pointer is fetched EB must be added before +referencing the target machine’s memory. If the target +machine has powerful indexing facilities, EB can be kept in +a target machine register, and the relocation can indeed be +done on every reference to the data address space at a +modest cost in speed.

+ +

The other solution consists of having EM pointers refer +to the true target machine address. Thus the instruction LAE +6 (Load Address of External 6) would push the value of EB+6 +onto the stack. When this approach is chosen, back ends must +know how to offset from EB, to translate all instructions +that manipulate EM addresses. However, the problem is not +completely solved, because a front end may have to +initialize a pointer in CON or ROM data to point to a global +address. This pointer must also be relocated by the back end +or the interpreter.

+ +

Although the EM stack grows from high to low EM +addresses, some machines have hardware PUSH and POP +instructions that require the stack to grow upwards. If +reasons of efficiency demand the use of these instructions, +then EM can be implemented with the memory layout upside +down, as shown in figure 3. This is possible because the +pointer format is explicitly undefined. The first element of +a word array will have a lower physical address than the +second element.

+ +

| | | | | EB=60 | | ^ | | | | | | +|-----------------| |-----------------| 105 | 45 | 44 | 104 +214 | 41 | 40 | 215 |-----------------| |-----------------| +103 | 43 | 42 | 102 212 | 43 | 42 | 213 |-----------------| +|-----------------| 101 | 41 | 40 | 100 210 | 45 | 44 | 211 +|-----------------| |-----------------| | | | | | | v | | +EB=255 | | | | |

+ +

Type A Type B

+ +

Figure 3. Two possible memory +implementations.
+Numbers within the boxes are EM addresses.
+The other numbers are physical addresses.

+ +

So, we have two different EM memory implementations:

+ + + + + + + + + + + + +
+ +

A −

+
+ +

stack downwards

+
+
+ +

B −

+
+ +

stack upwards

+
+
+ +

For each of these two possibilities we give the +translation of the EM instructions to push the third byte of +a global data block starting at EM address 40 onto the stack +and to load the word at address 40. All translations assume +a word and pointer size of two bytes. The target machine +used is a PDP-11 augmented with push and pop instructions. +Registers ’r0’ and ’r1’ are used and +suffer from sign extension for byte transfers. Push $40 +means push the constant 40, not word 40.

+ +

The translation of the EM instructions depends on the +pointer representation used. For each of the two solutions +explained above the translation is given.

+ +

First, the translation for the two implementations using +EM addresses as pointer representation:

+ +

+ +

The translation for the two implementations, if the +target machine address is used as pointer representation, +is:

+ +

+ +

The translation presented above is not intended to be +optimal. Most machines can handle these simple cases in one +or two instructions. It demonstrates, however, the +flexibility of the EM design.

+ +

There are several possibilities to implement EM on +machines with address spaces larger than 64k bytes. For EM +with two byte pointers one could allocate instruction and +data space each in a separate 64k piece of memory. EM +pointers still have to fit in two bytes, but the base +registers PB and EB may be loaded in hardware registers +wider than 16 bits, if available. EM implementations can +also make efficient use of a machine with separate +instruction and data space.

+ +

EM with 32 bit pointers allows one to make use of +machines with large address spaces. In a virtual, segmented +memory system one could use a separate segment for each +fragment.

+ +

6

+ +

6. TYPE REPRESENTATIONS

+ +

The representations used for typed objects are not +precisely specified by EM. Sometimes we only specify that a +typed object occupies a certain amount of space and state no +further restrictions. If one wants to have a different +representation of the value of an object on the stack one +has to use a convert instruction in most cases. We do +specify some relations between the representations of types. +This allows some intermixed use of operators for different +types on the same object(s). For example, the instruction +ZER pushes signed and unsigned integers with the value zero +and empty sets. ZER has as only argument the size of the +object.

+ +

The representation of floating point numbers is a good +example, it allows widely varying implementations. The only +ways to create floating point numbers are via initialization +and via conversions from integer numbers. Only by using +conversions to integers and comparing two floating point +numbers with each other, can these numbers be converted to +human readable output. Implementations may use base 10, base +2 or any other base for exponents, and have freedom in +choosing the range of exponent and mantissa.

+ +

Other types are more precisely described. In the +following paragraphs a description will be given of the +restrictions imposed on the representation of the types +used. A number n used in these paragraphs indicates +the size of the object in bits.

+ +

6.1 Unsigned integers

+ +

The range of unsigned integers is 0.. 2 +n -1. A binary representation is +assumed. The order of the bits within an object is knowingly +left unspecified. Discussing bit order within each 8-bit +byte is academic, so the only real freedom of this +specification lies in the byte order. We really do not care +whether an implementation of a 4-byte integer has its bytes +in a particular order of significance. This of course means +that some sequences of instructions have unpredictable +effects. For example:

+
     LOC 258 ; STL 0 ; LAL 0 ; LOI 1      ( wordsize >=2 )
+
+ +

The value on the stack after executing this sequence can +be anything, but will most likely be 1 or 2.

+ +

Conversion between unsigned integers of different sizes +have to be done with explicit convert instructions. One +cannot simply pad an unsigned integer with zero’s at +either end and expect a correct result.

+ +

We assume existence of at least single word unsigned +arithmetic in any implementation.

+ +

6.2 Signed Integers

+ +

The range of signed integers is −2 +n−1 .. 2 +n−1 −1, in +other words the range of signed integers of n bits +using two’s complement arithmetic. The representation +is the same as for unsigned integers except the range 2 +n−1 .. 2 +n −1 is mapped on the range +−2 n−1 .. +−1. In other words, the most significant bit is used +as sign bit. The convert instructions between signed and +unsigned integers of the same size can be used to catch +errors.

+ +

The value −2 +n−1 is used for +undefined signed integers. EM implementations should trap +when this value is used in an operation on signed integers. +The instruction mask, accessed with SIM and LIM − see +chapter 9 −, can be used to disable such traps.

+ +

We assume existence of at least single word signed +arithmetic in any implementation.

+ +

6.3 Floating point values

+ +

Floating point values must have a signed mantissa and a +signed exponent. Although no base is specified, base 2 is +the normal choice, because the FEF instruction pushes the +exponent in base 2.

+ +

The implementation of floating point arithmetic is +optional. The compilers currently in use have runtime +parameters for the size of the floating point values they +should use. Common choices are 4 and/or 8 bytes.

+ +

6.4 Pointers

+ +

EM has two kinds of pointers: for instruction and for +data space. Each kind can only be used for its own space, +conversion between these two subtypes is impossible. We +assume that pointers have a range from 0 upwards. Any +implementation may have holes in the pointer range between +fragments. One can of course not expect to be able to +address two megabyte of memory using a 2-byte pointer. +Normally, a 2-byte pointer allows up to 65536 bytes of +addressable memory.

+ +

Pointer representation has one restriction. The pointer +with the same representation as the integer zero of the same +size should be invalid. Some languages and/or runtime +systems represent the nil pointer as zero.

+ +

6.5 Bit sets

+ +

All bit sets of size n are subsets of the set { i +| i>=0, i<n }. A bit set contains a bit for +each element showing its presence or absence. Bit sets are +subdivided into words. The word with the lowest EM address +governs the subset { i | i>=0, i<m }, where +m is the number of bits in a word. The next higher +words each govern the next higher m set elements. The +relation between a set with size of a word and an unsigned +integer word is that the value of the unsigned integer is +the summation of the 2i where i is in the set.

+ +

Example: a 2-word bit set (wordsize 2) containing the +elements 1, 6, 8, 15, 18, 21, 27 and 28 is composed of two +integers, e.g. at addresses 40 and 42. The word at 40 +contains the value 33090 (or −32446), the word at 42 +contains the value 6180.

+ +

7

+ +

7. DESCRIPTORS

+ +

Several instructions use descriptors, notably the range +check instruction, the array instructions, the goto +instruction and the case jump instructions. Descriptors +reside in data space. They may be constructed at run time, +but more often they are fixed and allocated in ROM data.

+ +

All instructions using descriptors, except GTO, have as +argument the size of the integers in the descriptor. All +implementations have to allow integers of the size of a word +in descriptors. All integers popped from the stack and used +for indexing or comparing must have the same size as the +integers in the descriptor.

+ +

7.1 Range check descriptors

+ +

Range check descriptors consist of two integers:

+ + + + + + +
+ +

1.

+
+ +

lower bound

+
+ +

signed

+
+ + + + + + +
+ +

2.

+
+ +

upper bound

+
+ +

signed

+
+ +

The range check instruction checks an integer on the +stack against these bounds and causes a trap if the value is +outside the interval. The value itself is neither changed +nor removed from the stack.

+ +

7.2 Array descriptors

+ +

Each array descriptor describes a single dimension. For +multi-dimensional arrays, several array instructions are +needed to access a single element. Array descriptors contain +the following three integers:

+ + + + + + + + + + +
+ +

1.

+
+ +

lower bound

+
+
+ +

signed

+
+ + + + + + +
+ +

2.

+
+ +

upper bound − lower bound

+
+ +

unsigned

+
+ + + + + + +
+ +

3.

+
+ +

number of bytes per element

+
+ +

unsigned

+
+ +

The array instructions LAR, SAR and AAR have the pointer +to the start of the descriptor as operand on the stack.

+ +

The element A[I] is fetched as follows:

+ + + + + + + + + + + + + + + + + + + + + + +
+ +

1.

+
+ +

Stack the address of A (e.g., using LAE or LAL)

+
+
+ +

2.

+
+ +

Stack the value of I (n-byte integer)

+
+
+ +

3.

+
+ +

Stack the pointer to the descriptor (e.g., using +LAE)

+
+
+ +

4.

+
+ +

LAR n (n is the size of the integers in the descriptor +and I)

+
+
+ +

All array instructions first pop the address of the +descriptor and the index. If the index is not within the +bounds specified, a trap occurs. If ok, (I − lower +bound) is multiplied by the number of bytes per element (the +third word). The result is added to the address of A and +replaces A on the stack.

+ +

At this point LAR, SAR and AAR diverge. AAR is finished. +LAR pops the address and fetches the data item, the size +being specified by the descriptor. The usual restrictions +for memory access must be obeyed. SAR pops the address and +stores the data item now exposed.

+ +

7.3 Non-local goto descriptors

+ +

The GTO instruction provides a way of returning directly +to any active procedure invocation. The argument of the +instruction is the address of a descriptor containing three +pointers:

+ + + + + + + + + + + + + + + + + +
+ +

1.

+
+ +

value of PC after the jump

+
+
+ +

2.

+
+ +

value of SP after the jump

+
+
+ +

3.

+
+ +

value of LB after the jump

+
+
+ +

GTO replaces the loads PC, SP and LB from the +descriptor, thereby jumping to a procedure and removing zero +or more frames from the stack. The LB, SP and PC in the +descriptor must belong to a dynamically enclosing procedure, +because some EM implementations will need to backtrack +through the dynamic chain and use the implementation +dependent data in frames to restore registers etc.

+ +

7.4 Case descriptors

+ +

The case jump instructions CSA and CSB both provide +multiway branches selected by a case index. Both fetch two +operands from the stack: first a pointer to the low address +of the case descriptor and then the case index. CSA uses the +case index as index in the descriptor table, but CSB +searches the table for an occurrence of the case index. +Therefore, the descriptors for CSA and CSB, as shown in +figure 4, are different. All pointers in the table must be +addresses of instructions in the procedure executing the +case instruction.

+ +

CSA selects the new PC by indexing. If the index, a +signed integer, is greater than or equal to the lower bound +and less than or equal to the upper bound, then fetch the +new PC from the list of instruction pointers by indexing +with index-lower. The table does not contain the value of +the upper bound, but the value of upper-lower as an unsigned +integer. The default instruction pointer is used when the +index is out of bounds. If the resulting PC is 0, then +trap.

+ +

CSB selects the new PC by searching. The table is +searched for an entry with index value equal to the case +index. That entry or, if none is found, the default entry +contains the new PC. When the resulting PC is 0, a trap is +performed.

+ +

The choice of which case instruction to use for each +source language case statement is up to the front end. If +the range of the index value is dense, i.e

+
     (highest value − lowest value) / number of cases
+
+ +

is less than some threshold, then CSA is the obvious +choice. If the range is sparse, CSB is better.

+ +

|--------------------| |--------------------| high +address | pointer for upb | | pointer n-1 | +|--------------------| |- - - - - - - | | . | | index n-1 | +| . | |--------------------| | . | | . | | . | | . | | . | | +. | | . | |--------------------| | . | | pointer 1 | +|--------------------| |- - - - - - - | | pointer for lwb+1 +| | index 1 | |--------------------| |--------------------| +| pointer for lwb | | pointer 0 | |--------------------| |- +- - - - - - | | upper - lower | | index 0 | +|--------------------| |--------------------| | lower bound +| | number of entries | |--------------------| +|--------------------| | default pointer | | default pointer +| low address |--------------------| +|--------------------|

+ +

CSA descriptor CSB descriptor

+ +

Figure 4. Descriptor layout for CSA and +CSB

+ +

8

+ +

8. ENVIRONMENT INTERACTIONS

+ +

EM programs can interact with their environment in three +ways. Two, starting/stopping and monitor calls, are dealt +with in this chapter. The remaining way to interact, +interrupts, will be treated together with traps in chapter +9.

+ +

8.1 Program starting and stopping

+ +

EM user programs start with a call to a procedure called +_m_a_i_n. The assembler and backends look for the definition +of a procedure with this name in their input. The call +passes three parameters to the procedure. The parameters are +similar to the parameters supplied by the +UNIX ® operating system to C programs. +These parameters are often called argc, argv +and envp. Argc is the parameter nearest to LB and is +a wordsized integer. The other two are pointers to the first +element of an array of string pointers. The argv +array contains argc strings, the first of which +contains the program call name. The other strings in the +argv array are the program parameters.

+ +

The envp array contains strings in the form +"name=string", where ’name’ is the +name of an environment variable and string its value. The +envp is terminated by a zero pointer.

+ +

An EM user program stops if the program returns from the +first invocation of _m_a_i_n. The contents of the function +return area are used to procure a wordsized program return +code. EM programs also stop when traps and interrupts occur +that are not caught and when the exit monitor call is +executed.

+ +

8.2 Input/Output and other monitor calls

+ +

EM differs from most conventional machines in that it +has high level i/o instructions. Typical instructions are +OPEN FILE and READ FROM FILE instead of low level +instructions such as setting and clearing bits in device +registers. By providing such high level i/o primitives, the +task of implementing EM on various non EM machines is made +considerably easier.

+ +

I/O is initiated by the MON instruction, which expects +an iocode on top of the stack. Often there are also +parameters which are pushed on the stack in reverse order, +that is: last parameter first. Some i/o functions also +provide results, which are returned on the stack. In the +list of monitor calls we use several types of parameters and +results, these types consist of integers and unsigneds of +varying sizes, but never smaller than the wordsize, and the +two pointer types.

+ +

The names of the types used are:

+ +

+ +

The table below lists the i/o codes with their results +and parameters. This list is similar to the system calls of +the UNIX Version 7 operating system.

+ +

To execute a monitor call, proceed as follows:

+ + + + + + + + + + + + + + + + + +
+ +

a)

+
+ +

Stack the parameters, in reverse order, last parameter +first.

+
+
+ +

b)

+
+ +

Push the monitor call number (iocode) onto the +stack.

+
+
+ +

c)

+
+ +

Execute the MON instruction.

+
+
+ +

An error code is present on the top of the stack after +execution of most monitor calls. If this error code is zero, +the call performed the action requested and the results are +available on top of the stack. Non-zero error codes indicate +a failure, in this case no results are available and the +error code has been pushed twice. This construction enables +programs to test for failure with a single instruction ( TEQ +or TNE ) and still find out the cause of the failure. The +result name ’e’ is reserved for the error +code.

+ +

List of monitor calls.

+
nr  name     parameters      results                function
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

1

+
+ +

Exit

+
+ +

status:int

+
+
+ +

Terminate this process

+
+ +

2

+
+ +

Fork

+
+
+ +

e,flag,pid:int

+
+ +

Spawn new process

+
+ +

3

+
+ +

Read

+
+ +

fildes:int;buf:ptr;nbytes:unsp

+
+ +
+
+ +

e:int;rbytes:unsp

+
+ +

Read from file

+
+ +

4

+
+ +

Write

+
+ +

fildes:int;buf:ptr;nbytes:unsp

+
+ +
+
+ +

e:int;wbytes:unsp

+
+ +

Write on a file

+
+ +

5

+
+ +

Open

+
+ +

string:ptr;flag:int

+
+ +
+
+ +

e,fildes:int

+
+ +

Open file for read and/or write

+
+ +

6

+
+ +

Close

+
+ +

fildes:int

+
+ +

e:int

+
+ +

Close a file

+
+ +

7

+
+ +

Wait

+
+
+ +

e:int;status,pid:int2

+
+ +
+
+
+ +

Wait for child

+
+ +

8

+
+ +

Creat

+
+ +

string:ptr;mode:int

+
+ +
+
+ +

e,fildes:int

+
+ +

Create a new file

+
+ +

9

+
+ +

Link

+
+ +

string1,string2:ptr

+
+ +
+
+ +

e:int

+
+ +

Link to a file

+
+ +

10

+
+ +

Unlink

+
+ +

string:ptr

+
+ +

e:int

+
+ +

Remove directory entry

+
+ +

12

+
+ +

Chdir

+
+ +

string:ptr

+
+ +

e:int

+
+ +

Change default directory

+
+ +

14

+
+ +

Mknod

+
+ +

string:ptr;mode,addr:int2

+
+ +
+
+ +

e:int

+
+ +

Make a special file

+
+ +

15

+
+ +

Chmod

+
+ +

string:ptr;mode:int2

+
+ +
+
+ +

e:int

+
+ +

Change mode of file

+
+ +

16

+
+ +

Chown

+
+ +

string:ptr;owner,group:int2

+
+ +
+
+ +

e:int

+
+ +

Change owner/group of a file

+
+ +

18

+
+ +

Stat

+
+ +

string,statbuf:ptr

+
+ +
+
+ +

e:int

+
+ +

Get file status

+
+ +

19

+
+ +

Lseek

+
+ +

fildes:int;off:int4;whence:int

+
+ +
+
+ +

e:int;oldoff:int4

+
+ +

Move read/write pointer

+
+ +

20

+
+ +

Getpid

+
+
+ +

pid:int2

+
+ +

Get process identification

+
+ +

21

+
+ +

Mount

+
+ +

special,string:ptr;rwflag:int

+
+ +
+
+ +

e:int

+
+ +

Mount file system

+
+ +

22

+
+ +

Umount

+
+ +

special:ptr

+
+ +

e:int

+
+ +

Unmount file system

+
+ +

23

+
+ +

Setuid

+
+ +

userid:int2

+
+ +

e:int

+
+ +

Set user ID

+
+ +

24

+
+ +

Getuid

+
+
+ +

e_uid,r_uid:int2

+
+ +

Get user ID

+
+ +

25

+
+ +

Stime

+
+ +

time:int4

+
+ +

e:int

+
+ +

Set time and date

+
+ +

26

+
+ +

Ptrace

+
+ +

request:int;pid:int2;addr:ptr;data:int

+
+ +
+
+ +

e,value:int

+
+ +

Process trace

+
+ +

27

+
+ +

Alarm

+
+ +

seconds:uns2

+
+ +

previous:uns2

+
+ +

Schedule signal

+
+ +

28

+
+ +

Fstat

+
+ +

fildes:int;statbuf:ptr

+
+ +
+
+ +

e:int

+
+ +

Get file status

+
+ +

29

+
+ +

Pause

+
+
+
+ +

Stop until signal

+
+ +

30

+
+ +

Utime

+
+ +

string,timep:ptr

+
+ +
+
+ +

e:int

+
+ +

Set file times

+
+ +

33

+
+ +

Access

+
+ +

string:ptr;mode:int

+
+ +
+
+ +

e:int

+
+ +

Determine file accessibility

+
+ +

34

+
+ +

Nice

+
+ +

incr:int

+
+
+ +

Set program priority

+
+ +

35

+
+ +

Ftime

+
+ +

bufp:ptr

+
+ +

e:int

+
+ +

Get date and time

+
+ +

36

+
+ +

Sync

+
+
+
+ +

Update filesystem

+
+ +

37

+
+ +

Kill

+
+ +

pid:int2;sig:int

+
+ +
+
+ +

e:int

+
+ +

Send signal to a process

+
+ +

41

+
+ +

Dup

+
+ +

fildes,newfildes:int

+
+ +
+
+ +

e,fildes:int

+
+ +

Duplicate a file descriptor

+
+ +

42

+
+ +

Pipe

+
+
+ +

e,w_des,r_des:int

+
+ +

Create a pipe

+
+ +

43

+
+ +

Times

+
+ +

buffer:ptr

+
+
+ +

Get process times

+
+ +

44

+
+ +

Profil

+
+ +

buff:ptr;bufsiz,offset,scale:intp

+
+ +
+
+
+ +

Execution time profile

+
+ +

46

+
+ +

Setgid

+
+ +

gid:int2

+
+ +

e:int

+
+ +

Set group ID

+
+ +

47

+
+ +

Getgid

+
+
+ +

e_gid,r_gid:int

+
+ +

Get group ID

+
+ +

48

+
+ +

Sigtrp

+
+ +

trapno,signo:int

+
+ +
+
+ +

e,prevtrap:int

+
+ +

See below

+
+ +

51

+
+ +

Acct

+
+ +

file:ptr

+
+ +

e:int

+
+ +

Turn accounting on or off

+
+ +

53

+
+ +

Lock

+
+ +

flag:int

+
+ +

e:int

+
+ +

Lock a process

+
+ +

54

+
+ +

Ioctl

+
+ +

fildes,request:int;argp:ptr

+
+ +
+
+ +

e:int

+
+ +

Control device

+
+ +

56

+
+ +

Mpxcall

+
+ +

cmd:int;vec:ptr

+
+ +

e:int

+
+ +

Multiplexed file handling

+
+ +

59

+
+ +

Exece

+
+ +

name,argv,envp:ptr

+
+ +
+
+ +

e:int

+
+ +

Execute a file

+
+ +

60

+
+ +

Umask

+
+ +

mask:int2

+
+ +

oldmask:int2

+
+ +

Set file creation mode mask

+
+ +

61

+
+ +

Chroot

+
+ +

string:ptr

+
+ +

e:int

+
+ +

Change root directory

+
+ +

Codes 0, 11, 13, 17, 31, 32, 38, 39, 40, 45, 49, 50, 52, +55, 57, 58, 62, and 63 are not used.

+ +

All monitor calls, except fork and sigtrp are the same +as the UNIX version 7 system calls.

+ +

The sigtrp entry maps UNIX signals onto EM interrupts. +Normally, trapno is in the range 0 to 252. In that case it +requests that signal signo will cause trap trapno to occur. +When given trap number −2, default signal handling is +reset, and when given trap number −3, the signal is +ignored.

+ +

The flag returned by fork is 1 in the child process and +0 in the parent. The pid returned is the process-id of the +other process.

+ +

9

+ +

9. TRAPS AND INTERRUPTS

+ +

EM provides a means for the user program to catch all +traps generated by the program itself, the hardware, or +external conditions. This mechanism uses five instructions: +LIM, SIM, SIG, TRP and RTT. This section of the manual may +be omitted on the first reading since it presupposes +knowledge of the EM instruction set.

+ +

The action taken when a trap occurs is determined by the +value of an internal EM trap register. This register +contains a pointer to a procedure. Initially the pointer +used is zero and all traps halt the program with, hopefully, +a useful message to the outside world. The SIG instruction +can be used to alter the trap register, it pops a procedure +pointer from the stack into the trap register. When a trap +occurs after storing a nonzero value in the trap register, +the procedure pointed to by the trap register is called with +the trap number as the only parameter (see below). SIG +returns the previous value of the trap register on the +stack. Two consecutive SIGs are a no-op. When a trap occurs, +the trap register is reset to its initial condition, to +prevent recursive traps from hanging the machine up, e.g. +stack overflow in the stack overflow handling procedure.

+ +

The runtime systems for some languages need to ignore +some EM traps. EM offers a feature called the ignore mask. +It contains one bit for each of the lowest 16 trap numbers. +The bits are numbered 0 to 15, with the least significant +bit having number 0. If a certain bit is 1 the corresponding +trap never occurs and processing simply continues. The +actions performed by the offending instruction are described +by the Pascal program in appendix A.
+If the bit is 0, traps are not ignored. The instructions LIM +and SIM allow copying and replacement of the ignore +mask.

+ +

The TRP instruction generates a trap, the trap number +being found on the stack. This is, among other things, +useful for library procedures and runtime systems. It can +also be used by a low level trap procedure to pass the trap +to a higher level one (see example below).

+ +

The RTT instruction returns from the trap procedure and +continues after the trap. In the list below all traps marked +with an asterisk (’*’) are considered to be +fatal and it is explicitly undefined what happens when +restarting after the trap.

+ +

The way a trap procedure is called is completely +compatible with normal calling conventions. The only way a +trap procedure differs from normal procedures is the return. +It has to use RTT instead of RET. This is necessary because +the complete runtime status is saved on the stack before +calling the procedure and all this status has to be +reloaded. Error numbers are in the range 0 to 252. The trap +numbers are divided into three categories:

+ + + + + + + + +
+ +

0− 63

+
+ +

EM machine errors, e.g. illegal instruction.

+
+
+ + + + +

0−15

+ + + +
+ +

maskable

+
+
+ + + + + + + + + + + + + + +
+ +

16−63

+
+ +

not maskable

+
+
+ +

64−127

+
+
+ +

Reserved for use by compilers, run time systems, +etc.

+ + + + + + + +
+ +

128−252

+
+ +

Available for user programs.

+
+
+ +

EM machine errors are numbered as follows:

+ +

+ +

As an example, suppose a subprocedure has to be written +to do a numeric calculation. When an overflow occurs the +computation has to be stopped and the higher level procedure +must be resumed. This can be programmed as follows using the +mechanism described above:

+ + + + + + +
+ +

mes 2,2,2

+
+ +

; set sizes

+
+ +

ersave

+ + + + + + +
+ +

bss 2,0,0

+
+ +

; Room to save previous value of trap procedure

+
+ +

msave

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

bss 2,0,0

+
+ +

; Room to save previous value of trap mask

+
+ + +

pro $calcule,0

+
+ +

; entry point

+
+ + +

lxl 0

+
+ +

; fill in non-local goto descriptor with LB

+
+ +

ste jmpbuf+4

+
+
+ + +

lor 1

+
+ +

; and SP

+
+ +

ste jmpbuf+2

+
+
+ + +

lim

+
+ +

; get current ignore mask

+
+ + +

ste msave

+
+ +

; save it

+
+ +

lim

+
+
+ + +

loc 16

+
+ +

; bit for EFOVFL

+
+ + +

ior 2

+
+ +

; set in mask

+
+ + +

sim

+
+ +

; ignore EFOVFL from now on

+
+ + +

lpi $catch

+
+ +

; load procedure identifier

+
+ + +

sig

+
+ +

; catch wil get all traps now

+
+ + +

ste ersave

+
+ +

; save previous trap procedure identifier

+
+ + + +

; perform calculation now, possibly generating +overflow

+
+ +

1

+
+ +

; label jumped to by catch procedure

+
+ + +

loe ersave

+
+ +

; get old trap procedure

+
+ + +

sig

+
+ +

; refer all following trap to old procedure

+
+ + +

asp 2

+
+ +

; remove result of sig

+
+ + +

loe msave

+
+ +

; restore previous mask

+
+ + +

sim

+
+ +

; done now

+
+ + + +

; load result of calculation

+
+ + +

ret 2

+
+ +

; return result

+
+ +

jmpbuf

+ + + + + + + + +
+ +

con *1,0,0

+
+ +

end

+
+ +

Example of catch procedure

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

pro $catch,0

+
+ +

; Local procedure that must catch the overflow trap

+
+ + +

lol 2

+
+ +

; Load trap number

+
+ + +

loc 4

+
+ +

; check for overflow

+
+ + +

bne *1

+
+ +

; if other trap, call higher trap procedure

+
+ + +

gto jmpbuf

+
+ +

; return to procedure calcule

+
+ +

1

+
+ +

; other trap has occurred

+
+ + +

loe ersave

+
+ +

; previous trap procedure

+
+ + +

sig

+
+ +

; other procedure will get the traps now

+
+ + +

asp 2

+
+ +

; remove the result of sig

+
+ + +

lol 2

+
+ +

; stack trap number

+
+ + +

trp

+
+ +

; call other trap procedure

+
+ + +

rtt

+
+ +

; if other procedure returns, do the same

+
+ +

end

+
+
+ +

10

+ +

10. EM MACHINE LANGUAGE

+ +

The EM machine language is designed to make program text +compact and to make decoding easy. Compact program text has +many advantages: programs execute faster, programs occupy +less primary and secondary storage and loading programs into +satellite processors is faster. The decoding of EM machine +language is so simple, that it is feasible to use +interpreters as long as EM hardware machines are not +available. This chapter is irrelevant when back ends are +used to produce executable target machine code.

+ +

10.1 Instruction encoding

+ +

A design goal of EM is to make the program text as +compact as possible. Decoding must be easy, however. The +encoding is fully byte oriented, without any small bit +fields. There are 256 primary opcodes, two of which are an +escape to two groups of 256 secondary opcodes each.

+ +

EM instructions without arguments have a single opcode +assigned, possibly escaped:

+ +

|--------------| | opcode | +|--------------|

+ + + + + + +
+ +

or

+
+ +

|--------------|--------------| | escape | opcode | +|--------------|--------------|

+ +

The encoding for instructions with an argument is more +complex. Several instructions have an address from the +global data area as argument. Other instructions have +different opcodes for positive and negative arguments.

+ +

There is always an opcode that takes the next two bytes +as argument, high byte first:

+ +

|--------------|--------------|--------------| | +opcode | hibyte | lobyte | +|--------------|--------------|--------------|

+ + + + + + +
+ +

or

+
+ + +

|--------------|--------------|--------------|--------------| +| escape | opcode | hibyte | lobyte | +|--------------|--------------|--------------|--------------|

+ +

An extra escape is provided for instructions with four +or eight byte arguments.

+ +

|--------------|--------------|--------------| +|--------------| | ESCAPE | opcode | hibyte |...| lobyte | +|--------------|--------------|--------------| +|--------------|

+ +

For most instructions some argument values predominate. +The most frequent combinations of instruction and argument +will be encoded in a single byte, called a mini:

+ +

|---------------| |opcode+argument| (mini) +|---------------|

+ +

The number of minis is restricted, because only 254 +primary opcodes are available. Many instructions have the +bulk of their arguments fall in the range 0 to 255. +Instructions that address global data have their arguments +distributed over a wider range, but small values of the high +byte are common. For all these cases there is another +encoding that combines the instruction and the high byte of +the argument into a single opcode. These opcodes are called +shorties. Shorties may be escaped.

+ +

|--------------|--------------| | opcode+high | +lobyte | (shortie) |--------------|--------------|

+ + + + + + +
+ +

or

+
+ +

|--------------|--------------|--------------| | +escape | opcode+high | lobyte | +|--------------|--------------|--------------|

+ +

Escaped shorties are useless if the normal encoding has +a primary opcode. Note that for some instruction-argument +combinations several different encodings are available. It +is the task of the assembler to select the shortest of +these. The savings by these mini and shortie opcodes are +considerable, about 55%.

+ +

Further improvements are possible: the arguments of many +instructions are a multiple of the wordsize. Some do also +not allow zero as an argument. If these arguments are +divided by the wordsize and, when zero is not allowed, then +decremented by 1, more of them can be encoded as shortie or +mini. The arguments of some other instructions rarely or +never assume the value 0, but start at 1. The value 1 is +then encoded as 0, 2 as 1 and so on.

+ +

Assigning opcodes to instructions by the assembler is +completely table driven. For details see appendix B.

+ +

10.2 Procedure descriptors

+ +

The procedure identifiers used in the interpreter are +indices into a table of procedure descriptors. Each +descriptor contains:

+ + + + + + + +
+ +

1.

+
+ +

the number of bytes to be reserved for locals at each +invocation.

+
+
+ + + + + +
+

This is a pointer-sized integer.

+
+ + + + + + + +
+ +

2.

+
+ +

the start address of the procedure

+
+
+ +

10.3 Load format

+ +

The EM machine language load format defines the +interface between the EM assembler/loader and the EM machine +itself. A load file consists of a header, the program text +to be executed, a description of the global data area and +the procedure descriptor table, in this order. All integers +in the load file are presented with the least significant +byte first.

+ +

The header has two parts: the first half (eight 16-bit +integers) aids in selecting the correct EM machine or +interpreter. Some EM machines, for instance, may have +hardware floating point instructions. The header entries are +as follows (bit 0 is rightmost):

+ + + + + + + + + + + + +
+ +

1:

+
+ +

magic number (07255)

+
+
+ +

2:

+
+ +

flag bits with the following meaning:

+
+
+ + + + + +
+

bit 0

+ + + + + +
+

TEST; test for integer overflow etc.

+
+ + + + + +
+

bit 1

+ + + + + +
+

PROFILE; for each source line: count the number of memory +cycles executed.

+
+ + + + + +
+

bit 2

+ + + + + +
+

FLOW; for each source line: set a bit in a bit map table +if instructions on that line are executed.

+
+ + + + + +
+

bit 3

+ + + + + +
+

COUNT; for each source line: increment a counter if that +line is entered.

+
+ + + + + +
+

bit 4

+ + + + + +
+

REALS; set if a program uses floating point +instructions.

+
+ + + + + +
+

bit 5

+ + + + + +
+

EXTRA; more tests during compiler debugging.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

3:

+
+ +

number of unresolved references.

+
+
+ +

4:

+
+ +

version number; used to detect obsolete EM load +files.

+
+
+ +

5:

+
+ +

wordsize ; the number of bytes in each machine word.

+
+
+ +

6:

+
+ +

pointer size ; the number of bytes available for +addressing.

+
+
+ +

7:

+
+ +

unused

+
+
+ +

8:

+
+ +

unused

+
+
+ +

The second part of the header (eight entries, of pointer +size bytes each) describes the load file itself:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

1:

+
+ +

NTEXT; the program text size in bytes.

+
+
+ +

2:

+
+ +

NDATA; the number of load-file descriptors (see +below).

+
+
+ +

3:

+
+ +

NPROC; the number of entries in the procedure descriptor +table.

+
+
+ +

4:

+
+ +

ENTRY; procedure number of the procedure to start +with.

+
+
+ +

5:

+
+ +

NLINE; the maximum source line number.

+
+
+ +

6:

+
+ +

SZDATA; the address of the lowest uninitialized data +byte.

+
+
+ +

7:

+
+ +

unused

+
+
+ +

8:

+
+ +

unused

+
+
+ +

The program text consists of NTEXT bytes. NTEXT is +always a multiple of the wordsize. The first byte of the +program text is the first byte of the instruction address +space, i.e. it has address 0. Pointers into the program text +are found in the procedure descriptor table where relocation +is simple and in the global data area. The initialization of +the global data area allows easy relocation of pointers into +both address spaces.

+ +

The global data area is described by the NDATA +descriptors. Each descriptor describes a number of +consecutive words (of wordsize) and consists of a sequence +of bytes. While reading the descriptors from the load file, +one can initialize the global data area from low to high +addresses. The size of the initialized data area is given by +SZDATA, this number can be used to check the +initialization.
+The header of each descriptor consists of a byte, describing +the type, and a count. The number of bytes used for this +(unsigned) count depends on the type of the descriptor and +is either a pointer-sized integer or one byte. The meaning +of the count depends on the descriptor type. At load time an +interpreter can perform any conversion deemed necessary, +such as reordering bytes in integers and pointers and adding +base addresses to pointers.

+ +

In the following pictures we show a graphical notation +of the initializers. The leftmost rectangle represents the +leading byte.

+ +

Fields marked with

+ +

+ +

------------------- | 0 | n | repeat last +initialization n times -------------------

+ +

--------- | 1 | m | m uninitialized words +---------

+ +

____________ / bytes \ ----------------- ----- | 2 | +m | b | b |...| b | m initialized bytes ----------------- +-----

+ +

_________ / word \ ----------------------- | 3 | m | +w |... m initialized wordsized integers +-----------------------

+ +

_________ / pointer \ ----------------------- | 4 | +m | p |... m initialized data pointers +-----------------------

+ +

_________ / pointer \ ----------------------- | 5 | +m | p |... m initialized instruction pointers +-----------------------

+ +

____________ / bytes \ ------------------------- | 6 +| m | b | b |...| b | initialized integer of size m +-------------------------

+ +

____________ / bytes \ ------------------------- | 7 +| m | b | b |...| b | initialized unsigned of size m +-------------------------

+ +

____________ / string \ ------------------------- | +8 | m | s | initialized float of size m +-------------------------

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

type 0:

+
+ +

If the last initialization initialized k bytes starting +at address a, do the same initialization again n +times, starting at a+k, a+2*k, .... +a+n*k. This is the only descriptor whose starting +byte is followed by an integer with the size of a pointer, +in all other descriptors the first byte is followed by a +one-byte count. This descriptor must be preceded by a +descriptor of another type.

+
+
+ +

type 1:

+
+ +

Reserve m words, not explicitly initialized (BSS and +HOL).

+
+
+ +

type 2:

+
+ +

The m bytes following the descriptor header are +initializers for the next m bytes of the global data area. m +is divisible by the wordsize.

+
+
+ +

type 3:

+
+ +

The m words following the header are initializers for +the next m words of the global data area.

+
+
+ +

type 4:

+
+ +

The m data address space pointers following the header +are initializers for the next m data pointers in the global +data area. Interpreters that represent EM pointers by target +machine addresses must relocate all data pointers.

+
+
+ +

type 5:

+
+ +

The m instruction address space pointers following the +header are initializers for the next m instruction pointers +in the global data area. Interpreters that represent EM +instruction pointers by target machine addresses must +relocate these pointers.

+
+
+ +

type 6:

+
+ +

The m bytes following the header form a signed integer +number with a size of m bytes, which is an initializer for +the next m bytes of the global data area. m is governed by +the same restrictions as for transfer of objects to/from +memory.

+
+
+ +

type 7:

+
+ +

The m bytes following the header form an unsigned +integer number with a size of m bytes, which is an +initializer for the next m bytes of the global data area. m +is governed by the same restrictions as for transfer of +objects to/from memory.

+
+
+ +

type 8:

+
+ +

The header is followed by an ASCII string, null +terminated, to initialize, in global data, a floating point +number with a size of m bytes. m is governed by the same +restrictions as for transfer of objects to/from memory. The +ASCII string contains the notation of a real as used in the +Pascal language.

+
+
+ +

The NPROC procedure descriptors on the load file consist +of an instruction space address (of pointer size) and an +integer (of pointer size) specifying the number of bytes for +locals.

+ +

11

+ +

11. EM ASSEMBLY LANGUAGE

+ +

We use two representations for assembly language +programs, one is in ASCII and the other is the compact +assembly language. The latter needs less space than the +first for the same program and therefore allows faster +processing. Our only program accepting ASCII assembly +language converts it to the compact form. All other programs +expect compact assembly input. The first part of the chapter +describes the ASCII assembly language and its semantics. The +second part describes the syntax of the compact assembly +language. The last part lists the EM instructions with the +type of arguments allowed and an indication of the function. +Appendix A gives a detailed description of the effect of all +instructions in the form of a Pascal program.

+ +

11.1 ASCII assembly language

+ +

An assembly language program consists of a series of +lines, each line may be blank, contain one +(pseudo)instruction or contain one label. Input to the +assembler is in lower case. Upper case is used in this +document merely to distinguish keywords from the surrounding +prose. Comment is allowed at the end of each line and starts +with a semicolon ";". This kind of comment does +not exist in the compact form.

+ +

Labels must be placed all by themselves on a line and +start in column 1. There are two kinds of labels, +instruction and data labels. Instruction labels are unsigned +positive integers. The scope of an instruction label is its +procedure.

+ +

The pseudoinstructions CON, ROM and BSS may be preceded +by a line containing a 1−8 character data label, the +first character of which is a letter, period or underscore. +The period may only be followed by digits, the others may be +followed by letters, digits and underscores. The use of the +character "." followed by a constant, which must +be in the range 1 to 32767 (e.g. ".40") is +recommended for compiler generated programs. These labels +are considered as a special case and handled more +efficiently in compact assembly language (see below). Note +that a data label on its own or two consecutive labels are +not allowed.

+ +

Each statement may contain an instruction mnemonic or +pseudoinstruction. These must begin in column 2 or later +(not column 1) and must be followed by a space, tab, +semicolon or LF. Everything on the line following a +semicolon is taken as a comment.

+ +

Each input file contains one module. A module may +contain many procedures, which may be nested. A procedure +consists of a PRO statement, a (possibly empty) collection +of instructions and pseudoinstructions and finally an END +statement. Pseudoinstructions are also allowed between +procedures. They do not belong to a specific procedure.

+ +

All constants in EM are interpreted in the decimal base. +The ASCII assembly language accepts constant expressions +wherever constants are allowed. The operators recognized +are: +, −, *, % and / with the usual precedence order. +Use of the parentheses ( and ) to alter the precedence order +is allowed.

+ +

11.1.1 Instruction arguments

+ +

Unlike many other assembly languages, the EM assembly +language requires all arguments of normal and +pseudoinstructions to be either a constant or an identifier, +but not a combination of these two. There is one exception +to this rule: when a data label is used for initialization +or as an instruction argument, expressions of the form +’label+constant’ and +’label-constant’ are allowed. This makes it +possible to address, for example, the third word of a ten +word BSS block directly. Thus LOE LABEL+4 is permitted and +so is CON LABEL+3. The resulting address is must be in the +same fragment as the label. It is not allowed to add or +subtract from instruction labels or procedure identifiers, +which certainly is not a severe restriction and greatly aids +optimization.

+ +

Instruction arguments can be constants, data labels, +data labels offsetted by a constant, instruction labels and +procedure identifiers. The range of integers allowed depends +on the instruction. Most instructions allow only integers +(signed or unsigned) that fit in a word. Arguments used as +offsets to pointers should fit in a pointer-sized integer. +Finally, arguments to LDC should fit in a double-word +integer.

+ +

Several instructions have two possible forms: with an +explicit argument and with an implicit argument on top of +the stack. The size of the implicit argument is the +wordsize. The implicit argument is always popped before all +other operands. For example: ’CMI 4’ specifies +that two four-byte signed integers on top of the stack are +to be compared. ’CMI’ without an argument +expects a wordsized integer on top of the stack that +specifies the size of the integers to be compared. Thus the +following two sequences are equivalent:

+ +

+ +

Section 11.1.6 shows the arguments allowed for each +instruction.

+ +

11.1.2 Pseudoinstruction arguments

+ +

Pseudoinstruction arguments can be divided in two +classes: Initializers and others. The following initializers +are allowed: signed integer constants, unsigned integer +constants, floating-point constants, strings, data labels, +data labels offsetted by a constant, instruction labels and +procedure identifiers.

+ +

Constant initializers in BSS, HOL, CON and ROM +pseudoinstructions can be followed by a letter I, U or F. +This indicator specifies the type of the initializer: +Integer, Unsigned or Float. If no indicator is present I is +assumed. The size of the initializer is the wordsize unless +the indicator is followed by an integer specifying the +initializer’s size. This integer is governed by the +same restrictions as for transfer of objects to/from memory. +As in instruction arguments, initializers include +expressions of the form: "LABEL+offset" and +"LABEL−offset". The offset must be an +unsigned decimal constant. The ’IUF’ indicators +cannot be used in the offsets.

+ +

Data labels are referred to by their name.

+ +

Strings are surrounded by double quotes ("). +Semicolon’s in string do not indicate the start of +comment. In the ASCII representation the escape character \ +(backslash) alters the meaning of subsequent character(s). +This feature allows inclusion of zeroes, graphic characters +and the double quote in the string. The following escape +sequences exist:

+ +

+ +

The escape \ddd consists of the backslash +followed by 1, 2, or 3 octal digits specifying the value of +the desired character. If the character following a +backslash is not one of those specified, the backslash is +ignored. Example: CON "hello\012\0". Each string +element initializes a single byte. The ASCII character set +is used to map characters onto values.

+ +

Instruction labels are referred to as *1, *2, etc. in +both branch instructions and as initializers.

+ +

The notation $procname means the identifier for the +procedure with the specified name. This identifier has the +size of a pointer.

+ +

11.1.3 Notation

+ +

First, the notation used for the arguments, classes of +instructions and pseudoinstructions.

+ +

+ +

11.1.4 Pseudoinstructions

+ +

11.1.4.1 Storage declaration

+ +

Initialized global data is allocated by the +pseudoinstruction CON, which needs at least one argument. +Each argument is used to allocate and initialize a number of +consecutive bytes in data memory. The number of bytes to be +allocated and the alignment depend on the type of the +argument. For each argument, an integral number of words, +determined by the argument type, is allocated and +initialized.

+ +

The pseudoinstruction ROM is the same as CON, except +that it guarantees that the initialized words will not +change during the execution of the program. This information +allows optimizers to do certain calculations such as array +indexing and subrange checking at compile time instead of at +run time.

+ +

The pseudoinstruction BSS allocates uninitialized global +data or large blocks of data initialized by the same value. +The first argument to this pseudo is the number of bytes +required, which must be a multiple of the wordsize. The +other arguments specify the value used for initialization +and whether the initialization is only for convenience or a +strict necessity. The pseudoinstruction HOL is similar to +BSS in that it requests an (un)initialized global data +block. Addressing of a HOL block, however, is quasi +absolute. The first byte is addressed by 0, the second byte +by 1 etc. in assembly language. The assembler/loader adds +the base address of the HOL block to these numbers to obtain +the absolute address in the machine language.

+ +

The scope of a HOL block starts at the HOL pseudo and +ends at the next HOL pseudo or at the end of a module +whatever comes first. Each instruction falls in the scope of +at most one HOL block, the current HOL block. It is not +allowed to have more than one HOL block per procedure.

+ +

The alignment restrictions are enforced by the +pseudoinstructions. All initializers are aligned on a +multiple of their size or the wordsize whichever is smaller. +Strings form an exception, they are to be seen as a sequence +of initializers each for one byte, i.e. strings are not +padded with zero bytes. Switching to another type of +fragment or placing a label forces word-alignment. There are +three types of fragments in global data space: CON, ROM and +BSS/HOL.

+ +

BSS <cst1>,<val>,<cst2>

+ + + + + +
+

Reserve <cst1> bytes. <val> is the value used +to initialize the area. <cst1> must be a multiple of +the size of <val>. <cst2> is 0 if the +initialization is not strictly necessary, 1 if it is.

+
+ +

HOL <cst1>,<val>,<cst2>

+ + + + + +
+

Idem, but all following absolute global data references +will refer to this block. Only one HOL is allowed per +procedure, it has to be placed before the first +instruction.

+
+ +

CON <val>+

+ + + + + +
+

Assemble global data words initialized with the +<val> constants.

+
+ +

ROM <val>+

+ + + + + +
+

Idem, but the initialized data will never be changed by +the program.

+
+ +

11.1.4.2 Partitioning

+ +

Two pseudoinstructions partition the input into +procedures:

+ +

PRO <pro>[,<cst>]

+ + + + + +
+

Start of procedure. <pro> is the procedure name. +<cst> is the number of bytes for locals. The number of +bytes for locals must be specified in the PRO or END +pseudoinstruction. When specified in both, they must be +identical.

+
+ +

END [<cst>]

+ + + + + +
+

End of Procedure. <cst> is the number of bytes for +locals. The number of bytes for locals must be specified in +either the PRO or END pseudoinstruction or both.

+
+ +

11.1.4.3 Visibility

+ +

Names of data and procedures in an EM module can either +be internal or external. External names are known outside +the module and are used to link several pieces of a program. +Internal names are not known outside the modules they are +used in. Other modules will not ’see’ an +internal name.

+ +

To reduce the number of passes needed, it must be known +at the first occurrence whether a name is internal or +external. If the first occurrence of a name is in a +definition, the name is considered to be internal. If the +first occurrence of a name is a reference, the name is +considered to be external. If the first occurrence is in one +of the following pseudoinstructions, the effect of the +pseudo has precedence.

+ +

EXA <dlb>

+ + + + + +
+

External name. <dlb> is known, possibly defined, +outside this module. Note that <dlb> may be defined in +the same module.

+
+ +

EXP <pro>

+ + + + + +
+

External procedure identifier. Note that <pro> may +be defined in the same module.

+
+ +

INA <dlb>

+ + + + + +
+

Internal name. <dlb> is internal to this module and +must be defined in this module.

+
+ +

INP <pro>

+ + + + + +
+

Internal procedure. <pro> is internal to this +module and must be defined in this module.

+
+ +

11.1.4.4 Miscellaneous

+ +

Two other pseudoinstructions provide miscellaneous +features:

+ +

EXC <cst1>,<cst2>

+ + + + + +
+

Two blocks of instructions preceding this one are +interchanged before being processed. <cst1> gives the +number of lines of the first block. <cst2> gives the +number of lines of the second one. Blank and pure comment +lines do not count. This instruction is obsolete. Its use is +strongly discouraged.

+
+ +

MES <cst>[,<par>]*

+ + + + + +
+

A special type of comment. Used by compilers to +communicate with the optimizer, assembler, etc. as +follows:

+
+ + + + + +
+

MES 0

+ + + + + +
+

An error has occurred, stop further processing.

+
+ + + + + +
+

MES 1

+ + + + + +
+

Suppress optimization.

+
+ + + + + +
+

MES 2,<cst1>,<cst2>

+ + + + + +
+

Use wordsize <cst1> and pointer size +<cst2>.

+
+ + + + + +
+

MES +3,<cst1>,<cst2>,<cst3>,<cst4>

+ + + + + +
+

Indicates that a local variable is never referenced +indirectly. Used to indicate that a register may be used for +a specific variable. <cst1> is offset in bytes from AB +if positive and offset from LB if negative. <cst2> +gives the size of the variable. <cst3> indicates the +class of the variable. The following values are currently +recognized:
+0 The variable can be used for anything.
+1 The variable is used as a loopindex.
+2 The variable is used as a pointer.
+3 The variable is used as a floating point number.
+<cst4> gives the priority of the variable, higher +numbers indicate better candidates.

+
+ + + + + +
+

MES 4,<cst>,<str>

+ + + + + +
+

Number of source lines in file <str> (for +profiler).

+
+ + + + + +
+

MES 5

+ + + + + +
+

Floating point used.

+
+ + + + + +
+

MES 6,<val>*

+ + + + + +
+

Comment. Used to provide comments in compact assembly +language.

+
+ + + + + +
+

MES 7,.....

+ + + + + +
+

Reserved.

+
+ + + + + +
+

MES 8,<pro>[,<dlb>]...

+ + + + + +
+

Library module. Indicates that the module may only be +loaded if it is useful, that is, if it can satisfy any +unresolved references during the loading process. May not be +preceded by any other pseudo, except MES’s.

+
+ + + + + +
+

MES 9,<cst>

+ + + + + +
+

Guarantees that no more than <cst> bytes of +parameters are accessed, either directly or indirectly.

+
+ + + + + +
+

MES 10,<cst>[,<par>]*

+ + + + + +
+

This message number is reserved for the global optimizer. +It inserts these messages in its output as hints to +backends. <cst> indicates the type of hint.

+
+ + + + + +
+

MES 11

+ + + + + +
+

Procedures containing this message are possible +destinations of non-local goto’s with the GTO +instruction. Some backends keep locals in registers, the +locals in this procedure should not be kept in registers and +all registers containing locals of other procedures should +be saved upon entry to this procedure.

+
+ + + + + +
+

Each backend is free to skip irrelevant MES pseudos.

+
+ +

11.2 The Compact Assembly Language

+ +

The assembler accepts input in a highly encoded form. +This form is intended to reduce the amount of file transport +between the front ends, optimizers and back ends, and also +reduces the amount of storage required for storing +libraries. Libraries are stored as archived compact assembly +language, not machine language.

+ +

When beginning to read the input, the assembler is in +neutral state, and expects either a label or an instruction +(including the pseudoinstructions). The meaning of the next +byte(s) when in neutral state is as follows, where b1, b2 +etc. represent the succeeding bytes.

+ +

+ +

After a label, the assembler is back in neutral state; +it can immediately accept another label or an instruction in +the next byte. No linefeeds are used to separate lines.

+ +

If an opcode expects no arguments, the assembler is back +in neutral state after reading the one byte containing the +instruction number. If it has one or more arguments (only +pseudos have more than 1), the arguments follow directly, +encoded as follows:

+ +

+ +

Absence of an optional argument is indicated by a +special byte.

+ +

+ +

The bytes specifying the value of a 16, 32 or 64 bit +constant are presented in two’s complement notation, +with the least significant byte first. For example: the +value of a 32 bit constant is ((s4*256+b3)*256+b2)*256+b1, +where s4 is b4−256 if b4 is greater than 128 else s4 +takes the value of b4. A <string> consists of a +<cst> immediately followed by a sequence of bytes with +length <cst>.

+ +

The pseudoinstructions fall into several categories, +depending on their arguments:

+
     Group 1 − EXC, BSS, HOL have a known number of arguments
+     Group 2 − EXA, EXP, INA, INP have a string as argument
+     Group 3 − CON, MES, ROM have a variable number of various things
+     Group 4 − END, PRO have a trailing optional argument.
+
+ +

Groups 1 and 2 use the encoding described above. Group 3 +also uses the encoding listed above, with an <end> +byte after the last argument to indicate the end of the +list. Group 4 uses an <end> byte if the trailing +argument is not present.

+ +

+ +

11.3 Assembly language instruction list

+ +

For each instruction in the list the range of argument +values in the assembly language is given. The column headed +assem contains the mnemonics defined in 11.1.3. The +following column specifies restrictions of the argument +value. Addresses have to obey the restrictions mentioned in +chapter 2. The classes of arguments are indicated by +letters:

+ +

+ +

The * at the rationale for w indicates that the +argument can either be given as argument or on top of the +stack. If the argument is omitted, the argument is fetched +from the stack; it is assumed to be a wordsized unsigned +integer. Instructions that check for undefined integer or +floating-point values and underflow or overflow are +indicated below by (*).

+
     GROUP 1 − LOAD
+
+
+
+ + + + + +

LOC c :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

Load constant (i.e. push one word onto the stack)
+LDC d :

+
+
+ +

Load double constant ( push two words )
+LOL l :

+
+
+ +

Load word at l-th local (l<0) or +parameter (l>=0)
+LOE g :

+
+
+ +

Load external word g
+LIL l :

+
+
+ +

Load word pointed to by l-th local or +parameter
+LOF f :

+
+
+ +

Load offsetted (top of stack + f yield +address)
+LAL l :

+
+
+ +

Load address of local or parameter
+LAE g :

+
+
+ +

Load address of external
+LXL n :

+
+
+ +

Load lexical (address of LB n static levels +back)
+LXA n :

+
+
+ +

Load lexical (address of AB n static levels +back)
+LOI o :

+
+
+ +

Load indirect o bytes (address is popped from the +stack)
+LOS w :

+
+
+ +

Load indirect, w-byte integer on top of stack +gives object size
+LDL l :

+
+
+ +

Load double local or parameter (two consecutive words +are stacked)
+LDE g :

+
+
+ +

Load double external (two consecutive externals are +stacked)
+LDF f :

+
+
+ +

Load double offsetted (top of stack + f yield +address)
+LPI p :

+
+
+ +

Load procedure identifier

+
+
+
     GROUP 2 − STORE
+
+
+
+ + + + + +

STL l :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

Store local or parameter
+STE g :

+
+
+ +

Store external
+SIL l :

+
+
+ +

Store into word pointed to by l-th local or +parameter
+STF f :

+
+
+ +

Store offsetted
+STI o :

+
+
+ +

Store indirect o bytes (pop address, then +data)
+STS w :

+
+
+ +

Store indirect, w-byte integer on top of stack +gives object size
+SDL l :

+
+
+ +

Store double local or parameter
+SDE g :

+
+
+ +

Store double external
+SDF f :

+
+
+ +

Store double offsetted

+
+
+
     GROUP 3 − INTEGER ARITHMETIC
+
+
+
+ + + + + +

ADI w :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

Addition (*)
+SBI w :

+
+
+ +

Subtraction (*)
+MLI w :

+
+
+ +

Multiplication (*)
+DVI w :

+
+
+ +

Division (*)
+RMI w :

+
+
+ +

Remainder (*)
+NGI w :

+
+
+ +

Negate (two’s complement) (*)
+SLI w :

+
+
+ +

Shift left (*)
+SRI w :

+
+
+ +

Shift right (*)

+
+
+
     GROUP 4 − UNSIGNED ARITHMETIC
+
+
+
+ + + + + +

ADU w :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

Addition
+SBU w :

+
+
+ +

Subtraction
+MLU w :

+
+
+ +

Multiplication
+DVU w :

+
+
+ +

Division
+RMU w :

+
+
+ +

Remainder
+SLU w :

+
+
+ +

Shift left
+SRU w :

+
+
+ +

Shift right

+
+
+
     GROUP 5 − FLOATING POINT ARITHMETIC
+
+
+
+ + + + + +

ADF w :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

Floating add (*)
+SBF w :

+
+
+ +

Floating subtract (*)
+MLF w :

+
+
+ +

Floating multiply (*)
+DVF w :

+
+
+ +

Floating divide (*)
+NGF w :

+
+
+ +

Floating negate (*)
+FIF w :

+
+
+ +

Floating multiply and split integer and fraction part +(*)
+FEF w :

+
+
+ +

Split floating number in exponent and fraction part +(*)

+
+
+
     GROUP 6 − POINTER ARITHMETIC
+
+
+
+ + + + + +

ADP f :

+ + + + + + + + + + + +
+ +

Add f to pointer on top of stack
+ADS w :

+
+
+ +

Add w-byte value and pointer
+SBS w :

+
+
+ +

Subtract pointers in same fragment and push diff as size +w integer

+
+
+
     GROUP 7 − INCREMENT/DECREMENT/ZERO
+
+
+
+ + + + + +

INC :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

Increment word on top of stack by 1 (*)
+INL l :

+
+
+ +

Increment local or parameter (*)
+INE g :

+
+
+ +

Increment external (*)
+DEC :

+
+
+ +

Decrement word on top of stack by 1 (*)
+DEL l :

+
+
+ +

Decrement local or parameter (*)
+DEE g :

+
+
+ +

Decrement external (*)
+ZRL l :

+
+
+ +

Zero local or parameter
+ZRE g :

+
+
+ +

Zero external
+ZRF w :

+
+
+ +

Load a floating zero of size w
+ZER w :

+
+
+ +

Load w zero bytes

+
     GROUP 8 − CONVERT    (stack:
+ source, source size, dest. size (top)) + + + CII :
+ Convert integer to integer (*) + CUI : +
+ Convert unsigned to integer (*) + CFI : +
+ Convert floating to integer (*) + CIF : +
+ Convert integer to floating (*) + CUF : +
+ Convert unsigned to floating (*) + CFF : +
+ Convert floating to floating (*) + CIU : +
+ Convert integer to unsigned + CUU : +
+ Convert unsigned to unsigned + CFU : +
+ Convert floating to unsigned +
+ + +
     GROUP 9 − LOGICAL
+
+
+
+ + + + + +

AND w :

+ + + + + + + + + + + + + + + + + + + + + + + +
+ +

Boolean and on two groups of w bytes
+IOR w :

+
+
+ +

Boolean inclusive or on two groups of w bytes
+XOR w :

+
+
+ +

Boolean exclusive or on two groups of w bytes
+COM w :

+
+
+ +

Complement (one’s complement of top w +bytes)
+ROL w :

+
+
+ +

Rotate left a group of w bytes
+ROR w :

+
+
+ +

Rotate right a group of w bytes

+
+
+
     GROUP 10 − SETS
+
+
+
+ + + + + +

INN w :

+ + + + + + + +
+ +

Bit test on w byte set (bit number on top of +stack)
+SET w :

+
+
+ +

Create singleton w byte set with bit n on (n is +top of stack)

+
+
+
     GROUP 11 − ARRAY
+
+
+
+ + + + + +

LAR w :

+ + + + + + + + + + + +
+ +

Load array element, descriptor contains integers of size +w
+SAR w :

+
+
+ +

Store array element
+AAR w :

+
+
+ +

Load address of array element

+
+
+
     GROUP 12 − COMPARE
+
+
+
+ + + + + +

CMI w :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

Compare w byte integers, Push negative, zero, +positive for <, = or >
+CMF w :

+
+
+ +

Compare w byte reals
+CMU w :

+
+
+ +

Compare w byte unsigneds
+CMS w :

+
+
+ +

Compare w byte values, can only be used for bit +for bit equality test
+CMP :

+
+
+ +

Compare pointers

+ +

TLT :

+
+
+ +

True if less, i.e. iff top of stack < 0
+TLE :

+
+
+ +

True if less or equal, i.e. iff top of stack <= 0
+TEQ :

+
+
+ +

True if equal, i.e. iff top of stack = 0
+TNE :

+
+
+ +

True if not equal, i.e. iff top of stack non zero
+TGE :

+
+
+ +

True if greater or equal, i.e. iff top of stack >= +0
+TGT :

+
+
+ +

True if greater, i.e. iff top of stack > 0

+
+
+
     GROUP 13 − BRANCH
+
+
+
+ + + + + +

BRA b :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

Branch unconditionally to label b

+ +

BLT b :

+
+
+ +

Branch less (pop 2 words, branch if top > second)
+BLE b :

+
+
+ +

Branch less or equal
+BEQ b :

+
+
+ +

Branch equal
+BNE b :

+
+
+ +

Branch not equal
+BGE b :

+
+
+ +

Branch greater or equal
+BGT b :

+
+
+ +

Branch greater

+ +

ZLT b :

+
+
+ +

Branch less than zero (pop 1 word, branch negative)
+ZLE b :

+
+
+ +

Branch less or equal to zero
+ZEQ b :

+
+
+ +

Branch equal zero
+ZNE b :

+
+
+ +

Branch not zero
+ZGE b :

+
+
+ +

Branch greater or equal zero
+ZGT b :

+
+
+ +

Branch greater than zero

+
+
+
     GROUP 14 − PROCEDURE CALL
+
+
+
+ + + + + +

CAI :

+ + + + + + + + + + + + + + + +
+ +

Call procedure (procedure identifier on stack)
+CAL p :

+
+
+ +

Call procedure (with identifier p)
+LFR s :

+
+
+ +

Load function result
+RET z :

+
+
+ +

Return (function result consists of top z +bytes)

+
+
+
     GROUP 15 − MISCELLANEOUS
+
+
+
+ + + + + +

ASP f :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

Adjust the stack pointer by f
+ASS w :

+
+
+ +

Adjust the stack pointer by w-byte integer
+BLM z :

+
+
+ +

Block move z bytes; first pop destination addr, +then source addr
+BLS w :

+
+
+ +

Block move, size is in w-byte integer on top of +stack
+CSA w :

+
+
+ +

Case jump; address of jump table at top of stack
+CSB w :

+
+
+ +

Table lookup jump; address of jump table at top of +stack
+DCH :

+
+
+ +

Follow dynamic chain, convert LB to LB of caller
+DUP s :

+
+
+ +

Duplicate top s bytes
+DUS w :

+
+
+ +

Duplicate top w bytes
+EXG w :

+
+
+ +

Exchange top w bytes
+FIL g :

+
+
+ +

File name (external 4 := g)
+GTO g :

+
+
+ +

Non-local goto, descriptor at g
+LIM :

+
+
+ +

Load 16 bit ignore mask
+LIN n :

+
+
+ +

Line number (external 0 := n)
+LNI :

+
+
+ +

Line number increment
+LOR r :

+
+
+ +

Load register (0=LB, 1=SP, 2=HP)
+LPB :

+
+
+ +

Convert local base to argument base
+MON :

+
+
+ +

Monitor call
+NOP :

+
+
+ +

No operation
+RCK w :

+
+
+ +

Range check; trap on error
+RTT :

+
+
+ +

Return from trap
+SIG :

+
+
+ +

Trap errors to proc identifier on top of stack, −2 +resets default
+SIM :

+
+
+ +

Store 16 bit ignore mask
+STR r :

+
+
+ +

Store register (0=LB, 1=SP, 2=HP)
+TRP :

+
+
+ +

Cause trap to occur (Error number on stack)

+
+
+ +

12

+ +

A. EM INTERPRETER

+
{ This  is an interpreter for EM.  It serves as  the official machine
+  definition.  This interpreter must run on a machine which supports
+  arithmetic with words and memory offsets.
+
+ Certain aspects of the definition are over specified.  In particular:
+
+   1. The representation of  an  address on the stack  need not be the
+       numerical value of the memory location.
+
+   2. The state of  the stack is not defined  after a trap has aborted
+       an instruction in the middle.  For example, it is officially un-
+       defined  whether the second  operand of an  ADD  instruction has
+       been popped  or  not  if the  first one is undefined ( -32768 or
+       unsigned 32768).
+
+   3. The memory layout is implementation dependent. Only the most
+       basic checks are performed whenever memory is accessed.
+
+   4. The representation of an integer or set on the stack is not fixed
+       in bit order.
+
+   5. The format and existence of the procedure descriptors depends on
+       the implementation.
+
+   6. The result of the compare operators  CMI etc.  are -1, 0  and  1
+       here, but other negative  and  positive values will do  and they
+       need not be the same each time.
+
+   7. The shift count for SHL, SHR, ROL and ROR must be in the range 0
+       to object size in bits - 1.  The effect of a  count  not in this
+       range is undefined.
+}
+
+ +

13

+ +

{$i256} {$d+} program +em(tables,prog,input,output);

+ +

label 8888,9999;

+ +

const t15 = 32768; { 2**15 } t15m1 = 32767; { 2**15 +-1 } t16 = 65536; { 2**16 } t16m1 = 65535; { 2**16 -1 } +t31m1 = 2147483647; { 2**31 -1 }

+ +

wsize = 2; { number of bytes in a word } asize = 2; +{ number of bytes in an address } fsize = 4; { number of +bytes in a floating point number } maxret =4; { number of +words in the return value area }

+ +

signbit = t15; { the power of two indicating the +sign bit } negoff = t16; { the next power of two } maxsint = +t15m1; { the maximum signed integer } maxuint = t16m1; { the +maximum unsigned integer } maxdbl = t31m1; { the maximum +double signed integer } maxadr = t16m1; { the maximum +address } maxoffs = t15m1; { the maximum offset from an +address } maxbitnr= 15; { the number of the highest bit +}

+ +

lineadr = 0; { address of the line number } fileadr += 4; { address of the file name } maxcode = 8191; { highest +byte in code address space } maxdata = 8191; { highest byte +in data address space }

+ +

{ format of status save area } statd = 4; { how far +is static link from lb } dynd = 2; { how far is dynamic link +from lb } reta = 0; { how far is the return address from lb +} savsize = 4; { size of save area in bytes }

+ +

{ procedure descriptor format } pdlocs = 0; { offset +for size of local variables in bytes } pdbase = asize; { +offset for the procedure base } pdsize = 4; { size of +procedure descriptor in bytes = 2*asize }

+ +

{ header words } NTEXT = 1; NDATA = 2; NPROC = 3; +ENTRY = 4; NLINE = 5; SZDATA = 6;

+ +

escape1 = 254; { escape to secondary opcodes } +escape2 = 255; { escape to tertiary opcodes } undef = +signbit; { the range of integers is -32767 to +32767 +}

+ +

{ error codes } EARRAY = 0; ERANGE = 1; ESET = 2; +EIOVFL = 3; EFOVFL = 4; EFUNFL = 5; EIDIVZ = 6; EFDIVZ = 7; +EIUND = 8; EFUND = 9; ECONV = 10; ESTACK = 16; EHEAP = 17; +EILLINS = 18; EODDZ = 19; ECASE = 20; EMEMFLT = 21; EBADPTR += 22; EBADPC = 23; EBADLAE = 24; EBADMON = 25; EBADLIN = 26; +EBADGTO = 27;

+ +

14

+ + +

{---------------------------------------------------------------------------} +{ Declarations } +{---------------------------------------------------------------------------}

+ +

type bitval= 0..1; { one bit } bitnr= 0..maxbitnr; { +bits in machine words are numbered 0 to 15 } byte= 0..255; { +memory is an array of bytes } adr= {0..maxadr} long; { the +range of addresses } word= {0..maxuint} long;{ the range of +unsigned integers } offs= -maxoffs..maxoffs; { the range of +signed offsets from addresses } size= 0..maxoffs; { the +range of sizes is the positive offsets } sword= +{-signbit..maxsint} long; { the range of signed integers } +full= {-maxuint..maxuint} long; { intermediate results need +this range } double={-maxdbl..maxdbl} long; { double +precision range } bftype= (andf,iorf,xorf); { tells which +boolean operator needed } insclass=(prim,second,tert); { +tells which opcode table is in use } +instype=(implic,explic); { does opcode have implicit or +explicit operand } iflags= (mini,short,sbit,wbit,zbit,ibit); +ifset= set of iflags;

+ + + + +

mnem = ( NON,

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

AAR, ADF, ADI, ADP, ADS, ADU,XAND, ASP, ASS, +BEQ,

+
+ +

BGE, BGT, BLE, BLM, BLS, BLT, BNE, BRA, CAI, +CAL,

+
+ +

CFF, CFI, CFU, CIF, CII, CIU, CMF, CMI, CMP, +CMS,

+
+ +

CMU, COM, CSA, CSB, CUF, CUI, CUU, DCH, DEC, +DEE,

+
+ +

DEL, DUP, DUS, DVF, DVI, DVU, EXG, FEF, FIF, +FIL,

+
+ +

GTO, INC, INE, INL, INN, IOR, LAE, LAL, LAR, +LDC,

+
+ +

LDE, LDF, LDL, LFR, LIL, LIM, LIN, LNI, LOC, +LOE,

+
+ +

LOF, LOI, LOL, LOR, LOS, LPB, LPI, LXA, LXL, +MLF,

+
+ +

MLI, MLU, MON, NGF, NGI, NOP, RCK, RET, RMI, +RMU,

+
+ +

ROL, ROR, RTT, SAR, SBF, SBI, SBS, SBU, SDE, +SDF,

+
+ +

SDL,XSET, SIG, SIL, SIM, SLI, SLU, SRI, SRU, +STE,

+
+ +

STF, STI, STL, STR, STS, TEQ, TGE, TGT, TLE, +TLT,

+
+ +

TNE, TRP, XOR, ZEQ, ZER, ZGE, ZGT, ZLE, ZLT, +ZNE,

+
+ +

ZRE, ZRF, ZRL);

+ +

dispatch = record

+
+
+ +

iflag: ifset;

+
+
+ +

instr: mnem;

+
+
+ +

case instype of

+
+
+ +

implic: (implicit:sword);

+
+
+ +

explic: (ilength:byte);

+
+ +

end;

+
+ +

var code: packed array[0..maxcode] of byte; { code +space } data: packed array[0..maxdata] of byte; { data space +} retarea: array[1..maxret ] of word; { return area } +pc,lb,sp,hp,pd: adr; { internal machine registers } i: +integer; { integer scratch variable } s,t :word; { scratch +variables } sz:size; { scratch variables } ss,st: sword; { +scratch variables } k :double; { scratch variables } j:size; +{ scratch variable used as index } a,b:adr; { scratch +variable used for addresses } dt,ds:double; { scratch +variables for double precision } rt,rs,x,y:real; { scratch +variables for real } found:boolean; { scratch } opcode: +byte; { holds the opcode during execution } iclass: +insclass; { true for escaped opcodes } dispat: +array[insclass,byte] of dispatch; retsize:size; { holds size +of last LFR } insr: mnem; { holds the instruction number } +halted: boolean; { normally false } exitstatus:word; { +parameter of MON 1 } ignmask:word; { ignore mask for traps } +uerrorproc:adr; { number of user defined error procedure } +intrap:boolean; { Set when executing trap(), to catch +recursive calls} trapval:byte; { Set to number of last trap +} header: array[1..8] of adr;

+ +

tables: text; { description of EM instructions } +prog: file of byte; { program and initialized data +}

+ + +

{---------------------------------------------------------------------------} +{ Various check routines } +{---------------------------------------------------------------------------}

+ +

{ Only the most basic checks are performed. These +routines are inherently implementation dependent. }

+ +

procedure trap(n:byte); forward;

+ +

procedure memadr(a:adr); begin if (a>maxdata) or +((a<sp) and (a>=hp)) then trap(EMEMFLT) end;

+ +

procedure wordadr(a:adr); begin memadr(a); if (a mod +wsize<>0) then trap(EBADPTR) end;

+ +

procedure chkadr(a:adr; s:size); begin memadr(a); +memadr(a+s-1); { assumption: size is ok } if s<wsize then +begin if a mod s<>0 then trap(EBADPTR) end else if a +mod wsize<>0 then trap(EBADPTR) end;

+ +

procedure newpc(a:double); begin if (a<0) or +(a>maxcode) then trap(EBADPC); pc:=a end;

+ +

procedure newsp(a:adr); begin if (a>lb) or +(a<hp) or (a mod wsize<>0) then trap(ESTACK); sp:=a +end;

+ +

procedure newlb(a:adr); begin if (a<sp) or (a mod +wsize<>0) then trap(ESTACK); lb:=a end;

+ +

procedure newhp(a:adr); begin if (a>sp) or +(a>maxdata+1) or (a mod wsize<>0) then trap(EHEAP) +else hp:=a end;

+ +

function argc(a:double):sword; begin if +(a<-signbit) or (a>maxsint) then trap(EILLINS); +argc:=a end;

+ +

function argd(a:double):double; begin if +(a<-maxdbl) or (a>maxdbl) then trap(EILLINS); argd:=a +end;

+ +

function argl(a:double):offs; begin if +(a<-maxoffs) or (a>maxoffs) then trap(EILLINS); +argl:=a end;

+ +

function argg(k:double):adr; begin if (k<0) or +(k>maxadr) then trap(EILLINS); argg:=k end;

+ +

function argf(a:double):offs; begin if +(a<-maxoffs) or (a>maxoffs) then trap(EILLINS); +argf:=a end;

+ +

function argn(a:double):word; begin if (a<0) or +(a>maxuint) then trap(EILLINS); argn:=a end;

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

function args(a:double):size; begin if (a<=0) or +(a>maxoffs)

+
+ +

then trap(EODDZ)

+
+ +

else if (a mod wsize)<>0 then trap(EODDZ); +args:=a ; end;

+
+ +

function argz(a:double):size; begin if (a<0) or +(a>maxoffs)

+
+ +

then trap(EODDZ)

+
+ +

else if (a mod wsize)<>0 then trap(EODDZ); +argz:=a ; end;

+
+ +

function argo(a:double):size; begin if (a<=0) or +(a>maxoffs)

+
+ +

then trap(EODDZ)

+
+ +

else if (a mod wsize<>0) and (wsize mod +a<>0) then trap(EODDZ); argo:=a ; end;

+
+ +

function argw(a:double):size; begin if (a<=0) or +(a>maxoffs) or (a>maxuint)

+
+ +

then trap(EODDZ)

+
+ +

else if (a mod wsize)<>0 then trap(EODDZ); +argw:=a ; end;

+
+ +

function argp(a:double):size; begin if (a<0) or +(a>=header[NPROC]) then trap(EILLINS); argp:=a +end;

+ +

function argr(a:double):word; begin if (a<0) or +(a>2) then trap(EILLINS); argr:=a end;

+ +

procedure argwf(s:double); begin if +argw(s)<>fsize then trap(EILLINS) end;

+ +

function szindex(s:double):integer; begin +s:=argw(s); if (s mod wsize <> 0) or (s>2*wsize) +then trap(EILLINS); szindex:=s div wsize end;

+ +

function locadr(l:double):adr; begin l:=argl(l); if +l<0 then locadr:=lb+l else locadr:=lb+l+savsize +end;

+ +

function signwd(w:word):sword; begin if w = undef +then trap(EIUND); if w >= signbit then signwd:=w-negoff +else signwd:=w end;

+ +

function dosign(w:word):sword; begin if w >= +signbit then dosign:=w-negoff else dosign:=w end;

+ +

function unsign(w:sword):word; begin if w<0 then +unsign:=w+negoff else unsign:=w end;

+ +

function chopw(dw:double):word; begin chopw:=dw mod +negoff end;

+ + + + + +
+ +

function fitsw(w:full;trapno:byte):word; { checks +whether value fits in signed word, returns unsigned +representation} begin if (w>maxsint) or (w<-signbit) +then begin trap(trapno); if w<0 then fitsw:=negoff- +(-w)mod negoff

+
+ +

else fitsw:=w mod negoff; end else fitsw:=unsign(w) +end;

+
+ +

function fitd(w:full):double; begin if abs(w) > +maxdbl then trap(ECONV); fitd:=w end;

+ + +

{---------------------------------------------------------------------------} +{ Memory access routines } +{---------------------------------------------------------------------------}

+ +

{ memw returns a machine word as an unsigned integer +memb returns a single byte as a positive integer: 0 <= +memb <= 255 mems(a,s) fetches an object smaller than a +word and returns a word store(a,v) stores the word v at +machine address a storea(a,v) stores the address v at +machine address a storeb(a,b) stores the byte b at machine +address a stores(a,s,v) stores the s least significant bytes +of a word at address a memi returns an offset from the +instruction space Note that the procedure descriptors are +part of instruction space. nextpc returns the next byte +addressed by pc, incrementing pc

+ +

lino changes the line number word. filna changes the +pointer to the file name.

+ +

All routines check to make sure the address is +within range and valid for the size of the object. If an +addressing error is found, a trap occurs. }

+ +

function memw(a:adr):word; var b:word; i:integer; +begin wordadr(a); b:=0; for i:=wsize-1 downto 0 do b:=256*b ++ data[a+i] ; memw:=b end;

+ +

function memd(a:adr):double; { Always signed } var +b:double; i:integer; begin wordadr(a); b:=data[a+2*wsize-1]; +if b>=128 then b:=b-256; for i:=2*wsize-2 downto 0 do +b:=256*b + data[a+i] ; memd:=b end;

+ +

function mema(a:adr):adr; var b:adr; i:integer; +begin wordadr(a); b:=0; for i:=asize-1 downto 0 do b:=256*b ++ data[a+i] ; mema:=b end;

+ +

function mems(a:adr;s:size):word; var i:integer; +b:word; begin chkadr(a,s); b:=0; for i:=1 to s do +b:=b*256+data[a+s-i]; mems:=b end;

+ +

function memb(a:adr):byte; begin memadr(a); +memb:=data[a] end;

+ +

procedure store(a:adr; x:word); var i:integer; begin +wordadr(a); for i:=0 to wsize-1 do begin data[a+i]:=x mod +256; x:=x div 256 end end;

+ +

procedure storea(a:adr; x:adr); var i:integer; begin +wordadr(a); for i:=0 to asize-1 do begin data[a+i]:=x mod +256; x:=x div 256 end end;

+ +

procedure stores(a:adr;s:size;v:word); var +i:integer; begin chkadr(a,s); for i:=0 to s-1 do begin +data[a+i]:=v mod 256; v:=v div 256 end; end;

+ +

procedure storeb(a:adr; b:byte); begin memadr(a); +data[a]:=b end;

+ +

function memi(a:adr):adr; var b:adr; i:integer; +begin if (a mod wsize<>0) or (a+asize-1>maxcode) +then trap(EBADPTR); b:=0; for i:=asize-1 downto 0 do +b:=256*b + code[a+i] ; memi:=b end;

+ +

function nextpc:byte; begin if pc>=pd then +trap(EBADPC); nextpc:=code[pc]; newpc(pc+1) end;

+ +

procedure lino(w:word); begin store(lineadr,w) +end;

+ +

procedure filna(a:adr); begin storea(fileadr,a) +end;

+ + +

{---------------------------------------------------------------------------} +{ Stack Manipulation Routines } +{---------------------------------------------------------------------------}

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

{ push puts a word on the stack pushsw takes a +signed one word integer and pushes it on the stack pop +removes a machine word from the stack and delivers it as a +word popsw removes a machine word from the stack and +delivers a signed integer pusha pushes an address on the +stack popa removes a machine word from the stack and +delivers it as an address pushd pushes a double precision +number on the stack popd removes two machine words and +returns a double precision integer pushr pushes a float +(floating point) number on the stack popr removes several +machine words and returns a float number pushx puts an +object of arbitrary size on the stack popx removes an object +of arbitrary size

+
+
+
+
+
+
+
+
+
+ +

}

+
+ +

procedure push(x:word); begin newsp(sp-wsize); +store(sp,x) end;

+ +

procedure pushsw(x:sword); begin newsp(sp-wsize); +store(sp,unsign(x)) end;

+ +

function pop:word; begin pop:=memw(sp); +newsp(sp+wsize) end;

+ +

function popsw:sword; begin popsw:=signwd(pop) +end;

+ +

procedure pusha(x:adr); begin newsp(sp-asize); +storea(sp,x) end;

+ +

function popa:adr; begin popa:=mema(sp); +newsp(sp+asize) end;

+ +

procedure pushd(y:double); begin { push double +integer onto the stack } newsp(sp-2*wsize) end;

+ +

function popd:double; begin { pop double integer +from the stack } newsp(sp+2*wsize); popd:=0 end;

+ +

procedure pushr(z:real); begin { Push a float onto +the stack } newsp(sp-fsize) end;

+ +

function popr:real; begin { pop float from the stack +} newsp(sp+fsize); popr:=0.0 end;

+ +

procedure pushx(objsize:size; a:adr); var i:integer; +begin if objsize<wsize then push(mems(a,objsize)) else +for i:=1 to objsize div wsize do +push(memw(a+objsize-wsize*i)) end;

+ +

procedure popx(objsize:size; a:adr); var i:integer; +begin if objsize<wsize then stores(a,objsize,pop) else +for i:=1 to objsize div wsize do store(a-wsize+wsize*i,pop) +end;

+ + +

{---------------------------------------------------------------------------} +{ Bit manipulation routines (extract, shift, rotate) } +{---------------------------------------------------------------------------}

+ +

procedure sleft(var w:sword); { 1 bit left shift } +begin w:= dosign(fitsw(2*w,EIOVFL)) end;

+ +

procedure suleft(var w:word); { 1 bit left shift } +begin w := chopw(2*w) end;

+ +

procedure sdleft(var d:double); { 1 bit left shift } +begin { shift two word signed integer } end;

+ +

procedure sright(var w:sword); { 1 bit right shift +with sign extension } begin if w >= 0 then w := w div 2 +else w := (w-1) div 2 end;

+ +

procedure suright(var w:word); { 1 bit right shift +without sign extension } begin w := w div 2 end;

+ +

procedure sdright(var d:double); { 1 bit right shift +} begin { shift two word signed integer } end;

+ + + + + + + + + + + + + + +
+ +

procedure rleft(var w:word); { 1 bit left rotate } +begin if w >= t15

+
+ +

then w:=(w-t15)*2 + 1

+
+ +

else w:=w*2 end;

+
+ +

procedure rright(var w:word); { 1 bit right rotate } +begin if w mod 2 = 1

+
+ +

then w:=w div 2 + t15

+
+ +

else w:=w div 2 end;

+
+ +

function sextend(w:word;s:size):word; var i:size; +begin for i:=1 to (wsize-s)*8 do rleft(w); for i:=1 to +(wsize-s)*8 do sright(w); sextend:=w; end;

+ +

function bit(b:bitnr; w:word):bitval; { return bit b +of the word w } var i:bitnr; begin for i:= 1 to b do +rright(w); bit:= w mod 2 end;

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

function bf(ty:bftype; w1,w2:word):word; { return +boolean fcn of 2 words } var i:bitnr; j:word; begin j:=0; +for i:= maxbitnr downto 0 do

+
+ +

begin j := 2*j;

+
+ +

case ty of

+
+
+ +

andf: if bit(i,w1)+bit(i,w2) = 2 then +j:=j+1;

+
+
+ +

iorf: if bit(i,w1)+bit(i,w2) > 0 then +j:=j+1;

+
+
+ +

xorf: if bit(i,w1)+bit(i,w2) = 1 then +j:=j+1

+
+ +

end

+
+ +

end; bf:=j end;

+
+ + +

{---------------------------------------------------------------------------} +{ Array indexing } +{---------------------------------------------------------------------------}

+ +

function arraycalc(c:adr):adr; { subscript +calculation } var j:full; objsize:size; a:adr; begin j:= +popsw - signwd(memw(c)); if (j<0) or (j>memw(c+wsize)) +then trap(EARRAY); objsize := argo(memw(c+wsize+wsize)); a +:= j*objsize+popa; chkadr(a,objsize); arraycalc:=a +end;

+ + +

{---------------------------------------------------------------------------} +{ Double and Real Arithmetic } +{---------------------------------------------------------------------------}

+ +

{ All routines for doubles and floats are dummy +routines, since the format of doubles and floats is not +defined in EM. }

+ +

function doadi(ds,dt:double):double; begin { add two +doubles } doadi:=0 end;

+ +

function dosbi(ds,dt:double):double; begin { +subtract two doubles } dosbi:=0 end;

+ +

function domli(ds,dt:double):double; begin { +multiply two doubles } domli:=0 end;

+ +

function dodvi(ds,dt:double):double; begin { divide +two doubles } dodvi:=0 end;

+ +

function dormi(ds,dt:double):double; begin { modulo +of two doubles } dormi:=0 end;

+ +

function dongi(ds:double):double; begin { negative +of a double } dongi:=0 end;

+ +

function doadf(x,y:real):real; begin { add two +floats } doadf:=0.0 end;

+ +

function dosbf(x,y:real):real; begin { subtract two +floats } dosbf:=0.0 end;

+ +

function domlf(x,y:real):real; begin { multiply two +floats } domlf:=0.0 end;

+ +

function dodvf(x,y:real):real; begin { divide two +floats } dodvf:=0.0 end;

+ +

function dongf(x:real):real; begin { negate a float +} dongf:=0.0 end;

+ + + + + +
+ +

procedure dofif(x,y:real;var intpart,fraction:real); +begin { dismember x*y into integer and fractional parts } +intpart:=0.0; { integer part of x*y, same sign as x*y } +fraction:=0.0;

+
+ +

{ fractional part of x*y, 0<=abs(fraction)<1 +and same sign as x*y } end;

+
+ +

procedure dofef(x:real;var mantissa:real;var +exponent:sword); begin { dismember x into mantissa and +exponent parts } mantissa:=0.0; { mantissa of x , >= 1/2 +and <1 } exponent:=0; { base 2 exponent of x } +end;

+ +

15

+ + +

{---------------------------------------------------------------------------} +{ Trap and Call } +{---------------------------------------------------------------------------}

+ +

procedure call(p:adr); { Perform the call } begin +pusha(lb);pusha(pc); newlb(sp);newsp(sp - memi(pd + pdsize*p ++ pdlocs)); newpc(memi(pd + pdsize*p+ pdbase)) end;

+ + + + + +
+ +

procedure dotrap(n:byte); var i:size; begin if +(uerrorproc=0) or intrap then begin if intrap then

+
+ +

writeln(’Recursive trap, first trap number was +’, trapval:1); writeln(’Error ’, n:1); +writeln(’With’,ord(insr):4,’ arg +’,k:1); goto 9999 end; { Deposit all interpreter +variables that need to be saved on the stack. This includes +all scratch variables that can be in use at the moment and ( +not possible in this interpreter ) the internal address of +the interpreter where the error occurred. This would make it +possible to execute an RTT instruction totally transparent +to the user program. It can, for example, occur within an +ADD instruction that both operands are undefined and that +the result overflows. Although this will generate 3 error +traps it must be possible to ignore them all. } +intrap:=true; trapval:=n; for i:=retsize div wsize downto 1 +do push(retarea[i]); push(retsize); { saved return area } +pusha(mema(fileadr)); { saved current file name pointer } +push(memw(lineadr)); { saved line number } push(n); { push +error number } a:=argp(uerrorproc); uerrorproc:=0; { reset +signal } call(a); { call the routine } intrap:=false; { +Don’t catch recursive traps anymore } goto 8888; { +reenter main loop } end;

+
+ +

procedure trap; { This routine is invoked for +overflow, and other run time errors. For non-fatal errors, +trap returns to the calling routine } begin if n>=16 then +dotrap(n) else if bit(n,ignmask)=0 then dotrap(n); +end;

+ +

procedure dortt; { The restoration of file address +and line number is not essential. The restoration of the +return save area is. } var i:size; n:word; begin newsp(lb); +lb:=maxdata+1 ; { to circumvent ESTACK for the popa + pop } +newpc(popa); newlb(popa); { So far a plain RET 0 } n:=pop; +if (n>=16) and (n<64) then goto 9999 ; lino(pop); +filna(popa); retsize:=pop; for i:=1 to retsize div wsize do +retarea[i]:=pop ; end;

+ + +

{---------------------------------------------------------------------------} +{ monitor calls } +{---------------------------------------------------------------------------}

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

procedure domon(entry:word); var index: +1..63;

+
+ +

dummy: double;

+
+ +

count,rwptr: adr;

+
+ +

token: byte;

+
+ +

i: integer; begin if (entry<=0) or (entry>63) +then entry:=63 ; index:=entry; case index of 1: begin { exit +} exitstatus:=pop; halted:=true end; 3: begin { read } +dummy:=pop; { All input is from stdin }

+
+ +

rwptr:=popa; count:=popa;

+
+ +

i:=0 ;

+
+ +

while (not eof(input)) and (i<count) do

+
+ +

begin

+
+ +

if eoln(input) then begin storeb(rwptr,10) ; +count:=i end

+
+
+
+ +

else storeb(rwptr,ord(input^)) ;

+
+ +

get(input); rwptr:=rwptr+1 ; i:=i+1 ;

+
+ +

end;

+
+ +

pusha(i); push(0) end; 4: begin { write } +dummy:=pop; { All output is to stdout }

+
+ +

rwptr:=popa; count:=popa;

+
+ +

for i:=1 to count do

+
+ +

begin token:=memb(rwptr); rwptr:=rwptr+1 ;

+
+ +

if token=10 then writeln else +write(chr(token))

+
+ +

end ;

+
+ +

pusha(count);

+
+ +

push(0) end; 54: begin { ioctl, faked } +dummy:=popa;dummy:=popa;dummy:=pop;push(0) end ; 2, 5, 6, 7, +8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, +23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, +38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, +53, 55, 56, 57, 58, 59, 60, 61, 62: begin push(22); push(22) +end; 63: { exists only for the trap } trap(EBADMON) end +end;

+
+ +

16

+ + +

{---------------------------------------------------------------------------} +{ Initialization and debugging } +{---------------------------------------------------------------------------}

+ + + + + + + + + + + +
+ +

procedure doident; { print line number and file name +} var a:adr; i,c:integer; found:boolean; begin +write(’at line ’,memw(lineadr):1,’ +’); a:=mema(fileadr); if a<>0 then begin i:=20; +found:=false; while (i<>0) and not found do begin +c:=memb(a); a:=a+1; found:=true; i:=i-1; if (c>=48) and +(c<=57) then

+
+ +

begin found:=false; +write(chr(ord(’0’)+c-48)) end; if (c>=65) and +(c<=90) then

+
+ +

begin found:=false; +write(chr(ord(’A’)+c-65)) end; if (c>=97) and +(c<=122) then

+
+ +

begin found:=false; +write(chr(ord(’a’)+c-97)) end; end; end; +writeln; end;

+
+ +

procedure initialize; { start the ball rolling } { +This is not part of the machine definition } var cset:set of +char; f:ifset; iclass:insclass; insno:byte; nops:integer; +opcode:byte; i,j,n:integer; wtemp:sword; count:integer; +repc:adr; nexta,firsta:adr; elem:byte; amount,ofst:size; +c:char;

+ +

function readb(n:integer):double; var b:byte; begin +read(prog,b); if n>1 then readb:=readb(n-1)*256+b else +readb:=b end;

+ +

function readbyte:byte; begin readbyte:=readb(1) +end;

+ +

function readword:word; begin readword:=readb(wsize) +end;

+ +

function readadr:adr; begin readadr:=readb(asize) +end;

+ + + + +

function ifind(ordinal:byte):mnem; var +loopvar:mnem;

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

found:boolean; begin ifind:=NON; loopvar:=insr; +found:=false; repeat

+
+ +

if ordinal=ord(loopvar) then

+
+ +

begin found:=true; ifind:=loopvar end;

+
+ +

if loopvar<>ZRL then loopvar:=succ(loopvar) +else loopvar:=NON; until found or (loopvar=insr) ; +end;

+ +

procedure readhdr; type hdrw=0..32767 ; { 16 bit +header words } var hdr: hdrw;

+
+ +

i: integer; begin for i:=0 to 7 do begin +hdr:=readb(2);

+
+ +

case i of

+
+ +

0: if hdr<>3757 then { 07255 }

+
+ +

begin writeln(’Not an em load file’); +halt end;

+
+ +

2: if hdr<>0 then

+
+ +

begin writeln(’Unsolved references’); +halt end;

+
+ +

3: if hdr<>3 then

+
+ +

begin writeln(’Incorrect load file +version’); halt end;

+
+ +

4: if hdr<>wsize then

+
+ +

begin writeln(’Incorrect word size’); +halt end;

+
+ +

5: if hdr<>asize then

+
+ +

begin writeln(’Incorrect pointer size’); +halt end;

+
+ +

1,6,7:;

+
+ +

end end end;

+
+ +

procedure noinit; begin writeln(’Illegal +initialization’); halt end;

+ + + + +

procedure readint(a:adr;s:size); var i:size; begin { +construct integer out of byte sequence } for i:=1 to s do { +construct the value and initialize at a }

+ + + +
+ +

begin storeb(a,readbyte); a:=a+1 end end;

+
+ +

procedure readuns(a:adr;s:size); begin { construct +unsigned out of byte sequence } readint(a,s) { identical to +readint } end;

+ + + + +

procedure readfloat(a:adr;s:size); var i:size; +b:byte; begin { construct float out of string} if +(s<>4) and (s<>8) then noinit; i:=0; repeat { +eat the bytes, construct the value and intialize at a +}

+ + + +
+ +

b:=readbyte; i:=i+1; until b=0 ; end;

+
+ +

begin halted:=false; exitstatus:=undef; +uerrorproc:=0; intrap:=false;

+ + + + +

{ initialize tables } for i:=0 to maxcode do +code[i]:=0; for i:=0 to maxdata do data[i]:=0; for +iclass:=prim to tert do for i:=0 to 255 do with +dispat[iclass][i] do

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

begin instr:=NON; iflag:=[zbit] end;

+ +

{ read instruction table file. see appendix B } { +The table read here is a simple transformation of the table +on page xx } { - instruction names were transformed to +numbers } { - the ’-’ flag was transformed to an +’i’ flag for ’w’ type instructions } +{ - the ’S’ flag was added for instructions +having signed operands } reset(tables); insr:=NON; repeat +read(tables,insno) ; cset:=[]; f:=[]; insr:=ifind(insno); if +insr=NON then begin writeln(’Incorrect table’); +halt end; repeat read(tables,c) until c<>’ +’ ; repeat cset:=cset+[c]; read(tables,c) until +c=’ ’ ; if ’m’ in cset then +f:=f+[mini]; if ’s’ in cset then f:=f+[short]; +if ’-’ in cset then f:=f+[zbit]; if +’i’ in cset then f:=f+[ibit]; if ’S’ +in cset then f:=f+[sbit]; if ’w’ in cset then +f:=f+[wbit]; if (mini in f) or (short in f) then +read(tables,nops) else nops:=1 ; readln(tables,opcode); if +(’4’ in cset) or (’8’ in cset) then +begin iclass:=tert end else if ’e’ in cset then +begin iclass:=second end else iclass:=prim; for i:=0 to +nops-1 do begin with dispat[iclass,opcode+i] do +begin

+
+ +

iflag:=f; instr:=insr;

+
+ +

if ’2’ in cset then ilength:=2

+
+ +

else if ’u’ in cset then +ilength:=2

+
+ +

else if ’4’ in cset then +ilength:=4

+
+ +

else if ’8’ in cset then +ilength:=8

+
+ +

else if (mini in f) or (short in f) then

+
+ +

begin

+
+ +

if ’N’ in cset then wtemp:=-1-i else +wtemp:=i ;

+
+ +

if ’o’ in cset then wtemp:=wtemp+1 +;

+
+ +

if short in f then wtemp:=wtemp*256 ;

+
+ +

implicit:=wtemp

+
+ +

end end end until eof(tables);

+ +

{ read in program text, data and procedure +descriptors } reset(prog); readhdr; { verify first header } +for i:=1 to 8 do header[i]:=readadr; { read second header } +hp:=maxdata+1; sp:=maxdata+1; lino(0); { read program text } +if header[NTEXT]+header[NPROC]*pdsize>maxcode then begin +writeln(’Text size too large’); halt end; if +header[SZDATA]>maxdata then begin writeln(’Data +size too large’); halt end; for i:=0 to +header[NTEXT]-1 do code[i]:=readbyte; { read data blocks } +nexta:=0; for i:=1 to header[NDATA] do begin n:=readbyte; if +n<>0 then

+
+ +

begin

+
+ +

elem:=readbyte; firsta:=nexta;

+
+ +

case n of

+
+ +

1: { uninitialized words }

+
+ +

for j:=1 to elem do

+
+ +

begin store(nexta,undef); nexta:=nexta+wsize +end;

+
+ +

2: { initialized bytes }

+
+ +

for j:=1 to elem do

+
+ +

begin storeb(nexta,readbyte); nexta:=nexta+1 +end;

+
+ +

3: { initialized words }

+
+ +

for j:=1 to elem do

+
+ +

begin store(nexta,readword); nexta:=nexta+wsize +end;

+
+ +

4,5: { instruction and data pointers }

+
+ +

for j:=1 to elem do

+
+ +

begin storea(nexta,readadr); nexta:=nexta+asize +end;

+
+ +

6: { signed integers }

+
+ +

begin readint(nexta,elem); nexta:=nexta+elem +end;

+
+ +

7: { unsigned integers }

+
+ +

begin readuns(nexta,elem); nexta:=nexta+elem +end;

+
+ +

8: { floating point numbers }

+
+ +

begin readfloat(nexta,elem); nexta:=nexta+elem +end;

+
+ +

end

+
+ +

end else

+
+ +

begin

+
+ +

repc:=readadr; amount:=nexta-firsta;

+
+ +

for count:=1 to repc do

+
+ +

begin

+
+ +

for ofst:=0 to amount-1 do +data[nexta+ofst]:=data[firsta+ofst];

+
+ +

nexta:=nexta+amount;

+
+ +

end

+
+ +

end end; if header[SZDATA]<>nexta then +writeln(’Data initialization error’); hp:=nexta; +{ read descriptor table } pd:=header[NTEXT]; for i:=1 to +header[NPROC]*pdsize do code[pd+i-1]:=readbyte; { call the +entry point routine } ignmask:=0;

+
+ +

{ catch all traps, higher numbered traps cannot be +ignored} retsize:=0; lb:=maxdata; { illegal dynamic link } +pc:=maxcode; { illegal return address } push(0); a:=sp; { No +environment } push(0); b:=sp; { No args } pusha(a); { envp } +pusha(b); { argv } push(0); { argc } +call(argp(header[ENTRY])); end;

+
+ +

17

+ + +

{---------------------------------------------------------------------------} +{ MAIN LOOP OF THE INTERPRETER } +{---------------------------------------------------------------------------} +{ It should be noted that the interpreter (microprogram) for +an EM machine can be written in two fundamentally different +ways: (1) the instruction operands are fetched in the main +loop, or (2) the in- struction operands are fetched after +the 256 way branch, by the exe- cution routines themselves. +In this interpreter, method (1) is used to simplify the +description of execution routines. The dispatch table dispat +is used to determine how the operand is encoded. There are 4 +possibilities:

+ +

0. There is no operand 1. The operand and +instruction are together in 1 byte (mini) 2. The operand is +one byte long and follows the opcode byte(s) 3. The operand +is two bytes long and follows the opcode byte(s) 4. The +operand is four bytes long and follows the opcode +byte(s)

+ +

In this interpreter, the main loop determines the +operand type, fetches it, and leaves it in the global +variable k for the execution routines to use. Consequently, +instructions such as LOL, which use three different formats, +need only be described once in the body of the interpreter. +However, for a production interpreter, or a hardware EM +machine, it is probably better to use method (2), i.e. to +let the execution routines themselves fetch their own +operands. The reason for this is that each opcode uniquely +determines the operand format, so no table lookup in the +dispatch table is needed. The whole table is not needed. +Method (2) therefore executes much faster. However, separate +execution routines will be needed for LOL with a one byte +offset, and LOL with a two byte offset. It is to avoid this +additional clutter that method (1) is used here. In a +produc- tion interpreter, it is envisioned that the main +loop will fetch the next instruction byte, and use it as an +index into a 256 word table to find the address of the +interpreter routine to jump to. The routine jumped to will +begin by fetching its operand, if any, without any table +lookup, since it knows which format to expect. After doing +the work, it returns to the main loop by jumping in- +directly to a register that contains the address of the main +loop. A slight variation on this idea is to have the +register contain the address of the branch table, rather +than the address of the main loop. Another issue is whether +the execution routines for LOL 0, LOL 2, LOL 4, etc. should +all be have distinct execution routines. Doing so provides +for the maximum speed, since the operand is implicit in the +routine itself. The disadvantage is that many nearly +identical execution routines will then be needed. Another +way of doing it is to keep the instruction byte fetched from +memory (LOL 0, LOL 2, LOL 4, etc.) in some register, and +have all the LOL mini format instruc- tions branch to a +common routine. This routine can then determine the operand +by subtracting the code for LOL 0 from the register, leaving +the true operand in the register (as a word quantity of +course). This method makes the interpreter smaller, but is a +bit slower.

+ +

18

+ +

To make this important point a little clearer, +consider how a production interpreter for the PDP-11 might +appear. Let us assume the following opcodes have been +assigned:

+ +

31: LOL -2 (2 bytes, i.e. next word) 32: LOL -4 33: +LOL -6 34: LOL b (format with a one byte offset) 35: LOL w +(format with a one word, i.e. two byte offset)

+ +

Further assume that each of the 5 opcodes will have +its own execution routine, i.e. we are making a tradeoff in +favor of fast execution and a slightly larger interpreter. +Register r5 is the em program counter. Register r4 is the em +LB register Register r3 is the em SP register (the stack +grows toward low core) Register r2 contains the interpreter +address of the main loop

+ +

The main loop looks like this:

+ +

movb (r5)+,r0 /fetch the opcode into r0 and +increment r5 asl r0 /shift r0 left 1 bit. Now: +-256<=r0<=+254 jmp *table(r0) /jump to execution +routine

+ +

Notice that no operand fetching has been done. The +execution routines for the 5 sample instructions given above +might be as follows:

+ + + + +

lol2: mov -2(r4),-(sp) /push local -2 onto +stack

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

jmp (r2) /go back to main loop lol4: mov +-4(r4),-(sp) /push local -4 onto stack

+
+ +

jmp (r2) /go back to main loop lol6: mov +-6(r4),-(sp) /push local -6 onto stack

+
+ +

jmp (r2) /go back to main loop lolb: mov $177400,r0 +/prepare to fetch the 1 byte operand

+
+ +

bisb (r5)+,r0 /operand is now in r0

+
+ +

asl r0 /r0 is now offset from LB in bytes, not +words

+
+ +

add r4,r0 /r0 is now address of the needed +local

+
+ +

mov (r0),-(sp) /push the local onto the +stack

+
+ +

jmp (r2) lolw: clr r0 /prepare to fetch the 2 byte +operand

+
+ +

bisb (r5)+,r0 /fetch high order byte first +!!!

+
+ +

swab r0 /insert high order byte in place

+
+ +

bisb (r5)+,r0 /insert low order byte in +place

+
+ +

asl r0 /convert offset to bytes, from words

+
+ +

add r4,r0 /r0 is now address of needed +local

+
+ +

mov (r0),-(sp) /stack the local

+
+ +

jmp (r2) /done

+
+ +

The important thing to notice is where and how the +operand fetch occurred: lol2, lol4, and lol6, (the +mini’s) have implicit operands lolb knew it had to +fetch one byte, and did so without any table lookup lolw +knew it had to fetch a word, and did so, high order byte +first }

+ +

19

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

{---------------------------------------------------------------------------} +{ Routines for the individual instructions } +{---------------------------------------------------------------------------} +procedure loadops; var j:integer; begin case insr of { LOAD +GROUP } LDC: pushd(argd(k)); LOC: pushsw(argc(k)); LOL: +push(memw(locadr(k))); LOE: push(memw(argg(k))); LIL: +push(memw(mema(locadr(k)))); LOF: push(memw(popa+argf(k))); +LAL: pusha(locadr(k)); LAE: pusha(argg(k)); LXL: begin +a:=lb; for j:=1 to argn(k) do a:=mema(a+savsize); pusha(a) +end; LXA: begin a:=lb;

+
+ +

for j:=1 to argn(k) do a:= mema(a+savsize);

+
+ +

pusha(a+savsize)

+
+ +

end; LOI: pushx(argo(k),popa); LOS: begin +k:=argw(k); if k<>wsize then trap(EILLINS);

+
+ +

k:=pop; pushx(argo(k),popa)

+
+ +

end; LDL: begin a:=locadr(k); push(memw(a+wsize)); +push(memw(a)) end; LDE: begin k:=argg(k); +push(memw(k+wsize)); push(memw(k)) end; LDF: begin +k:=argf(k);

+
+ +

a:=popa; push(memw(a+k+wsize)); +push(memw(a+k))

+
+ +

end; LPI: push(argp(k)) end end;

+
+ +

procedure storeops; begin case insr of { STORE GROUP +} STL: store(locadr(k),pop); STE: store(argg(k),pop); SIL: +store(mema(locadr(k)),pop); STF: begin a:=popa; +store(a+argf(k),pop) end; STI: popx(argo(k),popa); STS: +begin k:=argw(k); if k<>wsize then +trap(EILLINS);

+
+ +

k:=popa; popx(argo(k),popa)

+
+ +

end; SDL: begin a:=locadr(k); store(a,pop); +store(a+wsize,pop) end; SDE: begin k:=argg(k); store(k,pop); +store(k+wsize,pop) end; SDF: begin k:=argf(k); a:=popa; +store(a+k,pop); store(a+k+wsize,pop) end end end;

+
+ +

procedure intarith; var i:integer; begin case insr +of { SIGNED INTEGER ARITHMETIC } ADI: case szindex(argw(k)) +of

+
+ +

1: begin st:=popsw; ss:=popsw; +push(fitsw(ss+st,EIOVFL)) end;

+
+ +

2: begin dt:=popd; ds:=popd; pushd(doadi(ds,dt)) +end;

+
+ +

end ; SBI: case szindex(argw(k)) of

+
+ +

1: begin st:=popsw; ss:= popsw; +push(fitsw(ss-st,EIOVFL)) end;

+
+ +

2: begin dt:=popd; ds:=popd; pushd(dosbi(ds,dt)) +end;

+
+ +

end ; MLI: case szindex(argw(k)) of

+
+ +

1: begin st:=popsw; ss:= popsw; +push(fitsw(ss*st,EIOVFL)) end;

+
+ +

2: begin dt:=popd; ds:=popd; pushd(domli(ds,dt)) +end;

+
+ +

end ; DVI: case szindex(argw(k)) of

+
+ +

1: begin st:= popsw; ss:= popsw;

+
+ +

if st=0 then trap(EIDIVZ) else pushsw(ss div +st)

+
+ +

end;

+
+ +

2: begin dt:=popd; ds:=popd; pushd(dodvi(ds,dt)) +end;

+
+ +

end; RMI: case szindex(argw(k)) of

+
+ +

1: begin st:= popsw; ss:=popsw;

+
+ +

if st=0 then trap(EIDIVZ) else pushsw(ss - (ss div +st)*st)

+
+ +

end;

+
+ +

2: begin dt:=popd; ds:=popd; pushd(dormi(ds,dt)) +end

+
+ +

end; NGI: case szindex(argw(k)) of

+
+ +

1: begin st:=popsw; pushsw(-st) end;

+
+ +

2: begin ds:=popd; pushd(dongi(ds)) end

+
+ +

end; SLI: begin t:=pop;

+
+ +

case szindex(argw(k)) of

+
+ +

1: begin ss:=popsw;

+
+
+ +

for i:= 1 to t do sleft(ss); pushsw(ss)

+
+ +

end

+
+ +

end

+
+ +

end; SRI: begin t:=pop;

+
+ +

case szindex(argw(k)) of

+
+ +

1: begin ss:=popsw;

+
+
+ +

for i:= 1 to t do sright(ss); pushsw(ss)

+
+ +

end;

+
+ +

2: begin ds:=popd;

+
+
+ +

for i:= 1 to t do sdright(ss); pushd(ss)

+
+ +

end

+
+ +

end

+
+ +

end end end;

+
+ +

procedure unsarith; var i:integer; begin case insr +of { UNSIGNED INTEGER ARITHMETIC } ADU: case +szindex(argw(k)) of

+
+ +

1: begin t:=pop; s:= pop; push(chopw(s+t)) +end;

+
+ +

2: trap(EILLINS);

+
+ +

end ; SBU: case szindex(argw(k)) of

+
+ +

1: begin t:=pop; s:= pop; push(chopw(s-t)) +end;

+
+ +

2: trap(EILLINS);

+
+ +

end ; MLU: case szindex(argw(k)) of

+
+ +

1: begin t:=pop; s:= pop; push(chopw(s*t)) +end;

+
+ +

2: trap(EILLINS);

+
+ +

end ; DVU: case szindex(argw(k)) of

+
+ +

1: begin t:= pop; s:= pop;

+
+ +

if t=0 then trap(EIDIVZ) else push(s div t)

+
+ +

end;

+
+ +

2: trap(EILLINS);

+
+ +

end; RMU: case szindex(argw(k)) of

+
+ +

1: begin t:= pop; s:=pop;

+
+ +

if t=0 then trap(EIDIVZ) else push(s - (s div +t)*t)

+
+ +

end;

+
+ +

2: trap(EILLINS);

+
+ +

end; SLU: case szindex(argw(k)) of

+
+ +

1: begin t:=pop; s:=pop;

+
+ +

for i:= 1 to t do suleft(s); push(s)

+
+ +

end;

+
+ +

2: trap(EILLINS);

+
+ +

end; SRU: case szindex(argw(k)) of

+
+ +

1: begin t:=pop; s:=pop;

+
+ +

for i:= 1 to t do suright(s); push(s)

+
+ +

end;

+
+ +

2: trap(EILLINS);

+
+ +

end end end;

+
+ +

procedure fltarith; begin case insr of { FLOATING +POINT ARITHMETIC } ADF: begin argwf(k); rt:=popr; rs:=popr; +pushr(doadf(rs,rt)) end; SBF: begin argwf(k); rt:=popr; +rs:=popr; pushr(dosbf(rs,rt)) end; MLF: begin argwf(k); +rt:=popr; rs:=popr; pushr(domlf(rs,rt)) end; DVF: begin +argwf(k); rt:=popr; rs:=popr; pushr(dodvf(rs,rt)) end; NGF: +begin argwf(k); rt:=popr; pushr(dongf(rt)) end; FIF: begin +argwf(k); rt:=popr; rs:=popr;

+
+ +

dofif(rt,rs,x,y); pushr(y); pushr(x)

+
+ +

end; FEF: begin argwf(k); rt:=popr; dofef(rt,x,ss); +pushr(x); pushsw(ss) end end end;

+
+ +

procedure ptrarith; begin case insr of { POINTER +ARITHMETIC } ADP: pusha(popa+argf(k)); ADS: case +szindex(argw(k)) of

+
+ +

1: begin st:=popsw; pusha(popa+st) end;

+
+ +

2: begin dt:=popd; pusha(popa+dt) end;

+
+ +

end; SBS: begin

+
+ +

a:=popa; b:=popa;

+
+ +

case szindex(argw(k)) of

+
+ +

1: push(fitsw(b-a,EIOVFL));

+
+ +

2: pushd(b-a)

+
+ +

end

+
+ +

end end end;

+
+ +

procedure incops; var j:integer; begin case insr of +{ INCREMENT/DECREMENT/ZERO } INC: +push(fitsw(popsw+1,EIOVFL)); INL: begin a:=locadr(k); +store(a,fitsw(signwd(memw(a))+1,EIOVFL)) end; INE: begin +a:=argg(k); store(a,fitsw(signwd(memw(a))+1,EIOVFL)) end; +DEC: push(fitsw(popsw-1,EIOVFL)); DEL: begin a:=locadr(k); +store(a,fitsw(signwd(memw(a))-1,EIOVFL)) end; DEE: begin +a:=argg(k); store(a,fitsw(signwd(memw(a))-1,EIOVFL)) end; +ZRL: store(locadr(k),0); ZRE: store(argg(k),0); ZER: for +j:=1 to argw(k) div wsize do push(0); ZRF: pushr(0); end +end;

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

procedure convops; begin case insr of { CONVERT +GROUP } CII: begin s:=pop; t:=pop;

+
+ +

if t<wsize then begin push(sextend(pop,t)); +t:=wsize end;

+
+ +

case szindex(argw(t)) of

+
+ +

1: if szindex(argw(s))=2 then pushd(popsw);

+
+ +

2: if szindex(argw(s))=1 then +push(fitsw(popd,ECONV))

+
+ +

end

+
+ +

end; CIU: case szindex(argw(pop)) of

+
+ +

1: if szindex(argw(pop))=2 then push(unsign(popd mod +negoff));

+
+ +

2: trap(EILLINS);

+
+ +

end; CIF: begin argwf(pop);

+
+ +

case szindex(argw(pop)) of 1:pushr(popsw); +2:pushr(popd) end

+
+ +

end; CUI: case szindex(argw(pop)) of

+
+ +

1: case szindex(argw(pop)) of

+
+ +

1: begin s:=pop; if s>maxsint then trap(ECONV); +push(s) end;

+
+ +

2: trap(EILLINS);

+
+ +

end;

+
+ +

2: case szindex(argw(pop)) of

+
+ +

1: pushd(pop);

+
+ +

2: trap(EILLINS);

+
+ +

end;

+
+ +

end; CUU: case szindex(argw(pop)) of

+
+ +

1: if szindex(argw(pop))=2 then +trap(EILLINS);

+
+ +

2: trap(EILLINS);

+
+ +

end; CUF: begin argwf(pop);

+
+ +

if szindex(argw(pop))=1 then pushr(pop) else +trap(EILLINS)

+
+ +

end; CFI: begin sz:=argw(pop); argwf(pop); +rt:=popr;

+
+ +

case szindex(sz) of

+
+ +

1: push(fitsw(trunc(rt),ECONV));

+
+ +

2: pushd(fitd(trunc(rt)));

+
+ +

end

+
+ +

end; CFU: begin sz:=argw(pop); argwf(pop); +rt:=popr;

+
+ +

case szindex(sz) of

+
+ +

1: push( chopw(trunc(abs(rt)-0.5)) );

+
+ +

2: trap(EILLINS);

+
+ +

end

+
+ +

end; CFF: begin argwf(pop); argwf(pop) end end +end;

+
+ +

procedure logops; var i,j:integer; begin case insr +of { LOGICAL GROUP } XAND:

+
+ +

begin k:=argw(k);

+
+ +

for j:= 1 to k div wsize do

+
+ +

begin a:=sp+k; t:=pop; store(a,bf(andf,memw(a),t)) +end;

+
+ +

end; IOR:

+
+ +

begin k:=argw(k);

+
+ +

for j:= 1 to k div wsize do

+
+ +

begin a:=sp+k; t:=pop; store(a,bf(iorf,memw(a),t)) +end;

+
+ +

end; XOR:

+
+ +

begin k:=argw(k);

+
+ +

for j:= 1 to k div wsize do

+
+ +

begin a:=sp+k; t:=pop; store(a,bf(xorf,memw(a),t)) +end;

+
+ +

end; COM:

+
+ +

begin k:=argw(k);

+
+ +

for j:= 1 to k div wsize do

+
+ +

begin

+
+ +

store(sp+k-wsize*j, bf(xorf,memw(sp+k-wsize*j), +negoff-1))

+
+ +

end

+
+ +

end; ROL: begin k:=argw(k); if k<>wsize then +trap(EILLINS);

+
+ +

t:=pop; s:=pop; for i:= 1 to t do rleft(s); +push(s)

+
+ +

end; ROR: begin k:=argw(k); if k<>wsize then +trap(EILLINS);

+
+ +

t:=pop; s:=pop; for i:= 1 to t do rright(s); +push(s)

+
+ +

end end end;

+
+ +

procedure setops; var i,j:integer; begin case insr +of { SET GROUP } INN:

+
+ +

begin k:=argw(k);

+
+ +

t:=pop;

+
+ +

i:= t mod 8; t:= t div 8;

+
+ +

if t>=k then

+
+ +

begin trap(ESET); s:=0 end

+
+ +

else

+
+ +

begin s:=memb(sp+t) end;

+
+ +

newsp(sp+k); push(bit(i,s));

+
+ +

end; XSET:

+
+ +

begin k:=argw(k);

+
+ +

t:=pop;

+
+ +

i:= t mod 8; t:= t div 8;

+
+ +

for j:= 1 to k div wsize do push(0);

+
+ +

if t>=k then

+
+ +

trap(ESET)

+
+ +

else

+
+ +

begin s:=1; for j:= 1 to i do rleft(s); +storeb(sp+t,s) end

+
+ +

end end end;

+
+ +

procedure arrops; begin case insr of { ARRAY GROUP } +LAR:

+
+ +

begin k:=argw(k); if k<>wsize then +trap(EILLINS); a:=popa;

+
+ +

pushx(argo(memw(a+2*k)),arraycalc(a))

+
+ +

end; SAR:

+
+ +

begin k:=argw(k); if k<>wsize then +trap(EILLINS); a:=popa;

+
+ +

popx(argo(memw(a+2*k)),arraycalc(a))

+
+ +

end; AAR:

+
+ +

begin k:=argw(k); if k<>wsize then +trap(EILLINS); a:=popa;

+
+ +

push(arraycalc(a))

+
+ +

end end end;

+
+ +

procedure cmpops; begin case insr of { COMPARE GROUP +} CMI: case szindex(argw(k)) of

+
+ +

1: begin st:=popsw; ss:=popsw;

+
+ +

if ss<st then pushsw(-1) else if ss=st then +push(0) else push(1)

+
+ +

end;

+
+ +

2: begin dt:=popd; ds:=popd;

+
+ +

if ds<dt then pushsw(-1) else if ds=dt then +push(0) else push(1)

+
+ +

end;

+
+ +

end; CMU: case szindex(argw(k)) of

+
+ +

1: begin t:=pop; s:=pop;

+
+ +

if s<t then pushsw(-1) else if s=t then push(0) +else push(1)

+
+ +

end;

+
+ +

2: trap(EILLINS);

+
+ +

end; CMP: begin a:=popa; b:=popa;

+
+ +

if b<a then pushsw(-1) else if b=a then push(0) +else push(1)

+
+ +

end; CMF: begin argwf(k); rt:=popr; +rs:=popr;

+
+ +

if rs<rt then pushsw(-1) else if rs=rt then +push(0) else push(1)

+
+ +

end; CMS: begin k:=argw(k);

+
+ +

t:= 0; j:= 0;

+
+ +

while (j < k) and (t=0) do

+
+ +

begin if memw(sp+j) <> memw(sp+k+j) then +t:=1;

+
+ +

j:=j+wsize

+
+ +

end;

+
+ +

newsp(sp+wsize*k); push(t);

+
+ +

end;

+
+ +

TLT: if popsw < 0 then push(1) else push(0); TLE: +if popsw <= 0 then push(1) else push(0); TEQ: if pop = 0 +then push(1) else push(0); TNE: if pop <> 0 then +push(1) else push(0); TGE: if popsw >= 0 then push(1) +else push(0); TGT: if popsw > 0 then push(1) else +push(0); end end;

+ +

procedure branchops; begin case insr of { BRANCH +GROUP } BRA: newpc(pc+k);

+ +

BLT: begin st:=popsw; if popsw < st then +newpc(pc+k) end; BLE: begin st:=popsw; if popsw <= st +then newpc(pc+k) end; BEQ: begin t :=pop ; if pop = t then +newpc(pc+k) end; BNE: begin t :=pop ; if pop <> t then +newpc(pc+k) end; BGE: begin st:=popsw; if popsw >= st +then newpc(pc+k) end; BGT: begin st:=popsw; if popsw > st +then newpc(pc+k) end;

+ +

ZLT: if popsw < 0 then newpc(pc+k); ZLE: if popsw +<= 0 then newpc(pc+k); ZEQ: if pop = 0 then newpc(pc+k); +ZNE: if pop <> 0 then newpc(pc+k); ZGE: if popsw >= +0 then newpc(pc+k); ZGT: if popsw > 0 then newpc(pc+k) +end end;

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

procedure callops; var j:integer; begin case insr of +{ PROCEDURE CALL GROUP } CAL: call(argp(k)); CAI: begin +call(argp(popa)) end; RET: begin k:=argz(k); if k div +wsize>maxret then trap(EILLINS);

+
+ +

for j:= 1 to k div wsize do retarea[j]:=pop; +retsize:=k;

+
+ +

newsp(lb); lb:=maxdata+1; { To circumvent stack +overflow error }

+
+ +

newpc(popa);

+
+ +

if pc=maxcode then

+
+ +

begin

+
+ +

halted:=true;

+
+ +

if retsize=wsize then +exitstatus:=retarea[1]

+
+ +

else exitstatus:=undef

+
+ +

end

+
+ +

else

+
+ +

newlb(popa);

+
+ +

end; LFR: begin k:=args(k); if k<>retsize then +trap(EILLINS);

+
+ +

for j:=k div wsize downto 1 do +push(retarea[j]);

+
+ +

end end end;

+
+ +

procedure miscops; var i,j:integer; begin case insr +of { MISCELLANEOUS GROUP } ASP,ASS:

+
+ +

begin if insr=ASS then

+
+ +

begin k:=argw(k); if k<>wsize then +trap(EILLINS); k:=popsw end;

+
+ +

k:=argf(k);

+
+ +

if k<0

+
+ +

then for j:= 1 to -k div wsize do +push(undef)

+
+ +

else newsp(sp+k);

+
+ +

end; BLM,BLS:

+
+ +

begin if insr=BLS then

+
+ +

begin k:=argw(k); if k<>wsize then +trap(EILLINS); k:=pop end;

+
+ +

k:=argz(k);

+
+ +

b:=popa; a:=popa;

+
+ +

for j := 1 to k div wsize do

+
+ + +

store(b-wsize+wsize*j,memw(a-wsize+wsize*j))

+
+ +

end; CSA: begin k:=argw(k); if k<>wsize then +trap(EILLINS);

+
+ +

a:=popa;

+
+ +

st:= popsw - signwd(memw(a+asize));

+
+ +

if (st>=0) and (st<=memw(a+wsize+asize)) +then

+
+ +

b:=mema(a+2*wsize+asize+asize*st) else +b:=mema(a);

+
+ +

if b=0 then trap(ECASE) else newpc(b)

+
+ +

end; CSB: begin k:=argw(k); if k<>wsize then +trap(EILLINS); a:=popa;

+
+ +

t:=pop; i:=1; found:=false;

+
+ +

while (i<=memw(a+asize)) and not found +do

+
+ +

if t=memw(a+(asize+wsize)*i) then found:=true else +i:=i+1;

+
+ +

if found then b:=memw(a+(asize+wsize)*i+wsize) else +b:=memw(a);

+
+ +

if b=0 then trap(ECASE) else newpc(b);

+
+ +

end; DCH: begin pusha(mema(popa+dynd)) end; +DUP,DUS:

+
+ +

begin if insr=DUS then

+
+ +

begin k:=argw(k); if k<>wsize then +trap(EILLINS); k:=pop end;

+
+ +

k:=args(k);

+
+ +

for i:=1 to k div wsize do +push(memw(sp+k-wsize));

+
+ +

end; EXG: begin

+
+ +

k:=argw(k);

+
+ +

for i:=1 to k div wsize do +push(memw(sp+k-wsize));

+
+ +

for i:=0 to k div wsize - 1 do

+
+ +

store(sp+k+i*wsize,memw(sp+k+k+i*wsize));

+
+ +

for i:=1 to k div wsize do

+
+ +

begin t:=pop ; store(sp+k+k-wsize,t) end;

+
+ +

end; FIL: filna(argg(k)); GTO: begin +k:=argg(k);

+
+ +

newlb(mema(k+2*asize)); newsp(mema(k+asize)); +newpc(mema(k))

+
+ +

end; LIM: push(ignmask); LIN: lino(argn(k)); LNI: +lino(memw(0)+1); LOR: begin i:=argr(k);

+
+ +

case i of 0:pusha(lb); 1:pusha(sp); 2:pusha(hp) +end;

+
+ +

end; LPB: pusha(popa+statd); MON: domon(pop); NOP: +writeln(’NOP at line ’,memw(0):5) ; RCK: begin +a:=popa;

+
+ +

case szindex(argw(k)) of

+
+ +

1: if (signwd(memw(sp))<signwd(memw(a))) +or

+
+
+ +

(signwd(memw(sp))>signwd(memw(a+wsize))) then +trap(ERANGE);

+
+ +

2: if (memd(sp)<memd(a)) or

+
+
+ +

(memd(sp)>memd(a+2*wsize)) then +trap(ERANGE);

+
+ +

end

+
+ +

end; RTT: dortt; SIG: begin a:=popa; +pusha(uerrorproc); uerrorproc:=a end; SIM: ignmask:=pop; +STR: begin i:=argr(k);

+
+ +

case i of 0: newlb(popa); 1: newsp(popa); 2: +newhp(popa) end;

+
+ +

end; TRP: trap(pop) end end;

+
+ +

20

+ + +

{---------------------------------------------------------------------------} +{ Main Loop } +{---------------------------------------------------------------------------}

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

begin initialize; 8888: repeat opcode := nextpc; { +fetch the first byte of the instruction } if opcode=escape1 +then iclass:=second else if opcode=escape2 then iclass:=tert +else iclass:=prim; if iclass<>prim then opcode := +nextpc; with dispat[iclass][opcode] do begin +insr:=instr;

+
+ +

if not (zbit in iflag) then

+
+ +

if ibit in iflag then k:=pop else

+
+ +

begin

+
+ +

if mini in iflag then k:=implicit else

+
+
+ +

begin

+
+
+ +

if short in iflag then k:=implicit+nextpc +else

+
+
+ +

begin k:=nextpc;

+
+
+ +

if (sbit in iflag) and (k>=128) then +k:=k-256;

+
+
+ +

for i:=2 to ilength do k:=256*k + nextpc

+
+
+ +

end

+
+
+ +

end;

+
+ +

if wbit in iflag then k:=k*wsize;

+
+ +

end end; case insr of

+
+ +

NON: trap(EILLINS);

+ +

{ LOAD GROUP } +LDC,LOC,LOL,LOE,LIL,LOF,LAL,LAE,LXL,LXA,LOI,LOS,LDL,LDE,LDF,LPI: +loadops;

+ +

{ STORE GROUP } STL,STE,SIL,STF,STI,STS,SDL,SDE,SDF: +storeops;

+ +

{ SIGNED INTEGER ARITHMETIC } +ADI,SBI,MLI,DVI,RMI,NGI,SLI,SRI: intarith;

+ +

{ UNSIGNED INTEGER ARITHMETIC } +ADU,SBU,MLU,DVU,RMU,SLU,SRU: unsarith;

+ +

{ FLOATING POINT ARITHMETIC } +ADF,SBF,MLF,DVF,NGF,FIF,FEF: fltarith;

+ +

{ POINTER ARITHMETIC } ADP,ADS,SBS: +ptrarith;

+ +

{ INCREMENT/DECREMENT/ZERO } +INC,INL,INE,DEC,DEL,DEE,ZRL,ZRE,ZER,ZRF: incops;

+ +

{ CONVERT GROUP } +CII,CIU,CIF,CUI,CUU,CUF,CFI,CFU,CFF: convops;

+ +

{ LOGICAL GROUP } XAND,IOR,XOR,COM,ROL,ROR: +logops;

+ +

{ SET GROUP } INN,XSET: setops;

+ +

{ ARRAY GROUP } LAR,SAR,AAR: arrops;

+ +

{ COMPARE GROUP } CMI,CMU,CMP,CMF,CMS, +TLT,TLE,TEQ,TNE,TGE,TGT: cmpops;

+ +

{ BRANCH GROUP } BRA, BLT,BLE,BEQ,BNE,BGE,BGT, +ZLT,ZLE,ZEQ,ZNE,ZGE,ZGT: branchops;

+ +

{ PROCEDURE CALL GROUP } CAL,CAI,RET,LFR: +callops;

+ +

{ MISCELLANEOUS GROUP } +ASP,ASS,BLM,BLS,CSA,CSB,DCH,DUP,DUS,EXG,FIL,GTO,LIM, +LIN,LNI,LOR,LPB,MON,NOP,RCK,RTT,SIG,SIM,STR,TRP: +miscops;

+ + + + +

end; { end of case statement } if not ( (insr=RET) +or (insr=ASP) or (insr=BRA) or (insr=GTO) ) then

+ + + +
+ +

retsize:=0 ; until halted; 9999: writeln(’halt +with exit status: ’,exitstatus:1); doident; +end.

+
+ +

21

+ +

B. EM CODE TABLES

+ +

The following table is used by the assembler for EM +machine language. It specifies the opcodes used for each +instruction and how arguments are mapped to machine language +arguments. The table is presented in three columns, each +line in each column contains three or four fields. Each line +describes a range of interpreter opcodes by specifying for +which instruction the range is used, the type of the opcodes +(mini, shortie, etc..) and range for the instruction +argument.

+ +

The first field on each line gives the EM instruction +mnemonic, the second field gives some flags. If the opcodes +are minis or shorties the third field specifies how many +minis/shorties are used. The last field gives the number of +the (first) interpreter opcode.

+ +

Flags :

+ + + + + +
+

Opcode type, only one of the following may be +specified.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

+
+ +

opcode without argument

+
+
+ +

m

+
+ +

mini

+
+
+ +

s

+
+ +

shortie

+
+
+ +

2

+
+ +

opcode with 2-byte signed argument

+
+
+ +

4

+
+ +

opcode with 4-byte signed argument

+
+
+ +

8

+
+ +

opcode with 8-byte signed argument

+
+
+ +

u

+
+ +

opcode with 2-byte unsigned argument

+
+
+ + + + + +
+

Secondary (escaped) opcodes.

+
+ + + + + + + + +
+ +

e

+
+ +

The opcode thus marked is in the secondary opcode group +instead of the primary

+
+
+ + + + + +
+

restrictions on arguments

+
+ + + + + + + + + + + + + + +
+ +

N

+
+ +

Negative arguments only

+
+
+ +

P

+
+ +

Positive and zero arguments only

+
+
+ + + + + +
+

mapping of arguments

+
+ + + + + + + + + + + + + + +
+ +

w

+
+ +

argument must be divisible by the wordsize and is +divided by the wordsize before use as opcode argument.

+
+
+ +

o

+
+ +

argument ( possibly after division ) must be >= 1 and +is decremented before use as opcode argument

+
+
+ +

If the opcode type is 2,4 or 8 the resulting argument is +used as opcode argument (least significant byte first). If +the opcode type is mini, the argument is added to the first +opcode − if in range − . If the argument is +negative, the absolute value minus one is used in the +algorithm above.
+For shorties with positive arguments the first opcode is +used for arguments in the range 0..255, the second for the +range 256..511, etc.. For shorties with negative arguments +the first opcode is used for arguments in the range +−1..−256, the second for the range +−257..−512, etc.. The byte following the opcode +contains the least significant byte of the argument. First +some examples of these specifications.

+ +

aar mwPo 1 34

+ + + + + +
+

Indicates that opcode 34 is used as a mini for Positive +instruction arguments only. The w and o indicate division +and decrementing of the instruction argument. Because the +resulting argument must be zero ( only opcode 34 may be +used), this mini can only be used for instruction argument +2. Conclusion: opcode 34 is for "AAR 2".

+
+ +

adp sP 1 41

+ + + + + +
+

Opcode 41 is used as shortie for ADP with arguments in +the range 0..255.

+
+ +

bra sN 2 60

+ + + + + +
+

Opcode 60 is used as shortie for BRA with arguments +−1..−256, 61 is used for arguments +−257..−512.

+
+ +

zer e− 145

+ + + + + +
+

Escaped opcode 145 is used for ZER.

+
+ +

The interpreter opcode table:

+ +

+ +

The table above results in the following dispatch +tables. Dispatch tables are used by interpreters to jump to +the routines implementing the EM instructions, indexed by +the next opcode. Each line of the dispatch tables gives the +routine names of eight consecutive opcodes, preceded by the +first opcode number on that line. Routine names consist of +an EM mnemonic followed by a suffix. The suffices show the +encoding used for each opcode.

+ +

The following suffices exist:

+ +

<num> is a possibly negative integer.

+ +

The dispatch table for the 256 primary opcodes:

+ +

+ +

The list of secondary opcodes (escape1):

+ +

+ +

Finally, the list of opcodes with four byte arguments +(escape2).

+ +

+ +

22

+ +

C. AN EXAMPLE PROGRAM

+ + + + +

1

+ + + + + + + + + + + + + + + +
+ +

program example(output);
+2

+
+ +

{This program just demonstrates typical EM code.}
+3

+
+ +

type rec = record r1: integer; r2:real; r3: boolean +end;
+4

+
+ +

var mi: integer; mx:real; r:rec;

+
+ +

5

+ + + + +

6

+ + + + + + + + + + + + + + + + + + + +
+ +

function sum(a,b:integer):integer;
+7

+
+ +

begin
+8

+
+
+ +

sum := a + b
+9

+
+ +

end;

+
+ +

10

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

11

+
+ +

procedure test(var r: rec);

+
+ +

12

+
+ +

label 1;

+
+ +

13

+
+ +

var i,j: integer;

+
+ +

14

+
+
+ +

x,y: real;

+
+ +

15

+
+
+ +

b: boolean;

+
+ +

16

+
+
+ +

c: char;

+
+ +

17

+
+
+ +

a: array[1..100] of integer;

+
+ +

18

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

19

+
+ +

begin

+
+ +

20

+
+
+ +

j := 1;

+
+ +

21

+
+
+ +

i := 3 * j + 6;

+
+ +

22

+
+
+ +

x := 4.8;

+
+ +

23

+
+
+ +

y := x/0.5;

+
+ +

24

+
+
+ +

b := true;

+
+ +

25

+
+
+ +

c := ’z’;

+
+ +

26

+
+
+ +

for i:= 1 to 100 do a[i] := i * i;

+
+ +

27

+
+
+ +

r.r1 := j+27;

+
+ +

28

+
+
+ +

r.r3 := b;

+
+ +

29

+
+
+ +

r.r2 := x+y;

+
+ +

30

+
+
+ +

i := sum(r.r1, a[j]);

+
+ +

31

+
+
+ +

while i > 0 do begin j := j + r.r1; i := i - 1 +end;

+
+ +

32

+
+
+ +

with r do begin r3 := b; r2 := x+y; r1 := 0 end;

+
+ +

33

+
+
+ +

goto 1;

+
+ +

34

+
+ +

1:

+
+ +

writeln(j, i:6, x:9:3, b)

+
+ +

35

+
+ +

end; {test}

+
+ +

36

+
+ +

begin {main program}

+
+ +

37

+
+
+ +

mx := 15.96;

+
+ +

38

+
+
+ +

mi := 99;

+
+ +

39

+
+
+ +

test(r)

+
+ +

40

+
+ +

end.

+
+ +

23

+ +

The EM code as produced by the Pascal-VU compiler is +given below. Comments have been added manually. Note that +this code has already been optimized.

+ + +

mes 2,2,2 ; wordsize 2, pointersize 2
+.1

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

rom ’t.p\000’

+
+ +

; the name of the source file

+
+ +

hol 552,−32768,0

+
+ +

; externals and buf occupy 552 bytes

+
+ +

exp $sum

+
+ +

; sum can be called from other modules

+
+ +

pro $sum,2

+
+ +

; procedure sum; 2 bytes local storage

+
+ +

lin 8

+
+ +

; code from source line 8

+
+ +

ldl 0

+
+ +

; load two locals ( a and b )

+
+ +

adi 2

+
+ +

; add them

+
+ +

ret 2

+
+ +

; return the result

+
+ +

end 2

+
+ +

; end of procedure ( still two bytes local storage )

+
+ +

.2

+ + + + + + + + + + + + + + +
+ +

rom 1,99,2

+
+ +

; descriptor of array a[]

+
+ +

exp $test

+
+ +

; the compiler exports all level 0 procedures

+
+ +

pro $test,226

+
+ +

; procedure test, 226 bytes local storage

+
+ +

.3

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

rom 4.8F8

+
+ +

; assemble Floating point 4.8 (8 bytes) in

+
+ +

.4

+
+ +

; global storage

+
+ + +

rom 0.5F8

+
+ +

; same for 0.5

+
+ + +

mes 3,−226,2,2

+
+ +

; compiler temporary not referenced by address

+
+ + +

mes 3,−24,2,0

+
+ +

; the same is true for i, j, b and c in test

+
+ +

mes 3,−22,2,0

+
+
+ +

mes 3,−4,2,0

+
+
+ +

mes 3,−2,2,0

+
+
+ + +

mes 3,−20,8,0

+
+ +

; and for x and y

+
+ +

mes 3,−12,8,0

+
+
+ + +

lin 20

+
+ +

; maintain source line number

+
+ +

loc 1

+
+
+ + +

stl −4

+
+ +

; j := 1

+
+ + +

lni

+
+ +

; lin 21 prior to optimization

+
+ +

lol −4

+
+
+ +

loc 3

+
+
+ +

mli 2

+
+
+ +

loc 6

+
+
+ +

adi 2

+
+
+ + +

stl −2

+
+ +

; i := 3 * j + 6

+
+ + +

lni

+
+ +

; lin 22 prior to optimization

+
+ +

lae .3

+
+
+ +

loi 8

+
+
+ +

lal −12

+
+
+ + +

sti 8

+
+ +

; x := 4.8

+
+ + +

lni

+
+ +

; lin 23 prior to optimization

+
+ +

lal −12

+
+
+ +

loi 8

+
+
+ +

lae .4

+
+
+ +

loi 8

+
+
+ +

dvf 8

+
+
+ +

lal −20

+
+
+ + +

sti 8

+
+ +

; y := x / 0.5

+
+ + +

lni

+
+ +

; lin 24 prior to optimization

+
+ +

loc 1

+
+
+ + +

stl −22

+
+ +

; b := true

+
+ + +

lni

+
+ +

; lin 25 prior to optimization

+
+ +

loc 122

+
+
+ + +

stl −24

+
+ +

; c := ’z’

+
+ + +

lni

+
+ +

; lin 26 prior to optimization

+
+ +

loc 1

+
+
+ + +

stl −2

+
+ +

; for i:= 1

+
+ +

2

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

lol −2

+
+
+ +

dup 2

+
+
+ +

mli 2

+
+ +

; i*i

+
+ +

lal −224

+
+
+ +

lol −2

+
+
+ +

lae .2

+
+
+ +

sar 2

+
+ +

; a[i] :=

+
+ +

lol −2

+
+
+ +

loc 100

+
+
+ +

beq *3

+
+ +

; to 100 do

+
+ +

inl −2

+
+ +

; increment i and loop

+
+ +

bra *2

+
+
+ +

3

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

lin 27

+
+
+ +

lol −4

+
+
+ +

loc 27

+
+
+ +

adi 2

+
+ +

; j + 27

+
+ +

sil 0

+
+ +

; r.r1 :=

+
+ +

lni

+
+ +

; lin 28 prior to optimization

+
+ +

lol −22

+
+ +

; b

+
+ +

lol 0

+
+
+ +

stf 10

+
+ +

; r.r3 :=

+
+ +

lni

+
+ +

; lin 29 prior to optimization

+
+ +

lal −20

+
+
+ +

loi 16

+
+
+ +

adf 8

+
+ +

; x + y

+
+ +

lol 0

+
+
+ +

adp 2

+
+
+ +

sti 8

+
+ +

; r.r2 :=

+
+ +

lni

+
+ +

; lin 30 prior to optimization

+
+ +

lal −224

+
+
+ +

lol −4

+
+
+ +

lae .2

+
+
+ +

lar 2

+
+ +

; a[j]

+
+ +

lil 0

+
+ +

; r.r1

+
+ +

cal $sum

+
+ +

; call now

+
+ +

asp 4

+
+ +

; remove parameters from stack

+
+ +

lfr 2

+
+ +

; get function result

+
+ +

stl −2

+
+ +

; i :=

+
+ +

4

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

lin 31

+
+
+ +

lol −2

+
+
+ +

zle *5

+
+ +

; while i > 0 do

+
+ +

lol −4

+
+
+ +

lil 0

+
+
+ +

adi 2

+
+
+ +

stl −4

+
+ +

; j := j + r.r1

+
+ +

del −2

+
+ +

; i := i - 1

+
+ +

bra *4

+
+ +

; loop

+
+ +

5

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

lin 32

+
+
+ +

lol 0

+
+
+ +

stl −226

+
+ +

; make copy of address of r

+
+ +

lol −22

+
+
+ +

lol −226

+
+
+ +

stf 10

+
+ +

; r3 := b

+
+ +

lal −20

+
+
+ +

loi 16

+
+
+ +

adf 8

+
+
+ +

lol −226

+
+
+ +

adp 2

+
+
+ +

sti 8

+
+ +

; r2 := x + y

+
+ +

loc 0

+
+
+ +

sil −226

+
+ +

; r1 := 0

+
+ +

lin 34

+
+ +

; note the absence of the unnecessary jump

+
+ +

lae 22

+
+ +

; address of output structure

+
+ +

lol −4

+
+
+ +

cal $_wri

+
+ +

; write integer with default width

+
+ +

asp 4

+
+ +

; pop parameters

+
+ +

lae 22

+
+
+ +

lol −2

+
+
+ +

loc 6

+
+
+ +

cal $_wsi

+
+ +

; write integer width 6

+
+ +

asp 6

+
+
+ +

lae 22

+
+
+ +

lal −12

+
+
+ +

loi 8

+
+
+ +

loc 9

+
+
+ +

loc 3

+
+
+ +

cal $_wrf

+
+ +

; write fixed format real, width 9, precision 3

+
+ +

asp 14

+
+
+ +

lae 22

+
+
+ +

lol −22

+
+
+ +

cal $_wrb

+
+ +

; write boolean, default width

+
+ +

asp 4

+
+
+ +

lae 22

+
+
+ +

cal $_wln

+
+ +

; writeln

+
+ +

asp 2

+
+
+ +

ret 0

+
+ +

; return, no result

+
+ +

end 226

+
+
+ +

exp $_main

+
+
+ +

pro $_main,0

+
+ +

; main program

+
+ +

.6

+ + + + + + +
+ +

con 2,−1,22

+
+ +

; description of external files

+
+ +

.5

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

rom 15.96F8

+
+
+ +

fil .1

+
+ +

; maintain source file name

+
+ +

lae .6

+
+ +

; description of external files

+
+ +

lae 0

+
+ +

; base of hol area to relocate buffer addresses

+
+ +

cal $_ini

+
+ +

; initialize files, etc...

+
+ +

asp 4

+
+
+ +

lin 37

+
+
+ +

lae .5

+
+
+ +

loi 8

+
+
+ +

lae 2

+
+
+ +

sti 8

+
+ +

; mx := 15.96

+
+ +

lni

+
+ +

; lin 38 prior to optimization

+
+ +

loc 99

+
+
+ +

ste 0

+
+ +

; mi := 99

+
+ +

lni

+
+ +

; lin 39 prior to optimization

+
+ +

lae 10

+
+ +

; address of r

+
+ +

cal $test

+
+
+ +

asp 2

+
+
+ +

loc 0

+
+ +

; normal exit

+
+ +

cal $_hlt

+
+ +

; cleanup and finish

+
+ +

asp 2

+
+
+ +

end 0

+
+
+ +

mes 5

+
+ +

; reals were used

+
+ +

The compact code corresponding to the above program is +listed below. Read it horizontally, line by line, not column +by column. Each number represents a byte of compact code, +printed in decimal. The first two bytes form the magic +word.

+ +

173 0 159 122 122 122 255 242 1 161 250 124 116 46 +112 0 255 156 245 40 2 245 0 128 120 155 249 123 115 117 109 +160 249 123 115 117 109 122 67 128 63 120 3 122 88 122 152 +122 242 2 161 121 219 122 255 155 249 124 116 101 115 116 +160 249 124 116 101 115 116 245 226 0 242 3 161 253 128 123 +52 46 56 255 242 4 161 253 128 123 48 46 53 255 159 123 245 +30 255 122 122 255 159 123 96 122 120 255 159 123 98 122 120 +255 159 123 116 122 120 255 159 123 118 122 120 255 159 123 +100 128 120 255 159 123 108 128 120 255 67 140 69 121 113 +116 68 73 116 69 123 81 122 69 126 3 122 113 118 68 57 242 3 +72 128 58 108 112 128 68 58 108 72 128 57 242 4 72 128 44 +128 58 100 112 128 68 69 121 113 98 68 69 245 122 0 113 96 +68 69 121 113 118 182 73 118 42 122 81 122 58 245 32 255 73 +118 57 242 2 94 122 73 118 69 220 10 123 54 118 18 122 183 +67 147 73 116 69 147 3 122 104 120 68 73 98 73 120 111 130 +68 58 100 72 136 2 128 73 120 4 122 112 128 68 58 245 32 255 +73 116 57 242 2 59 122 65 120 20 249 123 115 117 109 8 124 +64 122 113 118 184 67 151 73 118 128 125 73 116 65 120 3 122 +113 116 41 118 18 124 185 67 152 73 120 113 245 30 255 73 98 +73 245 30 255 111 130 58 100 72 136 2 128 73 245 30 255 4 +122 112 128 69 120 104 245 30 255 67 154 57 142 73 116 20 +249 124 95 119 114 105 8 124 57 142 73 118 69 126 20 249 124 +95 119 115 105 8 126 57 142 58 108 72 128 69 129 69 123 20 +249 124 95 119 114 102 8 134 57 142 73 98 20 249 124 95 119 +114 98 8 124 57 142 20 249 124 95 119 108 110 8 122 88 120 +152 245 226 0 155 249 125 95 109 97 105 110 160 249 125 95 +109 97 105 110 120 242 6 151 122 119 142 255 242 5 161 253 +128 125 49 53 46 57 54 255 50 242 1 57 242 6 57 120 20 249 +124 95 105 110 105 8 124 67 157 57 242 5 72 128 57 122 112 +128 68 69 219 110 120 68 57 130 20 249 124 116 101 115 116 8 +122 69 120 20 249 124 95 104 108 116 8 122 152 120 159 124 +160 255 159 125 255

+ +

1. INTRODUCTION ............. 1

+ +

2. MEMORY ....... 2

+ +

3. INSTRUCTION ADDRESS SPACE ........................ +3

+ +

4. DATA ADDRESS SPACE ................. 4
+__4.1 Global data area .................. 4
+__4.2 Local data area ................. 4
+__4.3 Heap data area ................ 4

+ +

5. MAPPING OF EM DATA MEMORY ONTO TARGET MACHINE MEMORY +............................................. 5

+ +

6. TYPE REPRESENTATIONS .................... 6
+__6.1 Unsigned integers .................... 6
+__6.2 Signed Integers .................. 6
+__6.3 Floating point values ....................... 6
+__6.4 Pointers ............ 6
+__6.5 Bit sets ........... 6

+ +

7. DESCRIPTORS ............ 7
+__7.1 Range check descriptors ......................... +7
+__7.2 Array descriptors .................... 7
+__7.3 Non-local goto descriptors +............................ 7
+__7.4 Case descriptors ................... 7

+ +

8. ENVIRONMENT INTERACTIONS ........................ +8
+__8.1 Program starting and stopping +.............................. 8
+__8.2 Input/Output and other monitor calls +.................................... 8

+ +

9. TRAPS AND INTERRUPTS ................... 9

+ +

10. EM MACHINE LANGUAGE .................... 10
+__10.1 Instruction encoding ......................... 10
+__10.2 Procedure descriptors .......................... +10
+__10.3 Load format ................ 10

+ +

11. EM ASSEMBLY LANGUAGE ..................... 11
+__11.1 ASCII assembly language ........................... +11
+____11.1.1 Instruction arguments +.............................. 11
+____11.1.2 Pseudoinstruction arguments +.................................... 11
+____11.1.3 Notation .................. 11
+____11.1.4 Pseudoinstructions ............................ +11
+______11.1.4.1 Storage declaration +................................ 11
+______11.1.4.2 Partitioning .......................... +11
+______11.1.4.3 Visibility ........................ 11
+______11.1.4.4 Miscellaneous ........................... +11
+__11.2 The Compact Assembly Language +................................ 11
+__11.3 Assembly language instruction list +..................................... 11

+ +

A. EM INTERPRETER ............... 12

+ +

B. EM CODE TABLES .............. 21

+ +

C. AN EXAMPLE PROGRAM .................. 22

+
+ + diff --git a/src/olddocs/em.pdf b/src/olddocs/em.pdf new file mode 100644 index 0000000000000000000000000000000000000000..45d0e788f128d73aee2a65ccee1cc3f10efac02e GIT binary patch literal 194114 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

`&Fgs6A)mirf!<)Y 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-101481.png b/src/olddocs/grohtml-101481.png new file mode 100644 index 0000000000000000000000000000000000000000..5e571b5dce9778e1453514ea8caa55f52d5d417d GIT binary patch literal 12937 zcma)jWn5HmyY3JU(kc!F4Kb?J0dMyih42>D?1OTW3in3Cgo|&+$QMX#r#vTD(BcwN|`N$fGEL~}f zLM&30OWYg?YMmq;2r0&udI*UChD?#zAmrYW9H!UNuv5J~KYRSNsNbS@OUrMbLnBQu zJT{$cMGbrqD!x}K#;=?E9gOyAKR(#=TuUsf6hv5}?H~S{qwGwQI#+`*h%xn~ z04fadl4xM##XWa7oM_O5&}wx);KbdS5xtHen67m8-P1yA zO$`ZtsaPWhvq)U1I)}E7E-X{pdsEYD^kT=^jC()e1qJ}|URy_~xP(Nt*e{C;eJ2RrUNEuv04$?@#|5m`C(RuXirZLs`5A=e6)K!UT z$&9m1T59VPKVu7dRbkV22}?#D6oY88i=G0ue3V?$_m`(kGkFUEU(kXz2-VZ1P40et zf!XK1bJOuw9Ua>CBU5o5ArQFPxFmSMHLiu6i4`}dCT!3L$ztc5&_l3ld-IJU#t|0bxow@M1QtO7ri*E z2Ur?X6qu_-Q)=g*VXjQ8MRWx)&b(&AcSy!U`)-jmtw#+TGkJhUK&!ANj>m<9HM3k3 z+N*?@>;e$B#}NQPvjwr1ueYbD0{S1Wfqmp}MVO!E>)F*_qthX|3u*0%g&gCv6*hJQ z_9G@7PAEglFJHbEn%{k68jgPF;_%sNY=gNubsZZgblLXv=H_^mvx%Q{$eex&;Y=3|({h+dWQt4DUQR3z@AiU4|Dtl<|rF2GF zz7$OFf?dcVPAc-%yQF1msaCuSr%1WKitKdigSfQuJ1B5>;`dcJV2ptZD-|UStnG!i z1j*;9_;Eb&=WZon7cqYFiLs5(7c$;kI@rq{wJhWB(Nbt@FM?*;iCJu8H<@UH#LbOG zw$%E!|N}=f*tfjk>93m*n8mv3HHGtT@t)Z5x%5BTMB z12z!o{W*q%Tl@nYw))0hFy{zNj5!`xRk42$aFs!$9-bOj*Dz|Kx+pKy?w@u^Up^VF zrA4CEFh|xt2|Gmne_zavC{3za>rRmxZjP3eENh?r91`?lR1A+IQ7MzM;7OOv|GE)tA_s;k-NpDirR z5x+MwAqO=bKbNo0#ouVy?)&75zXKfo8aH`)S$#EY&N;F)R=9LaQ)81tJ7_-`G}eCc ziJK4LIqltP{m{*ES4@ubsKX#fx3o-~te~o?Df$~1B*Xyu7fii-?)D;(hxkOKi!$X(zEiRu2snC7 z&#mu##;Q~UWf_-$rO@0Qy}^;a`!SO~_F-|G>A8{ANHy|{{Hp(H^nsejQWfwodi^bP z6?HH})luncL%jTHW7Fovm3I@YY^fygW?z6R{yQ?|ke~Rws5&v_Eku)rg(I&&Js%gW zTU!bn-q!A%$S#=j7=9TkV{-?E*NWL~wN+)sjseW6C=OP9e(wkWsawj;d(XjLq=WCt zetE6Q7jH2pL}$k&N|8h8&bhF)j+9~Ys&{F@M=(&g^)z~SXNEGpy}CorB}Yw@4%c<$ zc`ND)X5%@mI5or1xRVh_-BbC!jyAWZX;ymb$TO(iW8lYy>MXa83IR!+Kdg~grW*7q zNBVr@7gbrO&{p1C`6gJ}+&B7o@AqZ`lnJ!cps%D#W9|+F%LQ{DP`JEV5u&P-V!%$oxw|2uuKe?~lswqCM8nHdPElBqCcuFyxT#s{ECZ#n!F+ z%%el1BB{3f z4mmtnh$Si^N1L1V7>GEf!&X?!vX?tCjgn`_hj&F$hx){I0|`y$9Fo@9_C0|eFrVaBSMu5RO!ZN_CymTfmUF4 z%O5oerKTP*&n@TZ9_5q~Q(?Li!%&X;wJat0ru?;^1aKSruVxmD#@-M5_K#70`Ys=6 z0$rQ4)?>XZ*1S3!CYF!ZFvd6B<7IZ6L$<^;m)hw^Gt}NcB6em<8lZ-7`_nP0h;#YEwQ&C5$5x2frlic5$Y^K z$bBdJ01ZWRH2g;SyL`-6;~y9rlFkZZFN&t;PQK4aLc$1Mvy$Y;9gh@;gnhKJG1YRzVsU`W zy$aw7|3hLcGZjBmZ`1A(FXc@^>8NZqKut&-=knjn_-8rri#oBT(gDwe2+;m2)SV1) zXSDN(`AO?!g>-_bEMvhZ!7kQh( zh;44mx3VHys!m=Z0$NX(LO#NKnV`fF>#rPzr>Y=(;0`PLi&bY$v*%%xR~4b7(Pv45 zFS~il_mISp8&*QBvN}Q_3D$i#JI7zP{Icj3<0Db}O%5Nbh^2JW$5}WV8WfAMC5;hd zW_PY2dCHK_a#vbF>*J0-r-f1}_J6wCh&Z21)2yG=Vh2DLcK!-jpY!Th{Y?1zxhZOAfBn4<2YF)L z28PB~--oiD(9L-;I}z4kKU{ClO`XsrcxNt5n?JsF-z3T3%-XMRO3e@WlNZUwxS=@} zRX@zy5G!S~tZ3rIjk*!JnSrXAN0dy+f4Kg(zxSVx(nxEd4EmAKn0WevFCj zi(9Ejuay^ge9&Cds#jP1SU{`W(MZ;+l;z~JC)+;6+@~pz)XRz4%-hmjfa=l zjWFE}?^IkuIdXca4EqgTGT=DagoNZZdcQqepjN&H)a)gDYP~EaLYW%WfiA=dauZLuR?K`42Wb zje^aOd`R*+b~UsaIdEj}%Zc3bd9@Drl`Wl?b1_k7Li!Qs!4Qb-{)XMAQCe0YTcFVpH3jCB?; z`DMBvo`H7`xluf_`%iN}iS=I~g!N&z#bN(OL}{Z=r%tsCo%V7;TH5!Zgk5CyZ=}MS znst+9y__ISbt8P-@*0apCO&JoYugKdw&j&wLlopn6*XB+^JBAi*7{-F#wpoJ3t3YV zUa^g56wWtW7~|i^mMQ^R{FsBu%&m8PMJ}Nx`C!b?k+*GA=_|+LgYT!_@3eeKq}Vb_ z=9Q0=KWf7^T0~#*A+}EWAlNH}r3x}&WzOjxzk3}1Nsmg`{;tA62bx9upQiK4<^U;2 zwi{y)8H3OF?r`&RTz+$Z$RB22%PSw-Iax~g(|-v1H7a~0SR(0==;X*&*WyeS5g=iD zwt$s6$`_ePWxlw8))<&9Lqp{MefzTD_{}58hTL4Vits=i?hbpZPK5?aUtSQUzbZjQ zvQ$n^7#xy$Krj~Bm-hjs4AN0x;UP{38#VU{5Qs~rz2nz37smr?WC`6Itn}{~bH2JV#q<)xpFK@0!pslg0^yyJPd8Q(J6h-o87e4p8#IGx~e^vCch_-&enV$T#= zlO5m;ON1K)u7>j-ED_g85o})wd6~Ke%o(PoEGeC|p}tsuO_G03@6BsJ9?X@LE{1%1 z_<110<*+vv6W`>WN;;2y@5NvT^NHR9GTOOV+<=1Zq@Y)Tbt}KsT&}L2jOpflAU9{3 z=!8A_+{fCl^{6t+vxaj-AdNNXhNP_EU!vo!gY(D58@PM7Q(aKE1yjdrSr;TPB=!vW zQU-XL@Ck!51GiPpVHU?yW>3N?q~fIm%>HzNuJa@2s(38BOny%G$_g6>y^)4yhB~tM ztkNg*cC{agrf1nsYc#xcbWj=04lEeV9Bs0i>)pmjERiT{UF_u>cV$dwjGJg%i5>{K z7uX$4xjy(zwc||dUSxy5!P$@Z8K=Gmf9kA!4ZKu0d$M^Sm~@%Th}k|g=o+RcwrAQ` zX8X{uKOWQbcE<2E3;V4=DSr%J-vNzFUtzSOrz06JLJs%P%MY^eKbd@TIjk`i7y<*v zUp7RRxHo85xY(c+e7e_>h8ud!`DefKw&w3*FiYCHQ-4Lw@>v;aDi)0MJ$hLfAqs~f z76{7?dJY)-YzS)?DUi`_u!fyd?@O~Didme|a*s=r{~REm6ajCzJF(SCBHw(2A2c5L~;X@|xsQzB9P1H+aQl z(;;lbGc(F`-g((Wg2a50?0(UB&5q%|iCr`(`j`v6Ny7yf!HazLP<9TU@H7x2kPq;g zJ!IJbx>AM*PCT}0U!Do5Akf12>^tJ=%2)0QGU(kYMAj;WaZe`6&>*3QLW!gM=Du;! zV2qYQ_}5%hES^V#<+afw0&Gd|KSOPrYa>=51S9Xaqu^Juf`@gs^oRzwiHbMLj^t6( zBj4G+Jd>9w9rBX9NzEj_ZwkG~GH-`aoMprfFt06d_leFn88;c_t(coUMO{MwMG!oZ z1b-WbM!>UXRsx+^xB@}(Uz`$+%)JbGR=TH)azOZsJ2(}*u0(caec8cve$}#g)1+-Q z$j*11V&ig?651u?5unJ$EV3NqtIu?p$zajg2FpCm<745pba^Quy&ti&RWLlBZ57$M zFGR=nC^+4$#ES{sU_7F;l$CQTfk_~diV&UsN=@tp>9iCEXa1_PPe_p!f2avd*uBv% zQSMbH#u!vteS8^Myz$a(45q*dU>!}>XF zcZyCvHoD9=-+rj|kXTVWuK+>JLnx;61q+lYK^{$7O_*WOoAu_Gv}g^u&X zLuSJBCegEdKmd02&wq!IOWeOQlhG}BSlAh*^NeCg2UMut+-I+hOg*2$6-V51O6Or6 z68i=A#>7(u0LZ>&Ml#7(aB^IPp&%^qqKvsUPc4~D*}J#zSEn*3dI8Y^v()d|6=X{c zumG*+ElA_!B~G%IZ24249%bK$g_=3$d;%RJ?Fz=@7DUUS0lYgG_(^&*K}2r`uTxLD zj^#UzsT~}oS*D{FY?+LKWCCJw)6iLBNLF4j#=aZ2Tfg9aDJq*>}JBvIT+P5T;`OAdg!5@<) zM!Jtoc}VZ|#Vs*>3ATqn4+~O#z^pdB*wTL@+b1x$Dy}-S}&%mML7&R8L$DH{AL|)l>j4;j=h@n#J+1`!8@NImGZ898`J6!S^jVw1bNJ zh^B$$U(gYLEECyGS5<<4X%)P)o^ZS=Fxce8eIuUkp`oMv4>49Xbi?lxL3jIWyh~h0 z$;(lB!O%^pexWMnB5TpX_y;Lw3&F30JyF~Cl_nFAE?=Ob*ku>ft?DZUl4^Kdngk~g zUMcuh@|PYZn8nt(M0NG9nZws?7{wvK@_K;Ue1kMFs&9xo_%P{d+&4fLPE(+DTT6JV z6zRoobIweXKH-T|(qAcH`z{)CV3ZP&g-4sjPSg-sLT0|$M0{_&28Xqw@XoUSKcanb zyi^O0toJgq&jaU5&d>6o^lT2xM25$ArCYZo`RG#lLyWU(pB4PMG8Ufm)h|`4XLcnL z*94#o>i}MqG0pWOtJ>{FKez*T*uz{|LKDNpF=_7y?Nm>c9qA_tWI4ilGV!FQ89ryT ze?MH~kBmcwsu8M3P{H35^>`1thL{S4!E;)-9hC{uiD1Er9?=Q-D11U6Ue?c)weG z!43R|KsVt@l0C6Uwl^eadaUKq1XvPvDl$OBKx?CAZNB_WDt~>;4n|iiIZnetvjy3GYu2I<^|JV^kJ_2TM@x-;-hEoXhX72A@6eg zquuxn0F0W{Yfv>Qi6QE&&HA3u3K zZ+-SVpRH|p`$xmU_Myeo<~?$3#@ck|r6I?~XSl%LkDMs0ttqFRC@-}=@HUX06Aup9 z<6)V#%XsPoI2J>kUM+vgqP6d6jCojY&!5g@`ib%zb?ba-E;DV$sPMjRAPUl;)CiVe zg}<2x`mnRbwhn=e+Ecs-a)|-z`vU6m!%=x@6-SgO!yINW|8ER)L;#!6L5pp8sB0|r z!|%y$BDfaz1GAxUWVqE1lW4mkS}~}7?hNXelm-}TZIChm_N#XJTg9WxR&py*e80Ag zJ><-R$FBag?)AMP1e5UK*=M*PqEH(Gcgm{pq%Q|`M_TuTd;jT$*^ExkyUvjoD~N=P zdP9_eGL+Zzc!^KJq-V91PV9je4lQyTZ@9ZFo*SyhLc^gIVUMxz9J4PYkv=+vA8jDB zuyc%$7+u5l3lmN%8?%?KDaBLkE~F@WAh58DBjy>wH9n%6$RQ?jfE*LIOXo~-qok7i zv(r|WAoooV+<4Y#=_kpSPcNn)adxy?;I6wP@o2*_VRZFt!A2+?`~SbfApvyT10UG* zLP4i5+sx$Xnk~nWZ-F)D`STLjIwgi#5OvIH-3i^t)4>%7C^Hg(=j&23NYMHQ2z$@R5-V#S~ae+~eq z?8{2_urTElrj4`8jjd}sX!jv^Ng^4&xiEi-i(xD|0ULFHVV)!4 z!qQXjaU(6q3@4Y$2hTMMzm|(FsTEqo4N*7qBe1gO;rD`D1Q*&|@J8ZotQ zI!IW!&B@OV1%=_-H(R05%FXoj9eGN#7c@GEGJdHIk0-+hDEk=+B&Ws?aZ~o2m+yu% zW{09*OA9j>oSv5ZD~&k-X#Ht*lVlHck}03dYC@poytl_0mgu(WAaCdB^B((LUxbHj4~ zq>15q;b|k}mX|ZP=1jS{1r}}^I;A#uZ;4FvbQh-V8cndY9U3Rb5!_Mr-1NQChA}f_NdN$N%ulrdy!#|lvADuRq4LTTNklnC zk)2WD$)$g1TmCY;2_FB$?9M_@5Nh9vUp~rFgdB!6tKM)_?iTENLKlGBhUXX0f7{5Pc)6Em>rQEf zE`0{e%*#>d_KdCeaOu(JY9>r~{M-uoaBeLQQz%=UVZ$*SitehsyHZ$s4*BYY4kR0A zM=bVG3_lBoKQ3*{ld7Ddh@NxJmo*`p<1QTumjL9v6hQ@VFoaERXuIiYsu;o33Qz!ShKQXAQ`dbH<)|J{O|dk5!otqlGu@0^h!+oLWf#5PG)ia9(2atDJBZBN zCf>*I)8U&9OEg;=7gyoNgiU_F=|`BE>iL|%D7Ujw<#%2^{^_)JUX2vpsh>*@Qnw#o ztl9<>9+-~1>o0$;QnuN@hNA7+q}%&6GU-m(%_(F>l9q^|si@Wr(`I%`2_qlE&{z?u zmp)|tTu{zDMR%EpV02>vmKzhA5w^oc_~smANN2H$fyPEZerbv@6YABo^`_kae(_Ce zt|fLJ-J~H~SkA^nLTC_ZuGd}I+j5vaJg_k_F6uYE(NTEmAy_w810fGIGW|{GHV0C1 zn|-;>pU(=T)xV{w8}e%xNoXHRZhzlo&kjnlxfSTPXXv|FzM>0eSS0)7fb$Q;hC^+f z(bn&uGuzPFpNcbR*vr0~`_7Hul$cy6C>&M-vpMQoOUfqK9Io1aVU~{Y_iE0rc%#Ey){$f1=@MdYfLvj7 zsDt%h|KS1kG(^Bar)ND!mu!F^A2fwgZ@27e@($JN*V{P!o#~cH?2$M1h?+_%7(*cO z0}muNtu*O??bvjKb%yTK$vEHfBYl&lpg19eC=Q(A$CBkQkPIKaAZQ_;B%4YU?f8iK z{+k~yQGLlpA?EO~u7nD4QF$imINe-~P{`n+gM+EC)2rJh*bQIa0!IjC=SP9>Yly>v z92HtC6!LCd*R7Z_S}oRvETJ+@uG?AcC7LZAugWbC|Axy_mVhg)uCu=>OXl0*<8Xnm z1VpP?d~9bE3`O%HxLqol;Tql%?|ZN}AYrnapDP`u9@p~&_q3?Osqgq9;CTEt@NmuD z^s%;s>Vr_tpVEVIJ6b!o0EHs^O5UHBI!QLg<$kE?o##>o8cCaLJ3bYPma?*?W#1@e z<&=JgbAWTS)(oAhSDR&4cYjRZpbVf3uggA>!#y`~s+u62w3VI2G=VAi{N5sSC*AD zNIfGG;6`#*6KXHc)<#3;k`m3a(W>3EQp@O%&Hd`p&!MI&s57RC?0*vFKhoK&sF@BC z(VdwIbgsNj28ufbpi^Z7_#Ik014<{Ij(|^Y@pn)>F@OPlA3pFO&kb7vqaBw9MKQ6E z5`|I=8Iih6(;S$5cdBDOj+f${HXxc}>W-9%IX@#UsH+%DnZJO=Ip!Y5x>Oa4-{rLG z;hhv+JGVTVHv|IrPiqxQVKU94B2U1IH}gY<+NjtkgNs-0$IX2c59YVYZRI)T47>Ki z)ZcITyeK60jTXJ87t&0Sf>3V>0n|Oj-hG^N44fCmdgU{>!XcX$&wdN$PoQ$tk3ame zePN@I%vfR=V*$xH0vctBSIH2@`SJwtdEtE>W{~ISXvPNTzO^o3q47x7ThzuD@onlX z@_N?)?Pzb7j)tp+{aW#PckP_?9=p#ds|7dU`$N>U9I0mSLln+DKW0MMdf?-&6iC+j zcgw%oCJJ&Io2{p;1zl3+QH|Kyzj7NHIilb> zRvoc8NByr{YBeL=x(vY0%u~J3Q))U}TyZ(O=J3TbhbjSOX3^T-`l+su`$_zM^+nYE z!rYHgj~>0z%OB3-ZH8A+$3Y-uG5fMwyL)f)k7FSUf9g%V*a9y)26zK1a(Ypn^Hv1^ z>W8yobtOI%lhwhZPhrK!9kh=ZW`9hHUc?QUzyaXMkS>p- z2`5=`2>SQWu&LQ*2u5KyljA~}osG)w9sB8gB}vvQ@8`E{W^Q9=jCi%p%;>ZbZpK{- z2=n9Y;D=n&HuJ8FK@W#1-~=wc<3gvN&&BZl!HjZsmD)I;I&4@X<{-SXZk#}8su1Caw8r;H}BrB$r<9Tm|?C<78Wa&3krMrQeR0s zHon8VAE88rA-~f}58H1NHZgd4SY3trGY-HS$=5sCnTo?ljcRaTea%{5~2(kM*c<6-+4a!=)OIb{hbW?v(!{z!H7Z_7jdO>QL!` z;9w|e8TMPdUWtu2wj3?{J%R@&3G@R)^L?yTm;C!$$2ac}Uy!|{5DbjjTh9{nS?ZUs zV^q6s_ETN9yK0J91D-R;zqUWjdT}o!q40nr$?F8Plzo;Lz>pYaqk?stW;5Q)WP`SY z3P=RP89BtN<5Bxb>OA#3B(kO=kJplixuqeF*MzNzJ(R@gI})3YXjLqOB2kT|(`_j% zv5qcnCCqUnm#@#ozn8a26~u+mplWtM3;UW%>n3sd%4reVR$E|N3rD@uRYrEQwC{rW zk$`MVSU6Cdfe+VCHWktvzQ+GbO5C|1iJwv9^_n=yTGnU&9wGM&&(+sNi~IJ-lqgG; zLTd@8t_4iyZ%33nE{@{mF}kSzunDU8*lVLL6ohMqYbvMNI&hJ&0f0k_>2y5bKyY(l zU0h2WAoR(=(Eb7t&Gy^xXS0<@|1z1@X==-LEz)@*2vGvlbPt1_4YQ5)MNj?m5N-X|2@mlB6WjJ@{&9wgLA4sdLKaUnF$&0h?@`ab#N9U|4D4=B*2TF z$l>K;Si%2fG}HiGcK%oPmN7*BceH&5^hDDn70sY*07h#JXFUZ!ynt`uW|ETg;R=vq z1%_99THGI@n2OAC5iWR-UnAQSrk=r$6E52(X8g3Nb2|*H`XVI2KN!**cT%JJ55+xd z5;W}$MY2i}6FOiLa~@JA)}M;ouZWj9OK45O#4M>i9S*=0E5j>)oBgg?0$_=D-d4&| zYHrwPK?g!rf9O;CHw1YDVYbt5CBE_8<%7PC;~|sC_f@2i7gyw-KHzR26zUa@da$Gh zvBY?Xl3^KY+xyDP#RC^6^nLAN4Y~}%PiwKjoI4SNUrl?^)G%)@Il+i^MnFGHU0>*f zXLX+lnkgdHegFP}3nv*lYBStZYt8pLE#Np`VhwU2FmhTZqpkx5Nnpo+Vk8R0V+SM~ z_kvdZ4$K4TXdW4@aV(;4sUmr)zkZ7d=36qo_F}zM++ym3AcAk zQ%@*6KB7ne>+c04eQ1nyY84KQ74=jS@o}eAB0|EjN>O5dQ&xZ3^pXk{eb05lETYu2 zS&+5=?ma9>Pi0&ClPcM`LPnkSr$XQjDN3#v{pDvd@ShkWA5q*mC0@r&RM9tZp}lw2 z9T^OWsuRBnXgdSICyzo9<*Sw`fhLeKB3j5u8+*WZFVg< z&cF6&qy!Mxzl}@o4qop2Ap`es%=u5eX$r4kg2$Vy=)v`w*eC=~UsXQ|+f58)1;e>Gib8y*!uK{@}d_<%Era zq}EZRfZoVWZpd|Y@gggl{va+Wk3@Aib_|~Mpvc1cs66^$yE|UHbvcx<64IuCuwO%j z7|#z|#y;5S;wl9I#5KK|St4xe*lL5g_SW3T)UG_ie4W%nPt_@H3}nCkJk{d2uohC5 z`bc|A>(h<9o7+K>vOoOLY!gHv75PEOvl9{z< z*@&?(7C7WkjJ;_r3)?K7agm{!XU$U8kZJ_~WvJ+2V+aQu-#)?@JVrClw<^oWAw}iE z2ACX2m^}L%G=`jm(BmitB$!12P}Ej@8Ff?7yi>D%Dk1y8apj#&ir|E z9io|TBxcIc=>l@yq`CC{s#gK{t?bsWv8sPELj7kQJyL*~-apI^_mEAEc%m0@PHF0N zQmCFkl>+{ULn#~hABXZ(vlUzby=fS@&*@;ty4KrzH+q}Fedjl^F1}%jb$!d*A9LVB zG)AH8hS6`a5s`hF-eK+h_@Q*@?>&*rX7ugo(p{vQX5F*4&~ZPts9bAY@|&GY&R>RB z^`b)XGI5SE5;&85<$N2-J(V(zp2Mo1y3~&v#<;U43sO`wsOjq?t2&4tMa!VkMKUG7 z+zxGI^e~M;u>g9lg$e+#Be1TU_m%|L4=1P(m$t-NL<(7}l!T*x;E?x}HTvd4ILRgLRD`D0*JHFOGTg?y^~NFuDvrM=zl@ugbrmqp+)?0jG>g zynnx8$&l*^o`%?tG{)K%w zcv&U`esKt+IJvZr^*C_JNTkqB>TTM8{uw>n!v;M!m%-+3Lt>sQqX+F;C=+eUoY*{E z621eK2r4NQC$%=me`lw6*{t-mmbDt)=6$b6p~nxgo!haU_NV3fsf`rzT^0Q`2K@$etMSsey)3YuJgLi^S(09 zd%7EK*tKERs#Qj3PM^H6YSkLQRjbzS|H|-UmB2XeH^XI3`~}a8tMrJ6-_?J9x^m9_ z17%3OcuM1q$G0a(;lArgCSmy|CuT(q$PTyk~6NQ}CIwub!?2rwA)K=Fjmnm;TtAXwo_PtZ4)fg?9B!UuwVq2BqzD zfSpsyWMQ*}lqmD4SC*tkJbR=%ap*{J$;gGeH*0rPHI%?3Nsu0w={MY@1F29(nHw~V zhWBx(bkW@*CAXK3WVyaau&rivjVjkjN$^aFn@|Sh$^wdFE@*ZCVC?{ zl>PZq|CUEd&c#9ug=OlL>zOW+i9kkGAtcy+s=7H5H+zBvfe4uztXH2ht<+0^I*mWH zkq;4#K1lyaA3#@FUkZ^InIC{cv$^eOtECc+=7~9{_aNM`yj|zUeicvE^$KfPvV<=Y znzB#AZywXXeHm_jdh?F&zuLI<*1s}5l9Y%WUKz>_dtP4L^F8vb@EPf!OQ}u#j_F@l zCi}2amIb=Sn;T(Ps-(WxD%4!r?2=MP!=I87fOYW9HrVX)O$Apy96XM@QO zuT%ANqfEcy4hh%joCZD_uyYXpumX!DK^$lJT)o zl?dv<+Y(itK^7V#P1Z)e+2-s}*#z@v9WQf|sj@iNtI6KMJ9brYhnmO}*FY!6yFCo- z_>Lo4gAW@(_c&T*cjbq~OkZDxZ8evjG&DTGZMR;OT8CS*6$_v*Ep`g@BbhZ^_8%|x zK1FH;9(Kz)77HxSmOg}PAg_g6yLtJBiIwyAHhw^Us&v;>Ob_5Pf*{7j9}``y!}B}U zFXi1Xn?es=0=*Rj%ZJUI?m=7vNT()1=>jSbYoXt2i;PEkVlUfZoyAe$ z=#5iIZAgGgvU=*SuLSaAo$MG&@>Q`kv%#khY!)sLrcKq+FT7?cO*-Ug#kJUx<3szl zbvAGIX+Ntzpr#+Bj7P6y#3ox4I9JzxsnFV*+A zX=U4S?zPU^E8NB{41}t!{3)AUE;4Q?L2|4z`4)_boes2HG=MPu+cA@#IP}sUE6J?m zuNqxOyQIouq1nY6zCiI)jV-{?GPjY_KU=<1$ak zoSf>?LtchE9ra#mfxiXZ!>#gf_BS(5!0+sS-r9)A#f)I~i0z!jk1ZmSTDREt7wW8h z9efj>(vopExT5Cya;L?lXZo7jn#zxAgNsa6B_XukkvRw?JCsZe@T-7F^bxwgg?NBo zLi>yeu;^d`Q;hmoov-lp%r={)tW0rRyYEgr5>h68YpY!F8BVdE#``%=TS;#b9Tlbx z#U%15jPzC+2FEn4MD}6v$ES|%3pDHZ8vK~t?z3XFW~Fs!{=dJt3VrbH-ys3HDLi@F z21pUV1(tNTSG%U}(s%EuT2bL=MuX4vgd-qC8`LbH(m}$oAzhl$i^G?EO{-Fe@`E(Y z!$68+ch^#4^J?u`yPo*hos1CGq&EeQVEEojP+hcXS?<(L`R1&s`nsp55EzpYB@as! zDdQSy2NK|8+3$b}@lAk4T1*Iq!}6o{vo*L`8dW4y3u0_j4}w7O(8jB{Y_rFrXHt)g zIFPz>(0|3n&NV17TE^GgX~!OI#CWAoMgbs?nNAfgy(BhaXM(86iP4gjKHK#xJ-Vit z*PZMh3_}!%kL_N@m3UzinIv{|Ik|(^9qrp|ds`?kCcf@0&ec1+FK^6HEk)FxT@mhK zknPoUE~&2XY2gfmDq?c*XBQl+n%-JT5pc7Gyc%}ny!S<%RrmE#+nHkGx=)(trPr6a zi!prP8I;s2l@qp5K9UvMVjEIVemKhq3-xH1%8beVrw`e!UEh-SMfd}^v_ZcI?_O-) zdbqMLDAhd_UHCfJJ=4rlmx6Sh)DKZcFl8jZHk&HyyK0y3iL~$p0g`yd9x;HrVmIVm zm;%Bg?Rdy$05Z5V0t(5>{3u@W$h^$L&PNsBuq1+SornE43A$QW+aW^dsK<^!Z9Mv+ zg=O5IGk<8%KY!MIz9JUW{Lwr}L!T(JCVZT_{!Asq)~@s5^?v9IPg^jhoV(fPeY#AZ zfebQ~zsY(z(P%Ld zOm9NuLphoYCpJu#7s#$ZD^}5g;biTbvh4oTG6C(@d`sSM9sT=#qid#RGpzKA%AO^g zN8S$mD;^S?`HANo7S0uW`s}?2;W<>6x>usZ{u-w*S7UgYs$^8~zKYo4Ok3&5D4qZN zZ)B0tPS>K_{WR$EOx|z51n#OsrN=XiKGe@2%14*93xBBYH1pl7tt8*`o;z2(+`88X zOP)x&15dmozpLZr4t{ZO?9Fd6+uw*T&l(o19WGc3K=o8)Rm8USpN3DOuWskRDbpJ5 z^cb;n))%cXU-k6T7L5w}Uf?AhZ1vJjR_)^Gey8cBFx)(y0V|_wom!z)gX{$daqJEWQ+#q0NDvN{Pbit_3%nAVa~Iz%V)hxLsPWsbJal zg5bPsv5q}Tqu$^Ry=b)G4eXV(7(S3CczNh%uSnm-@O24+6z zHZ|uFJ&jF)mJP0nR;QRkYIMP$H>`fa_0gy*g=?y`TRFmyHV!7os^^@IXqB1#h=vC+ zY@(SDwO@J(lzqQ4V~?jQmvfb*Bdg&+SPUdi{{wUeD@T&&L#4QM2o6keDp+e4rxb?7 zM#<(h!41!&ZSx|paBEq+1K~$w!mtp_(OiM(#9`Mq4)OEY`k7xMsc6UTHw4l+rt&z#b&&@?YpQLRau+NZqJrXJvZ7`|! zXt+#84lr42Ww%d$sW}ER>zv>wP$+}_of5tsCsqint`I+D_NkLLyehjQ!z|44Gs}kC z{A`p8kF~FsVsv+ojT8?0fx5`97`DcKFQ;wqW5JpC2a~3Z;07VgwI#9O|iA!_(h+1PD$wOS!6h4LdpO_CKGj#iaJgz`3#G6y3q zBYTj+dBM4sj~}VicGCO9mgswsVBO-ni6Wa8?m(=hkAEAJLmyLF@)lu1lZ3^>ub@!P zfQ_!@B>b?DGF8k_f%>tiV|Pi2SvuUJr@KYI#aSO_seE*V!p5POg9zmb&6x)@!ACDk~%EqXY@F26@)Z7vR)rwb33>2?U@8}8t2synfm+-17qp z59LgX`mos-r8M2B0A;Nw=dcFgP({6cs`2-+cWrSjAtKc>(6(|4O$gkBxN_uA*UCG_S<)>9J}{ zqScVxq9xJy`FEy1WPQN0*PkZ}96P-#R^~#8e%g$o5PqSUsYnhrpqjv_@o)@sHnO6g zU@mSy1kqegP4?HXw=ax?;+@r3+2N2xd(x4zmNqAx{_Ewv~&NLpW zhZuwWYqg7K!ba&`T`zcm>dI;M|$aQPWjhYK{&)&bcU0W{ECp&~vN<6UEAjUVaPzcc#d-k;P+BI!e?O>TY{F{SS3=f1ww zzqI&G#W(Afi}q%mUZ;A4vYb=iw%jY~5Ksn37!fPm(F$fsjI!*KW~%>~WxU=(J9$~* zRP^&Y+D@N`#PMIrQ-UmO&kTz=u>~RYOErOQNZPhl2h!5J)9?-ZBCv8|`$0BGo6ydX z9V*S+WHLNx=6k<*Eh;AMEy2-@bH#7TmHKXH=u!%E*K0?g3vcNt<}JV{BP0fs z97F0<1Y`P?VXTAt$c>Cy89l-7&w^0?uh$EZL1Auc+ebLQ*zk2%$Ge<@h$ojwPdqLp z%iL#K3AVdvY7jYDn(MFd$Z?%}b#Q<=p~1R5cD#mAJ8p7NrjZq&1iJ9l&>@oXMD*e&G7;M5D3 z>)DX$Mh3@_rF(iS7YhCDmwSz?*c$L%ZlY?Jykme_mrii+Zzbnf0u}%cLk-bf0U zuf)36jX_Rs^D7Vcye-Veq<*oJ?}$m?U&iQhyZEYbcmU82c~+O-!!vu{?2&M(pb~ic zK4g2C3)W7Qdd`nODvw~+ctrjgL%jOwIm^BBh%F=jWfGwgkXU1tk}iND<~W_QpwqAE9sRxym#d# z#WDo)u>GX(2R~b>4sTR#Zc0k;^RCI749zzwV{AZ*_lTw*B%FFLSlT;4@4t?N*`~1@ z!u)^`7MG$um6Jqk z3Aa6O^n!<8kzcRa>7(D!EM|=iNb^23!eb6X?98DHA;4P9>m;r^%q0Yz%`$io+MV6k4J1*r%)>Jt3|d%kMCSMB_#;F$nh*LX|Dsh!SR3kT;zC6L+=2zEHoxi5 z1R#JW3z9c%?6LBIiq%|I_AFpYOP$uQ6i!ahb{pyzKtck{RVD~<+>O$Q){?R=>ZA?t cwrTW@pnWRt!j6xI!tkmyr#w$qyIoHEZ|7w000000 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-101483.png b/src/olddocs/grohtml-101483.png new file mode 100644 index 0000000000000000000000000000000000000000..9efcf47bcf13432aae3af88327fba4b4a801582e GIT binary patch literal 740 zcmV#lDpZ9cD~{I#h$(COGo zl9o_OCbR%&Bo#dXl>yMkfMg^Y(i@q8G44?;L}EZ5 zlJ@H0*qw+wg&yz@NDhIu5>@|W zpoAW6bnqT+^supor$BAI@C|C)flLjWLq#Yv5v)@S{+kJrc+JQN-pC`_K>s8{eQXDB$$+VQ_Lw=oenDO-=_Sk zNZduvG4~3)YeqH2oKEO_v$213rHVrXU~?NV&-4oWFM-u00wc_*CK!^Y+n#LOJmx)- z&w8SeK9QTxw#0xWg8&i)Q1vO$0z!%O0!NZwNn{e#K9Ag9YuGArE$Ngvn@H8}P`JcA zydz$Z=qHC~n3scnK3)o+kC(#dV@u)f+@HPY!y~>FPod*_WM_IZX>fI&6$^(JP^-{% zHAn;IAR~a8tk`uk2jK4HkU}k#T*&N>N_59`UUp3Ag32a$T6mvQh{#xzEbZxjhNLPJ z3Z>z++1Y9+^gYk6X?aW`ht5!MPY*EJ%MJ;HXHt=6vr}w7HGMlO94+K!wro!iF;o=yiP+B!R)-V|J<)|3gj@$eZ4gXlaA}8 zIcOk6_d5ZHP0e0~C6FI^WfQQ*VA64|`wgj&Bn8CSiB*HSoO;ZqYz43-aFzK2Tp%~C z^V0L<0^s@%eER@S8qE(}8ub3NGnd_ACGLQa8_uf6?foHU+HsW{s4bal1?WJpp+nyu z?agI(n2po|au2B10l-p&d7WAQZ-qic+`S*41rGIK@0p*tj+gZ1GfHRx0000wD(_ literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-101485.png b/src/olddocs/grohtml-101485.png new file mode 100644 index 0000000000000000000000000000000000000000..b896524fb01c97cdcbc1e44cae2fbc000fef5831 GIT binary patch literal 2644 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-101486.png b/src/olddocs/grohtml-101486.png new file mode 100644 index 0000000000000000000000000000000000000000..9c5510b30685063e32eda2d02d01f363ea079105 GIT binary patch literal 2279 zcmVaKO;gS1_Sv-9A|IUfyr*RKMu-s zefsls`u6?lpmZOxqo6!JwZ#dakTx~jchZ?hYov9hfp@Qnj zUZJr|x65q5|JF7&14&juyHX3AH_3td8>p!!lFH2tD^0DJZl~>r;wrKqNv_n2p&0*% zHRPxYRa#Aws^i#@Ff{ejW!p-inC%naRb*3Z!=Kg`+vvwh5(SS3w~h70gxSs4F$C)B-{F0H7%pLZ}5u!fwy@Ko+3u;k>VkFvt ztjvllK~cmw_oK>COz1|f)cOMe>gQLyz51``7t2urDBLreAGkD7FHj1op7C5SUDmF6 zX>fjeb!D!2DbF=s#p@M#ZP#jz=nOTK=7`>O7(KOU(2eNKfN}jj8Y@&2hYHn54i&0t z>9X%|g~rgH0bPx9R5DkwQ+nvQQtQ`Hi{&)-rb+GF+xi83KL`66)Z$ZCZS?jY%Fmz{ z3re#>a6VuUzH*QD8$mh!(#7{9t$BP_?$I7lVmpN4@35r+b%`DUIH_pTI9rmmj*q1- zZ;o$E2CYy}Gys4+xtBEo7eEcPg_5R2b5M=1`HtjV?|Nm(*TUDkwey9~oX(<=71 z{5H5X0SPdppQz_bB65!33(J@Gy#`_w$-yN|UEW&1L_nh)MVFqs0+fzp69=eb$ry^` z_nzgu_8k;=d8VG=(iKejHv9#qaU z1aL&DWC}$-U1l!sUuZiz8lY2Ggc8cPUDQ~S6Uv%E2p|;;B^OX+F+hdl@){>)kkD<7`O8z5wI~2#aCBxuvC|zlM$(n!! z3`!5ZU-;cH+c{~o1GMma&+?^xkhB{M5&P}48O*KmF2Ftd;*Xi}J=z1xJ=z1xJ=y}w zLbl9FuFG9`Aw{X=df0wTsorHyNzPO$kuAO3{Aw2xWNXgc$;IeQq=co^OS0tTSbwJL zQI1?WNeMDgrBt@;i?^+rEqU(L`#V>WcO=wHvgG7gf2QlvbG$K5=}Y$AQnnOVf)d!0 zN@6m?kAsp@FP9}F$NDo}k8%{sB~Z?0DO-vwKnZNAYZ=9KnW5?4frNTVmV%CF+R&pr z3gu!bR;HGbY#Cgxr@)qat@Iq@kG7#C)XQfnKxu8%qoZunVhpA4xRfntm+2{DOJfp~ z*@yvhLA`vIJd|OIdlaH$W)u?Hh^QaQmXX`;DP~J)%ywv4841+OXUWR3u6N&Kpln`b z4r>cF>1mV@nwi(+dkW4ZF{UuU-cc`*Y&7-On3gkz>h&XO{|V(HD2^&6vZd!Wn`)YxtU3Q(9${&>UEFyfO3!a zzk#xcuiQ*O7Fy5kaa+&1FEU#P+7j5yF1{jMK^Te%g?By%q%us}I1nFrzEKzxGkcuR=uK>fYSLl39)dr8J4O%`=uf;3q{)qLsiDA&_Y%%^Of-E z7>XpFg`@4TMCI8p6-j`PTSA#hM>M|3J$z;EEC^4CgrgjkSmohvsYn8R+!D%6Iz-_K zLQj#eM4d%jGbzGR9!jM0xTAeikq>A)|D04se4eZkn3~+rSHhdDBf`;Vh9;8i{> z`HkgY?g_`6Z&_IGE?l{uDJ$A%w`xS6-x&Bl$$uT0L{@=4qP_qC002ovPDHLkV1hdT BJm3HT literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-101487.png b/src/olddocs/grohtml-101487.png new file mode 100644 index 0000000000000000000000000000000000000000..0d356ff17498ffca87e8e2e0c5cc0404eec49470 GIT binary patch literal 561 zcmV-10?z%3P)rmD`qsAPhwTqg+BD|NpfU z0$Q}L+NY_j)Dn-$&P8jOD?cCM3(d2ToPE+5;=**b=6K#${1)evkUXs0gT|Cv?D{!| ztZ#Wf3OBsdoU3J+@V#LGdcS^Ge-q}Ys6)9#aL;qC`yG$EKZwB;TWmLFpLwApk>t^- z8Rd*lcMGC#ih$N*VnEeaj2UxRphF*q&|*mHVk;<(5=TAtt^rxqgSzj2TSUX`d87y4 z)mH`x6sAoJY{g@T>>&M;erUG8g;6pg^@R^6(h$NLY zp5a#_&OD*+v)%5X{ds6r@7}Dh+?%*Z-}F^*<_T#R?mUUOE+?MQQY9a|`yp=;C!Xpn zEZF)i14=S}YcFHQ*bG5fWe~N36)i>G%j=?6nbUv>LGWZU7vL@oW7t@RHp>7;>_9^! zo}s%Rep|#-zyAAh@1`H}kiGe*`W;Wicw_wo9)D*3gwts900000NkvXXu0mjfm;?gq literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-101488.png b/src/olddocs/grohtml-101488.png new file mode 100644 index 0000000000000000000000000000000000000000..8d6246153ba5ec700a1d95e54fce14bdf04babfc GIT binary patch literal 1967 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 Y3t09|Eza+Q6#xJL07*qoM6N<$g4vltiU0rr literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-102412.png b/src/olddocs/grohtml-102412.png new file mode 100644 index 0000000000000000000000000000000000000000..de9fb31a3cabf7816c4bafc9e49969ec936d78af GIT binary patch literal 1040 zcmV+r1n>KaP) z3d2>XSxYN0FegZKmvo4O#8`r9e4jLDzR)2;mR!$obTf*6i0tGsg{uG35aoKs zPWhI)S}o4SAKBqO^esEf3;+W@07lI~DvrYpcCz=Yz1Bp+^n@oLfyXUdS0DZ~<1IdW zhr%rsuj<81c0@ZVCvsWPKBWc)gM$lrr1|1>H-ie2sL&2D{BOgc8 zgM;a(n4d#)5`e*#8w30iv?%%-xsDKK@64px_IaS8=A+p`@ia}_-4J94$qpXcaer*r zxZP(D)(!{}4po*iH(IiBK`r+vrE%Hk(q0wp1TD5}&=JDyft`NjW3TIW)>}U-y@-iV=+tATnlMde%P{g_2I(=5M;moxf82sM~^o+*<|dMwJ1bIm zSK_k1c53?Cv5K(Ese>7!Zx)C5Jal60@^-SS_t+VVX4_{R~m+{Nm zA?hk)S7yhW&J!f_+;73+1ZNP)UQCpwPUVn2K%Vra|m-R`;Jzc zv?Kg6*u>jArZJ^?#0rWJZju>0j=9z)ucI7Fq2R@&9pR7XsG4F*ixA5d`X8nHGS+G{Uh|@cCJ#-tNjusZ}h9w)I;IP=F&M@YU&3>Ir0*n=M^jf0000< KMNUMnLSTaQ%lCKy literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-102413.png b/src/olddocs/grohtml-102413.png new file mode 100644 index 0000000000000000000000000000000000000000..29f4afccf7a2207aa22426a7b25cdcf125e2e606 GIT binary patch literal 2836 zcmX|Ddpy(YAOE^E*BR?5xlSfY7ioxuF)@oHBjlP;D3tr;I;XINWrtP5$i0bN$|lnd zaZt)~+vdbv=CVjcIP*Kd*ZJdlKCk!Z`8@B>=kq+D=kt2f9qg^al8TZ50D#dpC`WdXMf`k^2J!AfbH8^J#7FW*@i|Tonju&7qG9_JXd`4 z;K_p|Wnr0Qu#n4`=z(1ZqDG>>A_}jI)2{*#tL&0?3(FvPTd>78k-k0w{eUVxfvIV>Ha!eT?TGG0nXqm+6eV$p*L}jN!cezbQfZU1^W19X8V3{n9ORSLN zDbWk5=I6cj#bH_!LE2qe2Qq;_wNgNnU|azJ4mC9>-^(CT9x{zT}kW!%meQ=QLJfZLA>Sky5U~56wU|+vwvcV1Qkp>d=O#C%9WoOQ1DMN>VG4r zp0cr51SjdIGiG&=Qd0+yNfB;6p(Mydl2XAT-b)w=Tx%gkHr0^{PLxh)qrkFS}*LC zU)!+)OU1v??Y8fhm<($eeXz#3J3*9xKO zx}|gdk^5&#C?JL$YQiZ%u{y_N^X2s?@3ODTx@F9LDuH=w9U){KP*g#p^hxA1j{O^O;`H}J>a>)JSCh2m$xrCLyGFs)uC_P7yo$G{m%FHq%MrwVKW-Lns)3`GY* z9X{u`*}W4dWeKPZETWvCZYKm$kb;0TyQhh!{HQlzElJz;2`H4)GxA;~h5G#9w3jYf~n>#ieQ+!ZWnniIIXf(Pp zW4|m>--%v(m&KR5f}vGL)_ z6}v8Wx4TNFwwZbfah5e>PqAm?Dn}T>5$&z`%A_H7s*;SCOe&ICS$gNWGYw2Xvv>4V zzGQwe@&;0NkQA>%JLu7}YeyRw%X)-dcI8>Xl>dzGRmSa(*~G7n#=V90TzY~@=Ho%3 zK<&KI1go3Tkw_ReBJL3y7Xz~ZuM(++)`yZ`Ql5_c90k2vw=5&T*WLf;KMyP9F548z zASCPB=;h_gsp&-nwI8fxjPrNQt3|vdQ=KJj>g`u9H7 zq3)htpji#laId;0x#O?8$q$;|<6P`w(CXT>5B~w}Pw6Em46o&`P#^G#wiBP%dhAC0 zT6MJOa6+zf!Hd9qJ9IAI^c?botsyw?G?Z06oYQ`Ce$Ff6r3^lfd6BQ(5CjAjFCIZB z#FERb7~p(ear4U^MbV-~Wyl$yE}=q#(fs14mHd7w^Qm`5tNbE0#aM>nol`D;7RP`B zB|PgjKDk|WZ9V^4sCT+V>)O?jv?vJV7D$CJbd-yjcO^)uAz}z(VxS}ZpU2CCy>I`E zH$4VKOwG6+WQkTFB19SofwXvFKlC9ydjjwON6keZW2Vj}_jyZ#czPFQlX^3e5RYNO zV-N%$wrDJETGtzYVQnK4VQi8pJP@4MvM=FvEUqg7jHT($lBhhi^Fjc6vPy+~(b*Z+ zIn#(y`6wehsI&EW^%IX`^%A?JH6LbOS@yEE|6@Qqk{Ba2`7om(ws19|zJz z`{PdHvER6^lT?>qJSC5Y&ee}TAL@*TY`F zLPHuEJRGCi4+LA?OS>+9bx%wro;i@g;GG@~`mwTu=f#fI*d;OJo`0U>$$dG@Z-GNY zAauTWa%mPLB-!QE+QoP^K5qNFLDUYo9>13l>NOEHkfIN_6BI@jVp_}hN9OgahqW=P zRp_PdPj;x};cf?SGd6{5qxim{W>K$=u;8{YnN~hDMztlUVT)qi9$In$*?xr}Zm!SjXk|YPMFx6+XAbyAf+=7hd_c=Dcko zNOt{Zpw#)&6FpRTo9i4lEM-X!=t(2PzLC!Z{pQFyE^DM#>`wvTVpMbZlOt zIF~b|oAuYPC9#3o8cIOTsoHsICmb~f%9>PqEK!Xl*`b&7nK+cgswq{4YK_g$7}$^< zq!3*gNf*b3VGYaC078>&ONgwg6hu!N(Q^<<5uLL?P)Fj?p&n9OR|_Rj^@($4(W4WP zB-z(uaimDXIWo%?To;wkEEg%4l4Au!6&74xb|R2(liDp>)<5NVQ&SmtP|h1hC)d(O zaS)_pWhiUsG!H605xps8;Mdue+0MX)gkf7oV~7LCZd2<3K#{5=b=Fjdsw62T&Dz$6 z19c=3`V#g)koc&c?1zmi`C(oVWM8F$nS}FXj?25|m0wuqDYwEXEn2Oj1tb-U$u~&- z7UlKNINsD$$tRLjB73kZsj6=5i23>wOi@a%o6>alPC94vGoh)nzYxbCkNqGml}HvD z`)KHHTsuxrFY|mzQYKsD#_*G}tWw5Gp=j!iH3=u;+2nZh$}cSQlr=g@S++V_m^u7J zAm1YOTa@RMaone=*ow4Q%0YFFS~10#cZ@S-IXa`9&CMiDC89B1iQ`E{(vTS9MaCqQ zGP_VMn#z)R44R}`YnkxqcD|`bpw91~l5n1EyQy4da?3@^4SJ5K;|1GPK3bsNAoW|6 z*FWR9vZ+iGBf5bcQzBJrBNQn$hbA@!doiw>62@NC7HnE?g%D z>Yi+>!Cf=G1=&lI)FOXAN2od?5|5!8$gzxV-4=;~V|rQ5EW(0XdANaz!g;dorm~e; zST0iT1j(|E7v{YDL?GWH^;?wJKjXNjsYV41yMVC)TF8H$=J`o zxji}!(XW}Z5=vBhjm^y{l=E#qO4K?UeVpFkNYt1+ML{T%rU6v)h`!QmZi^Q6PdN(W3&Lf6r|ciw>wS)>Zj5@Isw1XJ-bnK+aHjs>J}{L}iqms_-e`g9 z)}F${BO#J~h7Nm1@W5 z#@mjmmg(i+yJq!J6ccbLe)}in@lX^80C@ghJWSE(;U^Xrr>7rxO>f5;Sk;zQ zo!K|dfBYV4y7E`}tGMoU&k9mqg2G6$`zzL#*|#jEqEgZ5;U`usZccB<6@Z#|)2hzw zOTkprC37j_ER{%B}|j$u{YHhfo-aV>da}n!c1_<|J?mf(0}E7 z=;df`Ay#{>HLc;ZzD)gj02=#pa{^F{230vP9-H)m z@rXnGwRt>X0)XoIfYSjhcrhGAJaHxR&Y6 z0CruC56>KJu$i$r;M6W%xbAP}Y@i1MoF=9XwgCXlYY#x07Ga3>f|Km$Dx5v2HRz>i zjvD%U`kR^tjt1=)5Zaj(T7LgSy;-}CT`adADi}uPZH*x_B?C2Q}?2!w^_3{n*?{QdI zLE#_#DV}oEL6fX{L++L-KX6Sp;iwv^`QEs0A-C@VCazZi(`{vlFdr;iql?h0ZrU%E z4sk16_!UZH8=}2<`9ZwtA23(Xy-E?#Hu!bCM zMis>6aK5aumP&bKlks>gaKv>??Q-KLHiz^1q&ho&qcXt9%wt*NS)M%1xGl(1IKJD~ z(TA%?PcaPEdX5D!B0PLteq-|nyl!|x0uEHfJ-V#OAcCQk4jku{c|xC6b`?t{IE7yp z_w5jfdfoG$&^)c1>>dB1v1Fz;x|*-O;q6*aDl(JMMZof>BELo$c^APyP_G|n$i~|c zbK!-9Us_!a-Hi9e3<^t!K_*Ypf!YLJ8)o^e|J{B>k9(qb%0_khwezwgzer}6-Vr~} zFu!p=9(xO%uz3cahr=XmXqrM7uC${OPC-}^Vf7w3Wf(aFX|hp zos<$D-poDE$R$3<99kU;ldLZz86~?qx0-n!9;D7U*Drcy&}4hyE-`p2?6?f13D#+n z`IOui+Y>`ps3@6(IWn7@?$F9dA#W=rVm~cep*5EMA%uih#5#Eu7W&x^qqMAT_aSxf zLGRk6W28#>s7R95bml_tRXySr86{Pw7jMP__WDhe2*7}{RC$|Jpyp<6iyTT9vS57>&6Qs6UV!G}Rbef968Z?zBL;^j zA?Z%hl3G(fc>)zE3t(7q)=v(v!omHieMuEgH|gY!j!6dtVf5`{HM7vZTqO{1o4MZm zgP2+j*YDuZFCF@LPkfLi$Jb#xZ9cH{HB+?j_;Y+3b$v9yR#c7cz#@N)XD0UdPwRv= z#Cz3614Pn}2FZ~Vco@5r`H)ImrM|&!K6FpaL_Iq|6usY5%z5JTx{w%kY2Zi?;x&W~Zb%%(*>K-T+QIpZ^26PyMWIGc59 z)pDc~A-J~5>cqzWr;S3eqNuK%(- zr3OOaRZ29+TK1BAZagh12cqO9s0L^e#N|d#?JlUepj12P;qtm3a&NJJ#tGu`uyVDE zRe&)|51itgN5L|_7Yw;B{1Oo{KDn(*O85<2qO0znXpvTtNB|ey3dDmO#Jg3zOoc?W zL-64OGg6f^L6%2PthqGeA|nkXD}_YzEC9`e!<5pT!>rNpNm&)Ry1v5Au`e!RPSmZM zW&Ofix~B}qt>=XMyAVm8?vnE@JbyYdO#4r>K~B2k1x+ysnP!ZW9ch3}6584CVC-&c zB2}gZ{Kk)tEc1k^qx8ryFZy%QCZH@GH_cB)mH=KCUG%%VK5_N>CM>h4ij<=88qE*J z4R<^bpO8;WI;!WIN85#SuVX(qInR9}j9;PrksIV#%|T8eixS;9j2w7Zqi84yg)Z=r zyHdEq*>{%L#*GVok2S)KJd_?#-`^`kQ}ABV`P9Bb+l=-3Yyk-VFmCHm^$E1W9G@cH zyc@nA&guy}+3QXl>Q{YSNP|zQao)R;UTdmVvc>P0fuf7a-=&&wikT`={F%Fm`K#GHgF=#b@A9>ASDsmCPb*S5OdwA=zaM5v#?T*zGZ(xW`4> zH@BlK9d(bKGwTmn4a%`2_}>xQ-u3iudIh8BZ$%t^g=3wEl%>rsluD=8CaI{dAn=N1 zFy2X;(YUV$wOe=VR&|Eb{KA40Vm3(JVtzKhA+7?mhj_0DZ&c10%ZClW#$LcIijBn~ zKxR4z<#;=CdsviuF8Kl%_B+uA4~fV;Oh1XY?%J{DMabREWAkM5~B3bMS<}nFmus(;I@9j3{wNR)1WjJ`($svSnUDv+TaLZd&d_E@YGhu zyM;iW|9j?0lZ$kx3XHN=IsuhN&1Mg}R zMurN2FuQ=A{;(ZrIdKc%As2xf`G=o><;FiPLqvMX{l8Pc3`0b|i#^j7zfN-**_&F) Sdi;O2@dF)W5Jt=K`F{a;Q@sHI literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-1027211.png b/src/olddocs/grohtml-1027211.png new file mode 100644 index 0000000000000000000000000000000000000000..efee40081e15bd7496fc31f07b4e947595fc58cc GIT binary patch literal 6696 zcmZ8`cQ{;K*Zv@)_gJ8_)B;-}U>xKi0L*S?lb**0s+*Yv1=ea3cdPGGb<8002OyqYW|v0C0r?0301c ztO4Lhq4ol+aG#kNm;!FBlY#ZOcaFMRAizy*(r^a=z%;1?QUyQH*?%`*kA6rW^I~-8 zj_9kOGnArtNIO$iod_9U$K-SVP(N3QdCB>hkh1G1LFp?U;*IlR_kq2aSvMp7~zFP?uIR-k+ZgAszndZ?+!i2!OqVBy6A zcQqGrmudSWsrL_sW-bSaL_irZ*nlqouX^P=Qmo*; znAMTUh{EcxQi3Rfxt~v`56)|71(8>T5l@@)a5$cSZJ56N;_)}vUYT|C>3hQ1C>Ss& z1rG=WvR_226UuM{TL7FI51-*okT@E@^?v2ULQ=Jj`pY~Ldaa{bn|nrN}Dc_pguv^6(};ajPZvZ{(a^L<+8YcIF8CAAq{ zH0}oxVGFuyylSe>e&T#3+pbh8CgIt}Cq8$8>?v+hI~|``oVP!lTOs}M%yZm5E6syC z`!6!PKcys}8le$y)C&lO`r^Ore~@QXsHl10t*}Rv!<>*RaZlZd>ib?&;`g+Ye6$VJ zJM3y&U4;?Hpo?~7#ogY?D`uAHuDxh7>UAUO<%v$~ zPotHr?*pU}YMmx$OmRy;I+`?daP?`g1Q(V<@=ZT4?lQBA_vrHz`G0P3>d~9qc$hxf^z+0a1B7 z;lPi8r71pw=SM}9=^vlyolKcUey;H>uCk;i(nzINg{Mf5OiGNKT9fhiS7i~tx|hImXX z*2m{Ac!=WD+ck>Xe^>Wbaf-SJ3vrqa7@`|3?+B?fO{j`ImBD-N1|6<>;_1*%qDA6F zj+If?g6LkuYVmG2hr`Jsy{+6*rA4cvs9r-6r>(h(x3QJBcOb&It~q+)jzrA!AHj2X zrahlz_ulPDGSM-xz3y4yb85dtpk<;BbT%AJ!RdNsESg2sZKwwkj{B)%2>s=M9U4+R zlNXGwA#gim29=t#&y0(%D7Ht%{S%@(Qcv>qYJ{wEx6=gXXR7{gKcCdK+fL;_-Y@&W z$GPOkCauG>Xtl1nP2X;pV*1Zu+Mz1z%xcGGW^^nH-fMW!?L^{~=wjYHZ2muAi;NZ9 z)n?jBh24ch#T!JwyrN7mUb*>S$|nc#pSx9IE;DQk&uaob4|~+i=vh95Y*5q)TSb+P z^}X`P^I5K#X$k8cXn`J+Y|;s_RGqKTo6i#T+ z51@UGJT!ma7Aqfet_D!#vKOLXCkKp8)E2OjA#5AL&Cr#5mNVyr>jUP^A`aNS?2_8t zo^hdcoW6YhQ(g}bktDqJ9dGf=Zq)$ktBvulFxnv~aI?UtPIU8DO5K{3%Up=Jn6jnC zt-y(*dv@VdpM(2&4T4-n-ysXgu@1U7v%+4fCL_kN#|b0x?82cI$y|Fig1oexT<9XY zRMNLlJ;>uX6Tg$^yTOSc;z$gXDl@_+48{K#*NNBQBH+TNm!H5>L8;>rGv z1D3AYWOX>LbCg;cxHZM!&hQ1nRgr6^_kHBl^5 zyt&$q(K+|9oz5h+OwFA!>z@Nwww3-N{7H7+T?t8-qP2Dpy0==~T&sQ+c4v0S;rFp7 z(*Gkl{2KAS!4E@p#;t5>V%}l`9-G%WYi*f@$tQl_lNlAj`w+x-zT9Q`=dYvbQu$4P zGmgv_9@K}hD%`H4vB{B)6S}*;m_!hYyD!m3X_Evagy&Hk@0n(1L{ptC6qJl5_6eu! zUpAf0jmBp)(%gRm48#Mfz0HfkE7Gu(A9T}MHzB0tIU-mhQ$S9c*PB;Wc$35pq{sU% zm~1gQDdgF@jiY^g!!)u+sOSv*bIyzVV}K3@b%$+2>46A{z(H^A~#{O%i}g-ZP)~VQOz0WIxLn zjoSvJ)4dRc|5CRtm@#zblT5^ecIj@!gxI+1!Q%`}iQOeU^{j zhk8oI@Rw-8v;ipD9{wV{*G=U^ zhSY0mtdvyI7Merax@){H&L*sZW$VdwD5>o@h~PFC^mwgJobFKJ2mg`zDmq<)>Nvq$ zZgJ?>oVeUyqtU+cuFP%;s(%VxV&(V|=Tl&DRMEdWq0+qh?$xr3{?z0)3|jzh&&9hR zcpU{S=!GYcrJMTPwvkaX#^qARtuj~t@q^E5@5Sw+|rxe zMX5hL?x;Vtqu*mWA%AfOo}(x`Duv5MiGtvA*cleu;Ig__1lSTFc~}zr$#UYEP&VA- zS)AO;G1E68cOFl6>$&V7sdH??!+bU2ypGC5|1IRY;}gPMDNLglZjwB9aD+Eg@~}^z zT7izkGs7us%|h{am4`7;w)M-6Sf>Ltl$=3yvc2_3IK; zpJ$_h4x%xNF(H?flrqi^&!rt1+@&84pMii8nEI`U>dl%^lRCa+NzI2K+QJJZ5d>aJ?AOGV zAH5yg?`XyElk!7%UqgX?tZded{<2n#{=D~utK;Nk`K?Gy6A|XUtU0umZ`|!SkZiWS zqp(y|{p0z$BR7kk!Y_WL?odh7y*PSzeeO26#|&t~{6~`?JwTiwmN6tXBu>HsI<@24 zV>wQ|5_Wp%P>4{!FM)kZN-Wlo4GotAH(qFEXH!8n1V4B>nn|k->XmxxbB9IKmzlLq z6?O)f-gozxaKxZ+TU~*GcQYWR9#)9ea>882{r(2G?K)oScD2PnmA@kn?h_cK${5>W zMn+&56wxh6RCkjr6ff}B2h;fz3Ts7Xs+-I))weMDn$@wAR9kCyv0_kUJ7-P|2f;KW z;(|!qS>Z?zxw!Gu-kHC$FILYQ6WrXOnn|`!B*(V5D{?C_aQdvBglY9u*SBuTWuq2K zl3uwhG!XyXdb(0DG%Q}qy=QL1S#eT;8cpwm#$^3UB?+Lq-QaM!ZX^ zDW^-@2_Q<$B>FYU_jKMVSaJ`6O=Eq_eWjN4OW{NFn`a;0@%Kv&G`YrEy_`aI2ZlF1RRQhPb(YH9}-=@ru8-; zU7vvnt~9d@RCHU|=AfaHmc=cmGi0gB7}L8**6HS+O+$G|w@@PoqDI18d&eAFEp6}s z=T3*3=M5H513i8;egECGmWk7}_8UNXC%d=VXLvsukyVp>Ns|`3xt#10=H4|`+QGNr zTy@~0oRcH6MuJna`Uiy*88c0kdq>^qNC2LlwIUo=z5qC-U+2wrAZhQH}-A zDlQOfeoD1PlL>CNu9_W>TNb-cCbUtZ9gg)GYOsFEd3oiW!8kL-G3 zs|l~a_QtFRKGZzZT*(Ba^+0^8X7uRB)4r4sjF|47IpM(f?dL`ERwE0(pLvN=Ox4Js z9IAd3$9Jb`m}W+!esoWlXCT+5JX^heyWd#dl~1#TWF?XSkbj@NVD?+(CKz0;hL4@u zhBTZDGjokQGv%-k6)Ph;4~<(dw`FNG*aO^cf-wymBp<)k3U*KTn_lIiVz{v#0{r~# z4z~2v-?P#W9U1QIhuT-pe{l}Al|HAk6O5e><^{21s~O=(g~3+HlpC{-mcH1-2WxyF zfuV(>5F8GVf!9;9SSZR2>+!6g-^H#=oGr}f5jm``Eu$wk?1);yTIIoXk6^Wt)SsiG zL`8Fy<{v%U@WR{T58_0Oi%%$!t;Nu{{7Fmc4xHJw>=$6kuh6GxRZ06Rw-n^rylD8w z?o4GGJ|NDL-$0Vxp+LM_W$n|9(}dc|wBfkBdd3{LM{hp!+dgbvnYJHdmPj8d;Sd*& z#al{yEY_I^owrEq|H!dZa~14@TV-q7yG9mo@NoNM%g>X3IqU{%s?IsR_wpp&F{w05 zG@%NHfsf$EMxCbmg`t&K(>IM!pE#XKaOwFo<&y0;+N%W}H$RPuwgAsyNP_MkaSe3* z;u1QncuKS#C9Zx8(?-=rbWX*?V;n6&SGHe5SVC|B|IbmzBz)HPXK&*%_z*9o^N+Ta zyDrbv(b8%8`GL|Q4#Q9BV#%9*dSm2`-=@7qF^CrUUe@Q;zL}!_^#Kl*anw-I`Nv4z zylPHgQ^Tuw$C!qQ<6VVmZg2Oci89D|ih@Rz?!*}jD9!F`$b|~E3J+?I;us|=aN`$I zaWdbrBXiwV^WNce;bcu-A2A1Ns_0Q2B`20I;No9!_-Siw7;D7WdJy5DK<#@^=Q;}8 z(anC7HNC-O?h8hmN(DRy*)t0OSjtzm4L2Qi+;=`4YM+xeFlmha4#XLGU3z@~Lm5)` z4MsM!)*uY{^*Zy!4d*Kj zOwESy;?gZXwL+qJNMh~C^jh_2B~9d86AOAK2t;%6Z;5mRtrx!$xe}a>1leX>5C2hK zY@x*DysEX zpWLL*fVnZnqas<{q=snB%it?KCuo>P8tmWTAU?TS(;$Imz9OR#UIPBiYcW+xBIUqA4+*(rAz`p!#^ zGrQPFyCp5i*2`%FxEbcVn&Xkbc)81dG)UFUX~2Jvvgcjfjnc#hpUfouNrx*Mv9ht%^k{_3;3uz}d1!Nwr%Qs<{&FO#WKe#8S=o{Q)YKjL8nYK`oh zp?XK3RgSg(%gz6PttW1^Srp>|kt9p99Z$LUF8eQh?}u#S_v=MV7r@yl-oKpHJ8pgJ zMnPWY>n16}?!d6=tfusNMK^|xtvjl;Z_~{&+_QKv)u2bXZg~o_t$hgkC1F%QIlzb129Rqn`+>dBC8MHvpzS*#$t)FDG0Wf$ zh0ej+Ur*Cb(i7r!)BK~)9;Gd)G7BTQvB8vL8ODBh$r3i<%vNSJ+RcP%rY;BinM3?6 zIY-k8*@ws~e~*siZO-Qwb9BxgFijx2&l6Dm_}M@r~W`YqgacP%&A{;fbf(*ia2iCsK{;zn*>LA&OZr%rX0D( z>3-2@HVPWf`0AD=^y2G8&n-1f`VXhLD`LT-gZud-JEj6K!#eQZGb)tFGl;!ZEsk)^WX!vNd{cB zN{-lXkr&Ci2VliqTY{BTt?Oflef`WYuLdnw*+z{hQ0=*4q^glS6fvb0Rd4+mj%*&rdwn<7|L`=yG+R9iEIv?WW}7SB;SS4O&R! z40%2Q{z0aMgHM-Hnyn_>)xOJoSJq#b@gPoAthKA!Pms1XT$0+_t}!mLd!T44Zw>RP zKDV;8d=n#~3WLTCui!5pOS8X3TDaW<4xQsQ;^sBuU1o*F7p)>?OHtwC2nw&D&IX}} zEyc9yCV0w-tT|0NlBK2Jx1`nGAACQeupKtg|EiQzH5*Jq$4!_@SOT8W#zp0?8|-!- zM}l|tnjR2^8%L@8l`S^w=Q5F(yjzkuNE9O3;qh0oMvQ=-8eLCK=Xde?hl^yNCQNpP zp^6yw$OKr=5;4b!Q)bK~7eokIuWzS5S(tVl=AJ13`h#2}ziDSnvrSeyVYqIUV;K>xr2Zqz zt=ePe6@VD;oIDMVk6_*<^~-u<;zsaGfZF7p;oP-8=Tpz9p*is2ITE8ARP?@P?g%_*Z&XRq|a#p literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-1027212.png b/src/olddocs/grohtml-1027212.png new file mode 100644 index 0000000000000000000000000000000000000000..6c694f625b99bb568feab2f6b9484e1a32aa1b87 GIT binary patch literal 1085 zcmV-D1j74?P)Q00002bW%=J0RLN& zBDDYj00Lr5M??VshmXv^000B%NklOyGj8mLx2W??$e8p0sF?iPIRazyeOv9ER~))Hel*<0pgK(hoU! zc{K@rQ!7p%J-YKjoh1vW2e7NVb;Dr&=H14%M6~l*Q8am*IAi^rWZ`s#0b1B2 ziJI`LzY?3~qH`~iqzlq$;IK;5b6WAqdz34N33DJxGh-&nZGsvl5)`N)PXZVySKn;~ zRP6eSAs4l9jbvIf8mNWShIFtBy5{jvB7y{fr5V$tT8TiK7V%Q#inCBJB&pLiW63y5 zL>y4$ix8Tr!q{Qu$-@w3d{g&;Lh|*byRJuAaX5R6*z7CDs+FWcUICGSH(`+GL~gr* zSGN&sK~i<(x;Hz^gQoA^K@U4&8HSzO2Yf&)J!&32l}KW@7Rj-JIYW=Fxo5mtP##BJ z5hOW<^xN}HqRgq6C`pLzOQJZ^Kt*m*yq&&?IqfIu$3sJ z=`#ldVA6rXKmjPbh*u_34Cd+)`{{$_I#(oR!6GC%E2HK}SphTo7CGs_18Ok&$&*~M z?;##rBuN8h+A3)nUU^y5+Pds>AwykSl00lo-)cLLjiu%sqgEs*L-R)M=l!C>sm{E5I_$>7SG=`OA{UfDqcB)% z<+z5(IP>LrL88p5&Qv7Y2-3D!~>gXrD>IBQ*P^W=iXXpt(|#mtwh07ROB<38c8kuSfYDNEpy753XzZPWubxW$9HK@ z{FmO^V6B~aYpp~Y0P?%>*is{1$fd3&`VTC%%qeFo#Ndw^Wt+Ascjm1P*4l};R!Jl= z8j`k{We+X2T_H}fd+N`{)0SG{lrt4#@W;3*-L!4F(OVm=wG(fxl1Ph*B&p0ZmYVfx zk5~-NyUX=6mRjMIGZi9JDgId8CrRx8TD$Vr25araTSH~3c?FVTQa|r4H3t9?(!FD? zJ#VQMPCjQ2gv*~g#Y$T++qylbW7Y>5~Vu zT?s5PPBwY~&MAm^u1RDq9a9IhUBMuSCe`KvNT49%xh7F@yLt|Neb$w$9yfgw90f(5 zD-zpL5*i+xxHEsjAXvPcuBN6B$3j7o=ZZwG+w;WXHeG!MQYeUcUdci8jbJB&N1lgJ zC&TxUxS=4^^Gaf4O9O-YFyLGJUL7LS@mhaDkoG7j^1K?U{&boTKu0irb@ ziRUj!pMoOKtIJdPhQLw=Kd@ZG*k0}7saQO}z7k)&B;J9S#2fIEcmw{FM3O4GZP2dD z&q8HxKp_6&%1lt{ow9|nyct(1&?^yiFZWF;g5ptNRo;zj6ig%*&u-YMMPTI*fOHez zu$)B9<8t9OLB*2TQS)D}IEa8#il!RldOx%R8gp=A3Jueh8o;PbodErMMPS~Qv&r1R z!I|O)tp0gt@ImbxUD8pudeTT$2DMY_W}Mb2v~u)GoEtbeQ`I}Ui$o;)SZHzm7RjTP zZ1J*1v&BIW(3_yZ?72qz>1SEO!Rowtst^@Fuo(6KV$`KG!4N9Ki)lkKZFKh|bY_&f z%m(JMYr024kvzJ3W62II1w(!|N(0M+Y;o}GNGy^^uf01nI1YIK2(OBB16~quz)Ru{ zcuBkgFNxXM-c&2ugL?a>bz*2gONP`6%xB8a$H-z}&i3>jt*khOMcRNT$&if6fzxP{ z4@4FN)7?05bbfaxX`XMBA;atTu>I%>$Y8*_7dUE39C#pE9!itje9$dp1CRIdf!H!| zp6%&5YDffV!WZ?p?c61u2Y}WPk24aF*>EIQolkEDs7S*UaYuR literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-1027214.png b/src/olddocs/grohtml-1027214.png new file mode 100644 index 0000000000000000000000000000000000000000..a7a0693896c96eee1a8011f9e700cd8302cb0614 GIT binary patch literal 7218 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 N5E&J4jg(2q{{j}B)(!vw literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-1027215.png b/src/olddocs/grohtml-1027215.png new file mode 100644 index 0000000000000000000000000000000000000000..4b43183fdcff95c0b813ce9735258f13016cd43e GIT binary patch literal 1058 zcmV+-1l{|IP)7yus0wxMTn*>|4+h-a*GD`{-NQ%_sXwRrin4THTfZ!8F6=f zmk$Y=aDca$2R=(H=K#g>EHLXN&@5Pt9y%#nyU zO)2rr*d11y&%hQ13`sE81f#-nA3ktpmN}P~^jU8N=DF#?Bd$*0b zJVZEN*CgafEHzCjp1bNlS%3rZ&rWx9yYY!1jdlsW(ni`3wXs`Q-*2s+E06(c^imVd zk%%`tuxKGgW5|ZMV(@!OlS{Qa$y18Pkc8PQxV9#pYb~NN#G_+&Nlmn1 zu4%n_70?)Jp&fdc5_}*H&3H#6vVPP(AKObUwC>LCg&oJZ67RT(fa4Mozv8H;ja~DUHW9|L z(Yn<&87_O{9Utn{B*X%Wi*rbm9MUAGM3d$09r8~+%h@~Rp9GR7cuq)%e&HQE__8$Wlqs{SX|zPtGUuEg6eXLw!`A` zE?lMa@Xnk|!s7C-hgSw&Ta&oF3pGiv2&%~`DuLnhuDF^jy&|Y4r>KPYWBZG?vF}b+ c!&VOW*0! zcD(2KkTUER1~(p9k!iAh$c`mBK#fS`=;Jz+(GJBlP5*Ou1yTOz`HJ{GX38C|c;x;~2S=+{~D0O4=wl$^g(p@ZW_on|vwkEgDxFWE}T)AIY)Wf}n zBujFD8j;A+#`S3`catyRo}emIxz?siqq{X(zf^5^AbU35if7|K;30mGf#UTB)0ju! zlc>y{^o4jy4pbu!ITE^$V84Nh91_nDAj1=ni)Oui;GJ4 zX0LxEU6@oG(jLr_fE0e06k#bJP2Dk=5iNyd1Hs(Z#iJ_X~7`Gqn1ns>wlkIbv5MaUFzP zS9WlN@8({WZjCp88U5i7QX`#X&q6*mNCEp@j}LqVHH856Cd8 zJ2@FP#WkyZ2jSXr1sS-+wPI{N z@JX)0p2i>psz6YNozJhnUE&j*CDUQ}BKX)!P=?RmH{sx)CPItybKrdwK^gYGAMPID z$kgIj^iT5?We`7yClXhlNL+bB(SN0QznbT}{_ARX@_bnS&VOB;CXBP1$WJ8xuK&84 zog9R7ON#z0nTPuo&h=ks5+bY#GfLIDC9cEu<_Q0Fd77|U-Gc@P_^)$y>l27KI^1$j zTrrjQA^z(>(}c~!9zh!J-;mu+KOy#W|8=HrkU+fhiQitclaI>b6PROp_Wr(ND(yr3 z*X3!#W`2*EG~7R-gpwWLzlL?g1mgX-huO&iOkiG)m4fA_xZ1ErE0>1M^ncM{`0#q< z%(TNWu68o<`p2j=eO2LI83Gl;x?uwGe#bC7Ie^z`EYBx#)srvyq>r;bu3;MPpYY6s z*1cPXnYuv&aUa(pJ2@T-_jD}J2iIYLBRRr<-5l4MG~7SIs6I{j5&mmfH%uVj|EY&C zJ2`*}%&|PXkpwqA$*cZ&aN`S`D+#wh-)gNOe*Nu@3Rt3&)(;k!s&c_MM;iNuvB6n%B#j9!h1 zug-^2Mse}gIWd@7Onmi$OV4XYb(#3;N*C?fx|3dcUh|M(or|wtmT<+n^t@(Bu+GL; zuT7oilP`#8jM;%03xCgdvhF`<`|9m4tjud34KLv0tJ_-p>&&I+H5;E`osF;F*2MP| zt~{@KNU+YuS8q=O-zmPj<>RZ@DYh5!)g3&1^@ka?M)B1h;;ReaMdHd6i7QVet~{BK z>#Bn*bVQafeAU4fI^xS0E^&Q>IP!&0t|k)KH=vy_+#9!p#XC5-S8~hWW*A;TI$t}Lm z*O7yJCAWM7FuZ_vzHo2cqQyIMaIfT+Z@~{Qh&Nw2nQj0rU{pb@zB(P7m=eSA0v^7) z&@mofAilcrT_mnNk+||i;`#;=+R+l%bz-!mC9dxvab-i~cC^Ix1txa1#B~Z6J6hs8 zg^L|6ah<}&j+VGi;bKQiTwh>fM@w8cApItm&~aDS`2#Acp*~5HuZ;iz002ovPDHLk FV1h*druP5< literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-1027217.png b/src/olddocs/grohtml-1027217.png new file mode 100644 index 0000000000000000000000000000000000000000..4c65d68221dd9f7e0e39777d4c7bb9a8911fa739 GIT binary patch literal 2608 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 SbRn1k0000-S?-9#8kyr(AwdOtf6fsb8Y;J2x% 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-102722.png b/src/olddocs/grohtml-102722.png new file mode 100644 index 0000000000000000000000000000000000000000..18f0e21045657ceaa8db6a0d5b081e62bce9cd01 GIT binary patch literal 822 zcmV-61Ihe}P)@#!#t+mfWS8#+Xs|0pi06~%%E923pMsLOYdV!pH#k&nH`G{Ua0sXGyjVJHe_a$ z4~OoZ*auYa7sPK``sw14K}|{Ih1I&mYn4aBC1K6 zBG`^1n|xV_OgUNSe=Nug59W54uLy$c?}vTd0zwB!O~+wM4$pise~rR+T!J9`1EGNI zG4m@@DXS|fy)c&LqS#qQD)}W}6T(rR5#{i(Z1QE{j@cSJ6kOrQqkcuC8JaSPTSvlf zVt~1Rv!aIcU!~y5+Z!YFkVb0vm6To>%W_Ow$#Fn5I~fqyhbo(VS-Kz`Gh^k^U-%l? zO}}ZcA5Ux#IInOrHZenMY^C5y504LNWNoDyQu<;nxF#XWPy4?6l2D^LH@3<~Uy8A7 zy3|rn7H+|fZzos8jqfoCaN9z+Lk6rWoX=gDK&hNmV=G0OHq*UB*;td;4$@>Ld?lqX z##*Qe#ebXa$jeerh^yHR!KI+cCSQuNE*57Me-0>Ie$9&=C6(e}0<3tnXBRZ1`%c)Gynhq07*qoM6N<$f-D|x AnE(I) literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-1027220.png b/src/olddocs/grohtml-1027220.png new file mode 100644 index 0000000000000000000000000000000000000000..7bf86f3ddbe314a2664cd9cc57687fed444631bf GIT binary patch literal 2430 zcmV-^34!*BP)-*K}%8pV%Nz|P1e;1Wm)xCAnLyEmi+ zxdgj`oxvs8H+v5yz|7YGE&)n7d%+)r02?bL!9-^!Z}KAP(Swe`pdXe6Vf8Zll!xI0 z(X+9*x+t#hcV}cZDudB~>&4hf6gxRjLRJPc8T~gD`}fO!2jF;lf4`)gbenF{Es*ZS zJFX)A_|N`5-EZbk*Q%%Y%@()OZ=9)0a1nSHVsov`X^T`Y2{H&t;lKbDLo@DeBc5<_I}~D z`S;{r4(-t|ow=2y9=sxT>f*M_LolElk%1y*R{l6qPSRIohK%a)3$M+;r-Q@x=$Fp4 zN)qO0vMz23j65>PiHwmOWr>q9aWWEQQicqD(oM1--Jd_HLq@PQ`js=xaw~0RSl=qoOX^x8`LpUU+=sCdBHe^#&l_W3$Hz?|VQ-GTlQ6A<~}V_ifTTZI%VOi7(Ow9%OUBy9+NPkWfn(7= zi(Z}Kr*y1l)qylSxm7mCdsY5%dvmnd_=WVA?jgkX68Y&K8zDBS#l{Pe#m0Y9b~0`i zvNo?xjm`W|PX@E<*QxE+I%7Y5zpen@T9i25Z^ZVqcn%vk zN@I!MCzr3q{#}Ueu5&BfnKm52)=d-nXa?}O5!;U#J5efL4e=hp#v|EQHQB87nD}J5 z*q_O&n|ZZHUAbf@q)U=uAVZRoYFE|5gJdEP)zK!Vp zF}k5$(6UiBTlE&6^yqh&aP)kwj#DoUS=z`D2NHvw580TP-R9c4;H-6{bsNH~eMaZk zoy1LZxK3qZ`-~8K{AjDs-SlhY9EaZ*=_Q0r~{~W#a{h8nJ>=93KlBzv5l&{uAydQ zo_S}oJdITw+Ks#i7aIdM=B@*};hn0j|2FT9dERMqcc`O`q(Zx5FZDZ_FV04O{b&sG zgG-Wr(rmcZJVzP2=O$ktoMr`cI0dNYLH=ZWFr*GfA4#|5)me%B9!gr|Q0-;;6Lsef!;70kb~DadjToc}}VIY@+P5 zIIEBaRjZJ-aTWSb8x2t4IJ5l0G+q#M&chq~F$OT>1eMGZIGtJ`vWA!w)#Y+GBDoQp zk91P7Wn#|z%{UKl)M5-_#>Z-I6J4*4naBfci1}0|l`1019Au&#P71b2%z3xjT)a_> zF@PB-d{xW`pmaxV@V{dnLasCV<_0~Va}>>V6aA-WliB6yitqM z@AHgMqB|)w$}AO?SI5kosrDvuL<~GqWn>`rIV&yshDd_Uf^)CNaIoLQoMqv_V2w1Z zYR<(QwHO0^f=s%b$CzajF_&2jL~0rNijib_PRld>`?$2OYa$824U&G1!C=3KIdAc_ z!5V8;)|`tsYB2^dW2>hJK>`2>Mvq3G9V$0WLXt}MKv=Jjl1PHpcUevf_B)vK#v2C) zYlJtJHRs}uT8shAIN8QbkqnWIzc)IO3M*uFkoxR-r|OMJwq6Yrg56E@J27V~-sGdP zZQ~btqZVTTGxjqZVU{W*NvUoilG;NA%E@x6NHXi4do&vxA_FF#}+ufQ-CJKtW9Mc;g%~zJXa9=mjz7!a&vh%+f$Fh&dN#qm`K~ zs9J@rjjNEgaTOZ1abaB4K(D_C(=~vN@jUaL>7%Zv6U=dOR~p&!mUq|d?V-x19 z$1sAUB`r3@#a;Etu5qN7P|L;!8~2&-W8|yHFd4Rr78~N?u6ktmMQp6noWR(7%{1iO z-{T3$SC3(Wo-0~xhKnDO-3j?DLF3r?VKW^Y_g}b=k*^-Z06o{V*bEmxBD)jvS%Su~ z@xx|1HtsXu$EhfFk&Jx(@Lkomx3F=a`94Oz zUq{akEjGi&kI3$Xe3qbbZ2X{EANlr}??dD}1A4A$vHWlSxz*=z@qMy8DW4^192?)2 wG2u8W!-g}*7!8)<^>~x9mW7R%671#lf8joG?ePK==Kufz07*qoM6N<$f)BT=uK)l5 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-1027221.png b/src/olddocs/grohtml-1027221.png new file mode 100644 index 0000000000000000000000000000000000000000..998a0b5ea7d94dabb98b16a11b468be3f0e7729a GIT binary patch literal 3496 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 b*Eb9ns_Jp0cqTEU-#;)TeN(Vf*D2~hy4;?P literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-1027222.png b/src/olddocs/grohtml-1027222.png new file mode 100644 index 0000000000000000000000000000000000000000..bf578470ff993daf4fc379ef3648085f20e9577d GIT binary patch literal 1451 zcmV;c1yuTpP)BzoY8;CFmCE98F$j9 z11~2?A|tz*vo=Li4`C$3PP%Y_vINP%&)Cg0+G3ee&%uH@+9??kev#R^pgIP2dNZD&!2(dYt?yik-ZONTRnh z+#iP8Jsltb{Q2KM1Wq#9$^$kP;7datj^JX`b>g(G6Q^yRIBo01W^8&K)cR4eskPn# z8*}mypN0cw1-r4SU5wAkQ?;$0b8oz>mCwmmY-$_Ju_>w%_k$@c$EMg>jNfd=rUEWD zoeTHOwN9M2b>g&{=3|%KuJmb)$8V?IMm)b)qw(8o{VewJqLMGKf{et1#vDhw6_XnG3YrAJuj#>Fq+v$kUl3C6yip#XvEWq+;89d!>!h zlDR;0m?TR%-FaVIQ`B?VrXH0a=kajQbn~+Vk}Q9vB$)>1f?}-m5p8-hM>1@U8@)`$ zwP$nSy|u0_{M#qVAU_wBW1SD@WEzldhpk3=MX8Od{XI6d<@(F^8T*hbZxvj~5EUeu zN4-lLJZuZH?XcApAsLSD8B?;z_-&?xTE;V%8J4K+05Qvw|03t)Oe}HS=E7-PCr;bv z8H-JazSlYV_Sm#cCq6Mpe{C$srqZU#(DeG-raW&5qS{BMx*JhqYOSN89rz1iYq+}( z#;=nV08|qAdA`?QM*uiBZXrj=!!fRn@V(J(}_Iw!-})PnD|+R$)USDLq= zt;t!}=FYcu;8QLE3z1|Zr&2hmVp^T8}L_!AXxuC^z(aKRT8>lL660a%Es3g36i;t zICU$%*Y}#HEJ8_=UgpKO9s}%XW9)NGTUmDNHnc`0FZ<=XZZVt%ovO5^t(?X8N>ba^ zNH6wcdCLfEN83!kSMp*~lq`9}2>YGm_G#ZM$+WrVuX1W&$u?|a|-N+`V)F*$+CQwL1R*T7llXD^HMol{)T3;Xl3EsaIP zJ<7pit#6gJeuW0c(7-UiQ=&f96|BvbgIKbTR z=N2_U7C8AUpoIQaR8&t*!9JRY7!V&txpEH*jR*^_Qbg|u+e}!&B(>KYg=+?f!ua}2 z;zinw0F%M?^Z_bnQGS=-o)7^eC(Lp(y^s4H0gy2R0M8b!FDW4{zye zQ%Rg1yusP^@w%c(W~rCZ>R9L$YnO>~{6~#|B*%6~sCX*{yC%~NEDeJkBhE$26UQH- zi|0>NWLi24%g%hx_BGWfsu=AQJtsUsalOCh`Zf)<7bbNg`;Ddx#n}}T3?5O?-j?7t zn_07k-Z8(U!i}O&5EA9Pfp(6jr>uuUvq-c`gAF4}d5eq8onH6RU5RL(pA|!A1(PzN z0+X;SqYs{QrgPHC$_z!fr+*m9@5JBW2Wu+{>D5xMJKk{8#{%u*n0k|SSp@3567*hH zTSfOD=HKn(W9bWVSyPA_ef2`viwh4!0R@uo%Y13R@;)3TiAm@2{qdxbgi^OkS1aj_ zihxFvn~tP7lP0~rA|rQY1Yhyv!eGNM<<>Xv8e!YKCwMp?C0TAI=`f8EQ~AAwqkcck z?@D%YN0UsS;l#l@ClM-gh35XV28T%)Fopj+ovX?HrIn?Ed-3)5^RuHGs1*NeQD^z8XJ6} zXSk>0Zl~;~B?-oHlr`od!yXuvx)i%ftD4s>^(A7b7?FMNA`cGGbCCBHhtWIWm>}ylyJKh|>A6Q=A zIdZ(EHLysb$V_3!z@VyujEI84){Zor%vGOse~XGS|61z4!_sL5bU^KW*|ATOZKi!I ze|%qRJZJG|Ly>1FPU6cSu{2b7E{W?t*XEXR=5}rW*m+rTkaEJcexDG3dhxbDBTbMq zF~2sbM^l;2{im0bE}?JutP2Z>Ugv;Q}|~7>bQTK{cJE!72%=UK}}^SH2%SY~P#r_qkQ& zpgL@7+6we(8-8&Ht#pRS=H4&0M4to z2oj+AnljPorg+Xe){1N&cg;DIJ}^7P;yfbFdS7a5=5Hm?6eaq&QTrh`yMx(hl z`F`Yl?EW2=?ek0Afbf&A)XGgY=0jpv{yzXBy!JYuLs|3t!ISwEN?V>iae8M1-^|}B z(zgBjNRpNMXr4KD_Puy<`~#hzx`$K>Rua195!oJ$AN?Gx?N1{)#9r};_9?2YM`_Zv z7??P|+|A$dYS9Y7#0LOLfu)xOt)3m}lr1~YF$mU}KyuMO=RXhrt^0^Zq|L>5|K%b@ z?HQ|1yz_TUs^|D{*X_@#BztEx<4d8b$uQt zm3!9mEh5`5!R~?7#EjOvQ^EA>V+DB2m_nW%5u!CbmAmsE-8;f^zgIJx0DWRPu@$$K zPjR=2Lz_Jda!p$Rza(?w z6-_P$6;XEMb8^{vs}3ORc*K?L^0Zeir3&4MlZ*%?v9is71gP^S zoJfxaKM7t>$*0r}(Re`^ieUi=v)8j@H@kEYAxRX1pXn7Df-1hRZAji-!$RR|Yca}k zX*E0A(y@K96w?abc<;@vQPz^WbREh~QVg+(Nf({mFTLaU0EVxBQQGddhI=xmu9>Vz z-{nTIZhPW+G*>!_3D&a*?$04EIpEwo?Gul+xd34p3iZw>Zz?|#mqHE61NJ3ub!`^! z4-}*Qj0e)RUpD@wDSz6?fBxH=CH{vXe>H*iIn)P#=D918(lZ$Kg+_GJ|47~Bf=%^i zK#A_Zp&69)uTr$wV_3fN={cdpt-mCOKF#`ttWY@mBx}~FC>uM*zSu|dRxTaCQ4MFkq?S=iA6j*d z8(>6+S!O+cyd&Niq@g@1jo_w-e) z6DlviM>?lM0HFjk_6j)Ne#b-;@@7|PTHjSnIyeF_V>4hgBKs!_HJ%WzuQF1>o1;&BVW^j_TST4IuK>N zaigwIIOq~T!i@y3gVY+5{pm{}-#w|pEcBEIg(vyQCSx_`nsY5rUPbucz+NOf*^oDO``F$vqJ}o`3YPzbsjSZ;75_qYpVwTz zM8+JyoQ!@3Ek=$^XAZ1{8HHqLyMvm{c(A&0_h>Wy=^~L0z&N+rxc3E2=}bJ*qB2aO zb*sB8XJ|=7ktqJA35Z}8s~D|*z0(fie)FM*$?(y`)X#s}L80wD^m^PVXX_NmCOEos z_!Bw(=;ZI=E7ZY*yR@0VC|z2?qoi<^|Ayi}cJvA|WMdTw#juJF>$C+WwRe#Q8D6y= zlNDbe5hh?9ZLvDu8m!6mG=7YDDo4uN6I{4+%=8S5JCa`Vo2~$t}N%2?oSLd zv?nsYyKW73&Z=3;awHPH^PkxM56%7U1Ii`Y0gd%aIU}&PsTmFfAoVjB*Laz7o;e}@ zrj>;o7*$#Rx(G9%gOz&iO;{jKfxsOu0Q~TTaHr>(kdkKIl2!o6DsU-|x_NdR@mDuxg zc$+pon46>t(hL+TM~t)KY9)_lww5au-0E%uWD##dgx90|Q%XDuC*8i;Oy0o z7K~7dhg;BfCNdbn3LVmeIM}1lJ{q?Gg zz~LH$Sq?M3rTMW*Cb0$7^HsK;4K-P&NZ$~VZA%UKnSM<9r;ysyZL_7CKK8}J5;J-N z*|f_gWAknNaXkHSgkn&I<*@zB?MCC5I4VKii2NLwand07@-y8j(6-gh!347PLy26& z>fq{Eo(sRJ&VfoP_{^0PZX+|)xx+~PeOIr_UevBr2k9Eq1~dUwBy{_^FqE9coVy_n zt&;^B@psyX)w zolW|DLdXixm@6od4Pk2xaJ>OpW*As9BL1WE1F6_XyK{9()iml33#riymX1N0Xf((6 zSUj2>aAgXuh^(&L1( zZmc0&c%fU)(z=~=^+FMErec~15pXT4=5h#r?=w%#j$`>@1@hG5f9w1YfIXYj_toiFyzVh$%m8(zbBzWL zu|tawSgw{Wdqp(|{tV*Zb_yK>JPYb_p5Uy2oBdq2;mpdp6%jTn%*4M#YMv7D6 zskzJSaP8%q|MtZ{h4uw?E+&CSG$6lOcN644J?@6{>@M5yf9smV4cV)Xua>ZoayDz& z-l}z0uYEpn(_!H`ihS>ssr^eC1I85mZwdo z65Mu@LBeBsQj1Qi+iMf`^))RBZJ`<&EL#6hx$ZNlAJv0jLunH}hJX81*Ct7$wVwBumEJ6&i>+FJ9j13i@2{IKG}T(DwPuNfLE=y&EWaG z)+4T^Z2vj6+54`YnmCD>ARRKvJyPx@$e~}=elWqc#YH&sMz`C{KH7Se;gG5X1G0M&fk_L`-#2D+1XB0SGEX=Ru;Aofz0x2k+z zUlXxa(91r*{Z0Fd>SuGe?0V$%`+?r~+>zSP=P5N5xlURC>~{84T2rJ=@WfW?hTBEo zx|#WAVqSm4>4l`##sJ?>yj_9vzI584%%p*eF7VEE>2LCap4{(aI?h}7FS|n}#cbP0 zUL0wjgJLIN?dibB_5Cq1{N=d6gByg1ufKrc~v1vweN_s^^E;X zal4i2E(Sxt00jA60e}rT<+iF_)z~V2EWmF_UjTXvy^_2H0YV<}$PpBo%*;WIz`Qsg z-C4zOjH^tUKZSm}IIHVZR@gAy3@7eyeUu{q#-{-g)VhQQ7iUEl!>3U12l@>ee@r*U zljFLairPY)KeOXVY9c;#rZp%oNtWU_%!ln!%dsw;u#QV>^;wIC) zN7*nAD=a4na7)Mauz)?VqKJP%Mhli2G&eX-6VMr}g^#ZEic{X!Dc;hivDEE_dT<)7 z?eOs~1N$j1zK#jT&@bbJ4#y5i(F{BBO1MJnoNE8Fj$CAiZg27r^o^gDz-fJAeoJcIe z+7n*bJwU)ccStz8G)jp6HdEtm#!jTkkEiYJ=a10MO$9%ZX7^+C%oM}1IQ&!d@N^83 zKn=-oJ8(`brRGa?EYlbhIGFzj9A+aPWTz`9j?m>OWls1RoI284=YA+EK%-dEzjt}Z zh|1%T|JQ0sc{utBU3L}$hgg9i{Y9jplwIAhreJ+ZT}YdRu+Q_5%4;_`@-?xz{g&pI zZG1-M_RT%_+SgY!3(mL3JXfx?rMrekG-mBF|_NBv_MtMqaGLfU&})LN4k(Y z)lkx8(@1yCvSxAL;1AYswCS+Cz;A|W_her5SsS08tSXA_lr0?Bq8onDx2*MfZ7})W z>9FztI_(9~?W60uICr0bM$CC1fLzTB=pF3+Nd`x6Hv7d`hdIHjaRWg7-2GF-?WpUm zDte5$i0UAr!5J-$s&q=IG4Sqpw?kCvMheFrZY_lizc-9`xV_g(hWg|-V>w-ylxf3* z&&kjnEJwB0s>Ao9cvJ4t*DqIpbu6DJUZDD^PdcuR+d{wwN$xfD%=6@x)|X(b~aVUc4y^7l|{yk9hdWcFlNdtw5e8@iu(bF zZN}7#UCbJnxn9d{ixoW(G|qw;yP3+#Td0k&TFMTc1NsxyRq+1jr2j$l-DrET8+Ptr z*-LB1>gia80HzM2BKfs7NcU#MzUrww4BeOc8-3!Zk3DxmIaEs2erJhVTEQjQbm76b zqM97b*Ockog^v^HNk$zTOO)Kuwy&*}G=nE;UHq#qR85VFWMQT&0hyFJbT_OCa@-%y zoQ>)-&_JuH2R|h`UG;atD|;&X&k(iUt`2T81H&g90oN#rhq%-s(uldbu>_7FCbS#T sDFBwEmyMaT#SK!fe{JS0oNXktjc2(FZ|cI{7=KSmjJXw9b=4#0-|Mb^2mk;8 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-1027225.png b/src/olddocs/grohtml-1027225.png new file mode 100644 index 0000000000000000000000000000000000000000..d28a241a253238a7aa0ee6199cc68ea1f4896004 GIT binary patch literal 1013 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-102723.png b/src/olddocs/grohtml-102723.png new file mode 100644 index 0000000000000000000000000000000000000000..e33f7caa348b99bc8d3b51977c4854130dd46709 GIT binary patch literal 2365 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-1027230.png b/src/olddocs/grohtml-1027230.png new file mode 100644 index 0000000000000000000000000000000000000000..b505ccfd7ad0f9e1686c36435b0a3bd29adb2b54 GIT binary patch literal 1636 zcma)7YdF&j9R6=*nYCkvYCM(8U&J0Vmr8L)W)>lF+%lJz%C(zZ));9-*cOT7h%AI? zlALKslQE)*m4t&X?bN`Sw2V`#irZZZ1Tml7Ry{mCcEUpI;GS7!o2v?YC`iru-&*oPZ{c#= z71a2Yj_pOpi#3nMS)tQbgf`h#6q?teTs6Q&*`+0>G(zz-)cYeFq#v|xRg*;C?#kdH z*d0fl()EH7#K~u^R-fCty#j*Spt&KNESIRoK>z`|b<&_9V|?}WRmj+RREHUZ8lS+o z4v$@g_u*jfCep^GW+`OM?K_;#qXPh^%otL5@zQ<4Y1eF%?P4`N;HXZ-_1IMN_eFXo zlh`3gL@D6$QKrl~qqZQWm}TW9YOd3VrNVoV8n*3q;L*1WeKiX6*?qF{IkFkZOF=c z^XT@Yx>Pr6YFclm&l;56ECVj29uYj<8T?L-dnR4HhY((H`(`uBI(rj35C|hiheZEC0YRGlUiAN046c~URL|Hd`;pu39)A zoBBMhT9^M`@6^D;qk!vNcQ)9=p6nX*Rbf*q?ojM-EwsgusO;i3!c;iVCAz9~e$r6) z8s!FyGIPI^KNewmF)%8XzLCDev@Pu1-FoHG8ZV1!eZ=N`@cV+Q^G&Kn|F)K*AkE2N zXog4!i_m<9%&mhrNrZu;Wy5*8ip7UeALrLknT_1dNxDC@qs~~U_purSFHW%Nd3u$< zYHG1Z6q68`(#valxqY-If4AO&**7dI$+TSdTv|&fv5NO2{aIT%*CA zg4zxNDux9eo^0nAd`tFSHH?4=m`BAlaFpomCO)KAVwyRwJMH8{!|uz|@`||(jYTE1-Pq|jxOlX3A(jK!lA@P1q?^MxH5RDKC zH}?-b>CTeWJ@)JeHyIQ!y!>pIxZ2Enmn)tlf7RLr3W6TeW?|{)lb9Qlv@QQ6H&JK= z-g*tAT^@d!cC|CHdV^jZr(!PjK=~}&bM9DlhRTSOw9Dxj^tN-N9Fg=^De!&V(AQb2 zO+)Qt>!JV5Kg5r)v^ZCX6~!Y6uQ%S3YLQ2cZya^x$zvaXRBv29OKyyufvGSo-9XX~ zjQ(b}i`+3yFppc>tN!5in2?8Od4#_Zb|6S6UiK$cDI*-n4mMxE4BK6Pg=ZOGGO%UF z5Yduv#_aMnRd`MgytD06z(&LbAAcZ(!@`_9! zT%FI`_y|HI#{Ov@-D|Faxv;{O!{$&P;30bJ&v+?#vH9g<8U%~CXY>5}tmrqxHB1e; z62#upb!*-Eg|}R{$c^`x2p7k#Z@{HBuJI?lRXa+Pea44m&j*Bw&DKr&?R5siACCec M5nSwR>;jYj27Gn}{r~^~ literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-1027231.png b/src/olddocs/grohtml-1027231.png new file mode 100644 index 0000000000000000000000000000000000000000..353396a588a151dacf4f091723beeb8ebe370a16 GIT binary patch literal 2961 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-1027234.png b/src/olddocs/grohtml-1027234.png new file mode 100644 index 0000000000000000000000000000000000000000..d6011a728d8ffbc14b3118c0e4e4c10823a195c3 GIT binary patch literal 1864 zcmV-O2eKYFu97sU^Xn>2YcS^_S=k}MzvUV^-W zJa`8gmtQHh=}?;v7g+#a0)DarXw#uK-ATa=APIvo7YP}D#j8KS_+0UC&fLqq4$(s9 zer3`1_^Lh@_~v7rZvgRC0E?j{q(UE*s`ZdGSB0bq;A@Gp81o0M3T`4By-Ol_nfX|^w!5xVADBW z9V>Z|$6ib(ZheVCy9voO+Il3pNs!R&aFC4EIQOhlMsIyA1sZ)-(1`|OGSN@~Jm#JP z+@xAkYt;k1kPJO2orHiUnW#hqaD!x|kP8|8_0bCa$?9|3dSoB)T9)3Puj*?J`n$5a zwSZf&1U(m)pyxurpx^DAOk9WzR$zxdb3gY11+_{1+K2!E)3+^1=`tnBbURx2`cwJ{ z?9x{*%|RyGUhh)6v1|L)*AKd%zzc&enov9$5jY}6vw^)1eFV1aJ36Pc*AVcw z`Z>kf&+ouy3KemmAgRwrU*))O;g-9R)K|adeb*fP8I$aXjLl*= z=E4&6Tv&phvd6lN_wH5DIEe7-I4>h<8o-m|tey4q$6@EJopm8_zdv3l!wWJ1uWRR* zkG96jZi*?CXBsn|V&~f?Xjk%{YwgmL8d`eJg}iiQd1xAYBzL4v%k`|5Sj)N zLanZBIO2^PcCLgXDNkrONJ%C!bCn*iQ&tTG`Pufhmg*m@NoPFDNv+K##J*N<$f(;m znWQ{H&&x>$0C2KHZBjmJt-o#@M7Z)vO~(Eud)oX1<|-i5;^CFFY1Q_aYeClv<%V2N(4jg&8^M z&|JL-nsi~T#!dI=O1}oJN2i2I7o{pZ*hr1%EPi?}EJ4qOCFr@Z!X4$}rG&1gTF8G! zRWvZz%{#o8v2R=1|AtMrd&>v4#c3A(o@0v!1l)W*Xn!+I*0|J)2HI2Z-PEt%-lXec zgD87?HBS)lw!_-uy&T@GiUx){+q=1ty}K^(x+8!$ci{x=H3ro;bzE4ZiRM~&c zlzTTL$f*ULll}pC^YYYtlKm?K7)4HLJp@g(6x+s+#u|bXp`$p2FOH!93)p@$7=>f!81`+1M z67*bHf}RU^HHaWriC~%d^Z=6j&gU4+GCzBq;N4qNUuivVHa)7YlKPtG7`(-^I9*8Uv(evf zdVtH2)OSzQ1BmHc1`+1M67*bHf}RVjspa6W!D?bT_^aTgE@pSPUez9ZmwOU@;yeIl zp}g1lpP+q198NADJwB@$#*Eb%N$;uiFhih@OCNX(~HpWK)0000&HZoBn%r?JpFz@4d;Uui*14u)8kHDz#wKHi4vX2xi_kc;!SbDNgZj z{*pbBUotd}q!l_r>l9bvk(n-e$Dqb-G6?|9nU;iuBwY&&KD@01fNocdWG`u*;TU5d zFG$`tDU$a4^7`J3_t*$;^C_;sFQ1sa&5R_eOme@S=d=^2xItV+fs3~}1(Lp2edpQpuIerXFlRPe8fQ} zk5eS=z*yL3xx>J*Q?k~~C%ohr9DI13>Nrp5S)oKS7TWSO75Rjh{DOlIkF#h}VcVCt zF-l&U_=NBA<6N63kK<6o1d>qD;v>53|lBWEvPNf$9fp7U42b0G+?MPqmZ9a{Id>Ky=Zf2*phs&4nU>a}|PJ?O99&i4pvc?*~)Cp48@wHY}y-omd z`*!z5FK_+1(ivVp@OcfOburT(n95~5X@zW`6%4A|<{oKX!LxnQJedx8&3fct*YRv$ zbnzW;V96eRdJaea^$GmxDNn6mQ|pT*-c>%;XiaQz<;G?M7|$jfoa-p~A0m!aqs5}Z zxXl{bsX7!#ig|2!2}i2Y0;98T*W*E%gYs*`OE~fxtvI54#DG>TzqY)DgISFxYOz+b z)`pkxxjoisqL#6$m9}MB!88B>002ovPDHLkV1lmV B1Rwwa literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-1027236.png b/src/olddocs/grohtml-1027236.png new file mode 100644 index 0000000000000000000000000000000000000000..00e53e46757d20b8d104090ef83c9382b37d204c GIT binary patch literal 1486 zcmV;<1u^=GP)B3OnU4lAp znmaz8Fxl)W91WxNbgoH8VEKNI$$@M~iUH710TsI(bHQ{F6$_k4!BuhABVxSAP|T=Q zS~XUae^mx%jz2W;-u^gTf@z*ef7BQwsrp&R)bw~67`1c_ zTvi(_LBSiVA)1G48*VL{c}N2-PNk_^r7N|~eDiKmQL{+$C{!ff6+GgBVH2cS+9XC& z28DCLLFH`d(genLW*3 z0$++wKuEeV-T1mZz-&;Q|56n*MGt@V7M+0fu$p+pTc&jXG=M3*d-5pj#hy3P5YXgY1A>DB^p7jjphM@THA3z!nfJTGlpXdDC9G7Xk#a7>1vj4yN< z{_4wej-AV(Fzrk@1}+Ei2lnYoUCgx!snF#t;{k7qn%nL`&IV#KbA$|JYXMmoDywiv zETfBZl9;chrKa?0x6|LK1E6Jy6obM_7we}t=-NRztwH*kHLgmLF7(mUP@7%aSJfZz zrl`5?4(x0_W=cAWETG(lg71)YC2ovdV)LxDhv~A(F&xy=WhV>c*U%;TtnHB1Qt7$d zG~e}eIwK%CPp2-%fK}-dGKs}dZ$ln=&7bQRofP9Gx^`T{=wV4$!iGZYXR)*yU8oF^ zE@JXn7r_v8=pJNUAcy+Z!#iLSmKtbg&X~-eI*IwGVa6*nCr&!qfosmD>-F0c);}74 zN9v+`PI<4kE)FJEw{%kY^RzRK&AB|Rr@&XTqz3Vhx zgS%ArRcSx~YY9cYD;H&sf`YlupLH%geXs!567HK&P2r}iDcp25g`2LXaMRTkZn~Pn zO;=O6Se`7t{q{>q>d@3|-lAuT!3&tIy$xB z3@@go`S}?Bn}Fo}^z%9m;A(l&>x52Pj3T6z$4WAr&Yx6iw@NxsS}}ODhKqDLjA_$V&8n;viLQ+6!{Is o{if?0jPUBY_bVXIF5<1=ALn19+ekJ3^Z)<=07*qoM6N<$f@J5<-T(jq literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-1027237.png b/src/olddocs/grohtml-1027237.png new file mode 100644 index 0000000000000000000000000000000000000000..2cceea244d564f7de18b745f6c6da182e4dad3b9 GIT binary patch literal 1560 zcmV+z2Iu*SP)TZ^VlxPV`d4;jEX-T`13= z8CI1Sg`;s6v0m$w5zw#m7@bHC#ONV-J3zrM#g;Mchk`{oj-2ZSVAcULMPJ5Ze^2Yf zq`{8>-l;c-hrMnq>5dwQi1@hbczmomQ#Kt8_8KDdadJgZ?2Z?RQAK3Wr$TpmEO26N z4d(9NhgsP+Zif*pb-C$YBr>*5eABe(P_l@|k*i2=Oeh?$7lf|+u}sn9h_*m_TniH! zV9;rkL<$1qnHfn|!i#4qhfY& zfnlPaspo6P0kT2E@$0h4i*cHz+2Sm49A(#OKfu5kqor*;0Jy%Euwk>F!dSVY#|&VB zbXOaUGtB#lY%eb8@K8j`>uWf(kZ_T`I&?-dok305j_E=Pn=?_>3kGa^G>zCrO!ibv zBolPSmheq&cQ_7d5Zz(-cMqzsc=Fc1_9 z_DDUrUc8`;Ya%7J{Rtxb@+mu2VZU%O=lw*T$k;_bClH8CLrZr8O@r?I1A()|u*z9X zdg5C^l0xK4Iq}a}OKeOeYPhV?)r-9sT`to3BvT^IpY6pD3OkXkTVHc)x3^D-|27fU zD@$bXC)U0+BLx-@PoQbgoqr&7RvsHA4;olNJ_Qe>zO&&OXK5OGnP*M|G8BDROu|D)UDS%k|X9*A9}0V@(YOi?Trq-)2KvN7*3 zbX^$F5m|9v%vvi;raqjwWKDy}SH0L_!)3jM%XF^jDUr-O;fS=octQKe582n-zWn@h z25bUd9l_+SnW=j;kspxcb;;x%ny%^smACEv*>Z;c^AR41T|~zz?-t+1K*oCLBnNz8 zGN!IOGY;iBgiqPy{%)D{rQ=zcUMj9Lbb2kLAU}g`Ub5Jr<`o+*YjoX_DLNY=dbGj< z>2YlUo6MFC@)EGUxS(|SDU;GD7=3Q@X^@|dzmLf1o1GTGDEmetfAOW}n?l`izmdo$ zaTD1HZXz4OO=Kh3i9C1vzbY&zco(I)1t=mbnq~%8{?2~3<{{zcbEqp)MSI*Dq+GAg`A6n66QG)3EIP&Ur(C$quyvg@|!#ugaE#*!}M zS{r+_@OLb`&9ikP>%y{?k5t3S#|tc^&zhErG=Eb%$5QDzRIR=bg&oURixFu55Xi^V zluoLHM7k}y1&ct>e$7tLPeWnH@-K+o6<#9>d-CzZ!(XeSY@8#K+2eX?wOe%K@nH-b zOL`8Ei(~(6WOpoISDLNDYeZouAIoQ$a8ely(T~ahtl1T2rvck7x`;@6wyy$Kn7{MM z^$)+I`->kTe&_vB;m?R%$Y1=v;wJKcV}xh>IbMO`Wj{XpIQ#>_76@T2;`A5*0000< KMNUMnLSTZ=ljHUP literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-1027238.png b/src/olddocs/grohtml-1027238.png new file mode 100644 index 0000000000000000000000000000000000000000..586d48a2a075aa945e3078b3db1fea4a23baa891 GIT binary patch literal 1681 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 M07*qoM6N<$f@Em_HUIzs literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-102725.png b/src/olddocs/grohtml-102725.png new file mode 100644 index 0000000000000000000000000000000000000000..43c856cc4283fe8f5c72c74a9720fb21e84f3ee4 GIT binary patch literal 2253 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-105632.png b/src/olddocs/grohtml-105632.png new file mode 100644 index 0000000000000000000000000000000000000000..791f7a48eaf073df85a05cbf36abaa88fab48e62 GIT binary patch literal 10972 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-105634.png b/src/olddocs/grohtml-105634.png new file mode 100644 index 0000000000000000000000000000000000000000..0b9604d207105fba539539d615dd09b0c55dfc29 GIT binary patch literal 15188 zcmZX5bwE__^X}5pvVe35OLuqI(%mVkbcnQ+#4fpXmq>R=gLFtsNW+43h@>EJ*U#^J zKlgj@{cHD}Gw+;vbDo)J4n#{s2^WhT3jhG%Dud;9003lZ008OY8R7=uMCqXl@q_$U zM?)9zWD28e{(EJusw5A1ib@#o0RU(L%JMRLzBwmdD{+m|a~!SWcZ6km0L3D?%>ZF8 zr6*PIXGVlbRI(zdRS-Z_2#p4SmTE!_yoU<-D24Rw)dWgQU(2q6YjzDoP<|YXWBq~4 z7yX!KpQjV4SFdU6X-t-N z`_NzjgoEGbH0hJXoI&D1)4#W8;8S49o`D|@8?WAVoE+RYoVea#0)&sd*#M*OTUH*# zkcE%8wrDe6V9@@K|7C-A?9&l!+;h9D6&SE%dyFU9W<(h}T`e|y_cL>S$9mH|=r{yq z6Pi?fmTG%Ez;2!ol4&3+CQPyzp|w91S%U}2xoqO3roLrGe!TcC!~+nBR>A1Rbn$pSj!)KJS3$@0!5 z7}N-zRZ~J?i1SZ_D@6r2P$V@Gl=>4{k<|e!iHd4+D`#u~X?N^D3-qKd=}F%L>^aHmwMl#pd$If|f4jlBfyz3MR)gp5r5Q-pyIL&Rk_Jn0hT0RP8S&s9t+;)Tm?(?U%_DwIz)|Lk2{m0U<3@Ap?VLiQY_^ zEAO!Y5!gAPMB#~d93;T4moRfFz$B+xVCC2Bk7H<9l$7}0qJTto&H0zlm*LslCsWdN zjJeSwo~%)q$g_|UN)}z2Swf9_r?H!*ym*zg8dW+D`Z`JD=+=i6&{~=6VWoXXTBZCX zrJaun{Q+!Ndz>KYEo>1LRr$v}6KF0*2Zl4Yn|#xQw)};Go!Cwz#ba|J7#}tyPsaCF z`9~?k%#*MWT@tf#i5`!tOc;`#Nr_bsl-EttZY`EMv)!)I{424DE%Ud|( z0@fL&1qC4qF>Iw15va=JC``Xs;e7{Y6|Qh@acWDUOQjHaNMsLU`lLeE7Oj#5!)_%Q zoeNb{X4qs-Du4c7nHAvPF(@>A&-7duPZ8kdQqO)+%AVS~EbV44SR4LI?#BgsJL3<# z`yMFns(c3^=l#sgi-<4fVOnrUl&c^8wF-G5JDiTNX=Ub(psG&jdr+Uu-2XOmEdWKO``(TfP*; zHSK|Pf6@Gv{pnZEMILs5uh5@D)C$y}-x4Z6Np-IWyS`<8oMt$VmtVIgc+@~XNnYdp z{rJT%|HLPMX={5M$M)%6KAHRS{FD-Cg9dRw=%hWM&>6#)#wEEV=(_n{7-|0fjmQ3q zp=AeG!P$x1=E+{4B1+Ys0znE+BCmVKeeqtRm9b`PDJ>+?PbjFQ^Nz+y(dFLk2ae1g zl1*XzwF*y7bNr8vqX9)5l;rY{p}RfTsa71%z8;k6IL$rME4L#ZL{??L&?Px}Vyk-h5-_x;}L2Rsjqs2+8j7ajhp@ z>|G*$oi%qdNC04s#zJ9`=6mMe(}D}j;WT0duNT6zG@x(n++kTfRMUo8dc876#pqd;80tQgg`31$y| zT#%T4OB6qk_7Eb)Pa=qNYMUG>g%N<>V1$}2{UXMSaKxJ6otw?Y{ZseX`1oG?FhBb2 zjsA|~eNtyeQZYQ+dK^>L0s~?x^HoW6&03ckwMPBO54Kd_@L#FNZ;5^==W*r;h5D0U z{1Nd3w`PbVExUQ#VF1A0J*C$?aR;S!jKl84eLJL#;}PcS7dTSWX+!GI)N=&MgIBaL zt$gkep3w(H=AGi55bv&{NIW}wxBX_noq7UEtplTdw)OaoBTl!U^xL@j{%!h=GXdkt z{5M(BeCd1J7K-TUn^9K`X-mi1uM}9<2I1>2-K3>!)KP0f(BQqD`;Q00_lDSO zHysHm8e�MuTIBdK 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 UxK)?WOaK4?07*qoM6N<$f|7t{QUCw| literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-106062.png b/src/olddocs/grohtml-106062.png new file mode 100644 index 0000000000000000000000000000000000000000..08803d6b9b3b117d7f23820098d666f4f42841c3 GIT binary patch literal 1732 zcmeAS@N?(olHy`uVBq!ia0y~yV4MiVx*R|OhBr=3tw4&YB*-tA;eYf*rL7=dlDE4H z!~gdFGy54B*z!GH978JRyuEui_fdsJ!^i1Y=eQSnDah*VeBY|8c=>>rALp``B`g!R zF={BreA~sP+F-&vL+GCEgqw5qH~s0{IDe+i{$_WT8P^x9&tSQkHYG4)?<%kG%FW-l zUw%}2Z)(3~@~P;pcFA+&t?qN}?Q_l0aY`1H>b?-sa!koYY~eshya-^1qMQ!)4~}lddoPeE!kH z_w`%)C!Y`M?_VFecyE74VezX~w}0!KZ@B)@S9J37b8Yiiz26&l)n(h)!z;_>%@6a& z``&u{h&l7iyB}G%?@F3X_@4RIZ||9`nxSL7`0Si5k^Y+_)AZzv zfRpMN4pdG%rOSCwgLW>^1Ie%#CZrt-(9&*IF{(x!HaeO7oKXLpEYGE=k>svN%bG4@+)_|&%PMZ!uH?qad_Ro za;f`wr>`qKcW;YzJ&)xc@poIPke-(H8#^EGp3Wce|Mm7{^L?Q;bw3vzJ|9#w?~dj3 zYkSvNRxM^1m;I+4BkubDI33a~a+>^7$h+(7s;ZB_>(BSy{c-HywjZBww#$Ihu}k^? z$!S;5Dt>;0N~cpcMS^r!qr);;4j*)Tky^ymP+jqVBuxGDe_6bK`}R{#>-d;kCd literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-106063.png b/src/olddocs/grohtml-106063.png new file mode 100644 index 0000000000000000000000000000000000000000..e137fa4860edcb30b360ecc0cebc563e25052e5a GIT binary patch literal 9244 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±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 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-106064.png b/src/olddocs/grohtml-106064.png new file mode 100644 index 0000000000000000000000000000000000000000..a6c0da725d157461ef00e3f3e8722216ff048650 GIT binary patch literal 16506 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 fXSBaVdU_lBfNSBvC159QgkLE9~tC literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-106561.png b/src/olddocs/grohtml-106561.png new file mode 100644 index 0000000000000000000000000000000000000000..df12c85d1df15de671cae9a3e762a9bde9fd2004 GIT binary patch literal 3826 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 Xf^|PzSzG`0nT6S2zxeKg=YxL&NDsFg literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-1065610.png b/src/olddocs/grohtml-1065610.png new file mode 100644 index 0000000000000000000000000000000000000000..f35948cb963f55f6f824d97270fd7dae734e1819 GIT binary patch literal 6746 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-1065614.png b/src/olddocs/grohtml-1065614.png new file mode 100644 index 0000000000000000000000000000000000000000..b0901b889b2065883608191750243087635843b2 GIT binary patch literal 4333 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-106562.png b/src/olddocs/grohtml-106562.png new file mode 100644 index 0000000000000000000000000000000000000000..27f984f1b469ec179be28855cdee95dba760cfab GIT binary patch literal 5565 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 C!*#I$ literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-106565.png b/src/olddocs/grohtml-106565.png new file mode 100644 index 0000000000000000000000000000000000000000..ef2e54534efab05897cf9877cc267517fa4b65cb GIT binary patch literal 4838 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-106569.png b/src/olddocs/grohtml-106569.png new file mode 100644 index 0000000000000000000000000000000000000000..e4ccdbe250bf1831e60b9af53f88fc3487978fa9 GIT binary patch literal 10726 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-107771.png b/src/olddocs/grohtml-107771.png new file mode 100644 index 0000000000000000000000000000000000000000..6b17ec9d0529df12771a030cf8a715d5b01049f0 GIT binary patch literal 8386 zcmZX41zc3$*65HbpfE^xNJ0_Q{&$+GbK4`z+G6}FdP7204PXHYI$bw=8PuPx2N_IHalP*T1bT5 zUpgw7P~rLuvgVH}*v=~0o*)6Rr_VlKSb)@bLEsXR^g}DM%V6xf$K3C6i%Ngrz=Y)a z#qBGW`&Z?FL0PIuROqUBRQ;7-b-x_9xU&DY<14xoxzc?V5}ENm%e$jIR4AFQPn!q; zU;y7bzyyH8YUM;=Xyp(wma7H9a2IRfkNz4uUQx$^PM233TNiRv! zXMiZ7x3R-f=A-UAWYcoeVJBsw_g*F#`(91z^n81~v3}E%F&`0<=7~Q7Q|oFlFs+}${lBkO@W_X#a6G`4 z9;T{n3YT9E9mGI4nWj)zNVK+cYow%Po#MsD4B>IHB5x zb_EqDNzWz>;k+8FDED=qyRmUDJ5(dFFZ_`g1(~*yh$DF1j;7}+g+q67mz`e=PWBtl z(i=9XQ8P+h^*Y4)#QY-L?f(Uy^)iC(;Zqxh`Zb6+!G_-*ZEd$ixC5?Kj{Pua91A

u*1nq~|kKJ1Rq(7+k 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-107772.png b/src/olddocs/grohtml-107772.png new file mode 100644 index 0000000000000000000000000000000000000000..d30d541dc3ea360d51abe590c6482430e8724cc3 GIT binary patch literal 2750 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 Ef)PVF#Q*>R literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-107773.png b/src/olddocs/grohtml-107773.png new file mode 100644 index 0000000000000000000000000000000000000000..723648ffb1b15b5bc8d86d551fe7bee4f02e6e41 GIT binary patch literal 2399 zcmV-l3840gP)^)inAms z6jqsxb$+C+b-c96%t`Bly6m%r!b0)h?fP@)eS{j2#3N>hL@hmX)WTw>P}&$<7S}l4enI@anNyqc9 zvR$3E!#Vni$v4{Y+LQ!zO}LpfLN3Ldo>|}#R)<9M$#LNe zo0S%erB*NXC$S(Bz=g zCF;5Z%}7oNp5bkZl!ORPlZi+^*@;~1B<8e=v~7_>FBxX(62Hf- zCG|kt$36`Mt|NU%c9!fc$BqoqE=+Omx$G_bXwpN#a!8MPV-lnkA)-STD32m3(tgnB z3z9O9n3FW=)(3JaUN9Ab)4g>*Ia;!2JEb9SzKF=(4|JxT0xCo4iZ(Ki^U0f~$74f7 zs)?=7AC+21Y7<5vghrELR9qNbQPZkQMRHJjU4tPhsqwlkm>jbGJ5i2;MqiL@JTWKn z`AC|JpG(Y>Wygp461D9>4oc@jR4(GM1NU4!&`Hsz@pFbnI!I!e2>NCsCNavVM=(ru zt(#mclWS!f4Y~J-v$4K)VdQ$cRR;=fPfqhyWL7vT$H|h^%F&P16J4LTiw?_xb|ZxED0~b{Nd=mhbYrQ8IKtwEfBO?i;!Bept7lmD?E3!si%epdT}_14PL%w0^G=+zS7%!^ zIq^FH08Mynfp5VOO)alirSVTR)xQ7$+6%v{!_In}1`ia0j zOBbU%+Fz^e{cUW3zVd?bjUO|pzU*(Z@4s5Wm;E*S>cCHKUmf_#t?0lXFFy~rfX9y) zJbt_Yzyo+3$9()*oBgHM@zQ?&J|{g6x)$~*i+KG}lc_@U+U2z-E`X5#=Y`kG@&}s| z=dR&y!FEsJ?rnkYT9_{x;R(vkY=deyq;{j=IZ|6`MeGviZs2atc2D7MmEaEsx?5p0 z$W3;Pa`U_wn)ejcj??HTZ~47d#4hJLH#46F+dYH3Aa4b9Wh%U)nN^P@l)F!Ad4y^U zQoFC995=_PHu>qpKg-z~NTZ<4Oe_P(E#dAS+dVq@_XE0tjz(dTjFQXDZYm_A+yhd} z15{g*+Ig`T6@g49-bpy`B|iDl%t1>D_by9XV3L!cYzXcDFi-~7E>@X{Ws&45RN zYNL-oQGiA0DXJ|{~U?#4>W+0`Bgz-6ObrL!cYzXc894C>cQR+<^vhe)9xA;4Jp%X>Z-s-uihI01+E+Xt zTe*)vhWm)g?eY5v{A}tXet-FyXzq$wZs2alc0Uu`J*1-v8liL?g`sDW2fuG#II`EU*_rz#3dz$1X|9b)5 zt0V#IM(FxpPC_EZG|CBQkU7ECb>({ zYx^*ud!9rz$w~PxOx~YE-IV$~bcrmRt9e0=M){)%Q;&wo{+%_%RSq$Tx?$nOqPI3-)yLl<*8PvU6 ze!GRb5i&mobwOhsG0_CfxVKEVisVMSAIS2!0?7fZ+!sJka3?c9aB5i&mo zbs-R%fNQPZU#43{a#Otf0o`&t@Y5t_b)K%EZq|V(P4NP zmfdB#|EVIm(QXKI%k98VqZqCp$*!Poy1C#K>Rv3r-9p_6nV*8X&;uFPp7x%*%XI%& zMRKFv59qG813!&oxL{q@K;6i6FQD$l^4l%cjga{%sGDfSzf3>R8N4&ejdm;Uv55J2 ztoy!DH_nAVUKhytPa(N=_VHNvouO{JSXTTOt>;K?v|FvvEyR2@)_q^7`+wvRJ0crC Rg%tn*002ovPDHLkV1ldPpLGBL literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-96851.png b/src/olddocs/grohtml-96851.png new file mode 100644 index 0000000000000000000000000000000000000000..09e69978afe77f1af73582879b6f4957334aa5b1 GIT binary patch literal 1426 zcmV;D1#S9?P)W)KE00002bW%=J0RLN& zBDDYj00Lr5M??VshmXv^000F&Nkl!?&c}gXA;Mc!h3o%dvL*`xeIPB&yUmXEh#g%zrQHSGB;B4&`)bGbq%l4buY;qAG&SZxOzTJ#$3gMd*&e0EYU4(c z)4XJX>Rf0Z&o(M?lF}?0mSs^xW4621*0Z%h=1eKCro^D~>Cy~104fGJ4Q&DaR5}LDf?2n{fvSwA=g38&0DCENsSCDcjCsrAIUI4 z(+>fr3}wPaQe&o?YbcB>dJQ0O>d;U07>y-Mxnj1ZJ`LEZtWF>`@Fysnfd>Ffkg@(q zL89wOL!vOJOIRGPahO(yHphzMTtbSYyhM=Vm_yd*y@lU)q%lnS9W$OpVz8v8ano{Z zipD`MjZR=;Y|xYJ6OATOE<({t#S3m;LMFu##>@TUo+xL@du+nn51+TBtz)GGt9-T1 zDqlj16-NRY5&cAxqb4U!4iias@@u|sx@xpAHtA=Hxxu>JYqJ&2e8UOA8Eq)wM{jn5 z`?!*}iRBWUef%j`oqhb7L+96;UICqXI`shXWP#@%c_EJKeKRYlnfQ+0J`xl4Vrx$@x$%4R?dWf_1l0%^qM83rA6 zBzt95A2nQniz5P+<9yhh?M@oW03RJfj{PGPEtDlS`f@*^3th=ynXVtd{G#z*1zY(EdbXZv~hhF|T# zyuANA=R!yi?v?Tn?Ck&Go`ozP%)<%1)KjD){?jr5N@y?$uS5om^`$> zn=qQmUJT_#X*XX?sceE*2DP-5rjqu)+9op964o3WdHwK|N)QITiD|xXn&vFFtqg+4ixInpujoP`0FK^qv7OHYM)F;gjDL8+-@n g|AxcY##a{iFKTs`Jdg`@NdN!<07*qoM6N<$f>f%dkpKVy literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-96852.png b/src/olddocs/grohtml-96852.png new file mode 100644 index 0000000000000000000000000000000000000000..ef0134908f88e1d5171e1ab2e0280529def44bb1 GIT binary patch literal 15002 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 C;AEo! literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-96853.png b/src/olddocs/grohtml-96853.png new file mode 100644 index 0000000000000000000000000000000000000000..ceebd2b509b52a0b073caf1b0969852404e4b107 GIT binary patch literal 5529 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%0DwWybI{T88k%Uk_yTYu%u-^Y&AK) zagu7d{xvm;|4BdK> zIJwa)v+7MZ&-m7(MY}bGMX9c5^l*Mtd&l8B!*h0!ri5o)!*T%nv#jle%JOw+E!@h~ zP)-5Zs*KZ@YlE+CtEvJ=3;yyxV_>@b4ova-ek*Ybr>RS}lz?x=4rV~&Y4nuCV^AMS zcx6AQ75|0lb&_>^y%Kho(%I@$V?Qi*Wq}8hoF~wYLcgGo8t$z^=XEY=;cYZA zrm3KSubUX=v$%4iTUAE|1H5v1QP`T=U{=a)i`YfXAeG@NGvQ3j3{I$ zUl#Aby_HI&f>TvUf_(VRBrv#~523M5>`y{|TD=n?{fh8-%CziFBponsxQ7X*eDG*L z=fTk8CZ$U>IyUX&XY;`VREAW%cmu!W&56FCD$f3<=DA4Bxl`=!N8Y}QzKIX`Dqdig zkob`r2rM-Gw)4@cCN6~eUO!@v$G$(oRij~OIbS=zKv@2!U+M*xtH!524$-u_=vZl0 zT-S{7<HQ|2Zo4lrwAvIDy@ZocvoL}eiFB#YPy?~Vc_l6aLeo2jj6 zs+=E|JtabU;*!#zRM%-xkO3W8u2IPi5?UIQP`4Osik_qq*T+I)mJ5Bf2cPC7s3V-+AT$o8%37+TQXGl+mkSmn>}j zhrH!hx5MsmdD0HE{R>_y!J_~G literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-96854.png b/src/olddocs/grohtml-96854.png new file mode 100644 index 0000000000000000000000000000000000000000..c53a6c653799b666d1c2a4c0bd6b26c48ea96bd0 GIT binary patch literal 3159 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-96855.png b/src/olddocs/grohtml-96855.png new file mode 100644 index 0000000000000000000000000000000000000000..1e8bffd96dccacf5792a15f7122913b3a3d4e910 GIT binary patch literal 6096 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 X&YJ1115JcOd4RS$Os(pnUHJb1J9y3= literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-96856.png b/src/olddocs/grohtml-96856.png new file mode 100644 index 0000000000000000000000000000000000000000..ca04a790bbc4354be913917f3a884dc24667f949 GIT binary patch literal 11557 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-96857.png b/src/olddocs/grohtml-96857.png new file mode 100644 index 0000000000000000000000000000000000000000..5cbe89a4ea49557ecf394efaca829f0cfc60a2e5 GIT binary patch literal 14551 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-974412.png b/src/olddocs/grohtml-974412.png new file mode 100644 index 0000000000000000000000000000000000000000..67f9773b88e8631a835faeafb749a206c7df8fd2 GIT binary patch literal 1201 zcmV;i1Wx;jP)a8m_A9-e57v8ab0C387N#%jm%>XR4+1_C*2s*BFHV(rjz(dlGS}6S~MHk5INiqpZI?cIl znk3hD8Onnwf=&e{Pvq(!*xJOfe!#XO=(v#gg%h@y0HPgf!TyUot!(WHvCF0SF$*9*0dhZ-6ue11^KDF6>!tcm$9nU!HoG zy4?(bpYP_Gh3)~iw0oMlIH_!TWM+HOVNXp@P|e-6^$mBNe5o2 zdAicV&FPTkE!v%hHjDN?x3$WV44-6Mb%In3r`O|qXD0oy3wEEtD>ZMlB<{n^lqGrp zLLPQeH0Bm9-W4>NNxfvn=a9$B?F zr0e=4jI*2{g?*XxaH{`%iYC<1Bm~NrNH1Js)kmw55NHi4MMc@nELU2@7UjC?VVIa- zAi0Y7D&ZSGWJa(Dd;L2(KM4Ci*Z+Y9ZTlP`3ki;eGiBNRUSkyoMV5~WK9Z6~wi7j9 z)n%I8AMLb2s(82kChawQ5P6tA%K71hpXNH-?A&2`C`{(ws3-Y_qFr?S0lY36c>nF? z1uuVMx#0%XKj2m;0bo(%aJIJ_;N-8evHYyZlkGu0?iBNSkLG^Y^<%VBr@}RM=&k^) zc!Pa=wZI_Q!3#B?GZ}<+m|4()j7t^oRl>LHST0Ww$`VN?KaumpwLQ)Cy8^jhRA27t zUbw`X-)m5ol$DTZa=8|rs`*Wc-^e=5ENcZUv5EI`BuRrUU`rlh2#Q8g_GdZ&_aN-s zoJ(8XW1|3p)Jl|2E3jq;Y^fJ6vFZnGsj2>CNt-^W=G!p0cj#wIeX0Em_^HYv>RNS& P00000NkvXXu0mjf^v^yQ literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-974413.png b/src/olddocs/grohtml-974413.png new file mode 100644 index 0000000000000000000000000000000000000000..a4efff5ef62da856f78d22ef6715d981aa64193a GIT binary patch literal 11659 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 V0hY;(N&jY9t1D|ORV!GB|1V7q#^nG2 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-974414.png b/src/olddocs/grohtml-974414.png new file mode 100644 index 0000000000000000000000000000000000000000..2a7f742907ac5a7eb0b3b79ab5437883c1b2bff1 GIT binary patch literal 6931 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 E0d)A#ZvX%Q literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-974415.png b/src/olddocs/grohtml-974415.png new file mode 100644 index 0000000000000000000000000000000000000000..0b8bfe428d438f25863ec8fb59baf3c7df7f19a0 GIT binary patch literal 5445 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 ON5QutdW||xG5-Z;D4HMu literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-974416.png b/src/olddocs/grohtml-974416.png new file mode 100644 index 0000000000000000000000000000000000000000..520c1da721ef9a9315d2a288c732090ec7432b7b GIT binary patch literal 17142 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

(3Joy0&a@M z!nb<7VRSZ$=e__w#IU-o837EBECc*06lJ#ng9ZyW0IP0n(Js!m{K&NUTJukQs;p+9ghu&2pV8Hf7I{?PVe z{HOdliTwBlJN#i=izeXsWYWUm71T(swqXsmbR5$Mj_`1WYAt7hsF@GKqSLp1lfH#B z3T}6NEjZRf5s8TeDY)Z-!ZWRn`2w!pchp+ChN00T)Je1Y5Pz` zfP@W#$Ix_Ar(JJdG>$L~)t~!lBQ7;+d@V7AI{esjmz5dYs?wTD!4m_=Ys5}ZTTAN! zwMweOiySQ=26Rfn^6gG*Qq;`c_ikkj_%4!0{YVu?rJxS_9-B9{g7=fY+u9$B?YcDjY@i3V;e``9Z59AOr>3EyU7&kahb0?d!{yd7Zsg@3TcdzO}4!n4S`TVMCL(14gI*hM)p%2Y=X-V)?w1 z(1ZOCAI4%6!9esHAaI@OhTc=nd==^pXoO%2tNIJ7u z1pGafmq@k8jR7H_>cYGgWo#SVME|wKq>9vt8NNIOVHATjKFsmvao6XM1#5(u#-R+g z$T}-=wT-C>{x(KX%KVKN#re%@#m~)g*z$5%B)L?4t+rHE+3L|<#$P;MU?eFjlo6nr zm;NYH2H4iF`AZjL^)+hk0*Vk73>8y?``!}FbbAcvX~A^1jG6rDo$prMxp>{0j1Daffd*knNXR!cmEF5wS|T5d)oXO#B|v$kBPiPo?)KuufL`7a3UGRM7>kZZGQoY+Oim z>I%)r5Z`aFHx+3pHwuZSIxY3M>~=akWiYz>9vn7M%o|LY#!N^;Xu6-;Mk!(aBf*a0 z=yOn*f;0a!#(*IrS)tjYwI4n}pM{YXLgs0Nfq0NK0;1vecB24RkME{%$5C~2A zg>8bc1@{aRBbX9M>;;{SaR$7X16-2Gzvk!9iV|{rR^f zxsz#nlWs(rlRJWA2LhgHzW?y8FYzi;z<`LY zWV?%{d8H!c>GllnU;#eOsvyrVhaaleOv5)OMO1HQFntq5=SwaYYpIDb12i@~|BWUk z_>pKVdHBtA5+YX{`T3^)9a*!_%QtA~I)L|$1|k74QFsMmC=yIgR@rvv+XG%_HKgZ zQ{_B29R=o=v)+0h|3qLu@pM;pW_L%%jxA0ebi;{7Ho_NIIzK&jKFLdQ-ayYmkIaM{ zs6$)*#)=xpF*b$^|Ao>)e3vJkfk=`ZP8vChzsGAZsX|?K@{!tUY&6aUc3MZSDH(t&yFou^Y10zpF7nzzotmYC{-X%QjryIlG5 zfITv)`Su)CklM1Xoe9L;4%ejBH-ozR`bE!R^>r9o$4R%4r)$xTj&;yYR;K4`eV_TJ zd$RA}ns4J?*l}~54ie4DH7MvD$cdO~ctp^-_kW0;le4sv!LQAzc|~U^WE}=a7aCoM z9r^!od{Di@xKB-zYhs<7PK`!S_l=A9jRW4ryx8Lk?OEPAUlYNVm|V9Qn@`scK^tEl z3R!o{jkLlBV~K&G88zzfpTyeaN&V$reCue-bWbKTv(Bj1Ix-kberI_Zw_n$yP~&RH zEqKPW$;CWW&=`v_!L40kbQ3l?0Ijjxyw6ycjlb9-4F~y1L8MMt?Y{e$I}b(qJsC4I z1$PO8-v#G#AnhW@>`COs-Q@_@3=TC*|>$lZcW%92N}CU#YK^F){g=YLH`%{ z7+;0qOBB6Ib>3bbCU5qXkrlw-Qp8r{ru&snP<66XW!W0a!wHklEa*ePAPhQV$?z!+ z_X))3j-uG^p$QwRl|TThD9`2z>Reod6FGCYETtjZ-ST#A1VCD|F8k&kjqtQVi&LWl z29mW2rKZ1?ZMy4w=mGYa<8dX1bgN?VH3wouD1`}?tgB`zjF!|HiK^gzo_K5HrVpqI zZlMmZvCN!p_hE>7*`zX#hPD+U??Rh!*HksVU8pEGkEA{Vtp+-oX*8V`_PJm!iSQ47 z=$v{`8G+QozMFZ>${FgTAR3rQjzvcuB~hBOJ36*O@1p)boQLg7Xy}|3JbWH4DovN$ z%DADO z`G{+HB{)|S2-~5~TQe*v?$U2VylB5YHJO1-P#Et(n01olJ9;!~>o(uZW4YNM3^skP zNT@BApl{M<(T3F!=KX<=ENYBFWOc>@aD5GIH+}{XQ&e`EFrRv6CuM(sxe6}_9|=`F zkDTiq&Bp7~nB8}~pE9;bsTSH!sepYDK=94%CP4n`PxEcg!WVgEh<)_seXPvs7^#hc z6j`P&rpknLJx(I;N?yr?@oo;SE@`KZ;=#G8NZ({xW;W1`w$W{~)hPmeOfF%t)0H`Nfhcs5&I|kr_lRFh7B^28~`jM`4MX1w5cAw55os zCJm_rne2!{FO&L5!()DRIQ@%i{9f$6dAEViWeJTsjLr|7LiG4UL`JRY^Yyq5t{o~b zt-g%*#7uYe&-6TAq#DUAkO4*gc{rmY{H;VV8SVgx#9d>rr2x2({p?*|_NlM-!@pYF zBxFJ7;r@39qH_X~b8a3HOx|NbSa4+N;1*c2$d0#)E>g?dX>U6dL#Nk>0Pl(xm#?;8 z<21A+&b2#4-`^D72`g?sS%iQ~-*i{<@~-+Ptd-OVq{%u`<~1_(`9K~$0ua3lcH>pw zY=2$4VME5{A)63NIquq@y+e8=)DHQYKSBb?=tx%^K9l_ejb+}|qHNE;(~$xl(Vaao zT=|eKQ6&WZ>I?aHpqSjcPELY@Zx;NZZ?O5T;(L5$pfy7vp;21jtBMK8Z8DspLr0eK zP=4*JW17@~G(w=~`Ce3}#FKk}tVH4M8^6K#CmTYlvp4aIk^n>Cs<^!6TUHi{h`%U3 zrRkDQMFV7wkX<9$Fc$Z1LhPV#U4e-czv45i)T&`Y^TK&;U`9}(K2?upq>kqDqQS)P z2xVEyjG7DSfh->eI+{eGO-{#_N{sBhPK?R7(*vKI6!NsOS-KUmUJNAapPxaFz+Nkj zBY0yrsS*QOUJMj8)qu&ueQvE=L=tj3t)lu4`Ei^7! zE7>Bz-*>sq^pBcAxPGxxw9JFsciHQ=bW~y1`As?xRWV`ViQe#*o zDc#Np?b&G)++A`rI%Elm&bmo)*h9U{J|4_`2@2mZqbpD#u6DB!7X^z4(PLjwxkUH9 zSy9$wU9lXSpnaFVUO5byK_0du{|k0Zi%Qt!PW=|%Q(lsk6$?vr^zRJJpxE;lPez5~ z9&o#`MsFzdKqI?9Imuxvm!Eh(uY}<#V*>yaJcxeYEazPzW&LZ<81Yc^vhmMkAvJGb z;0mpl{Cej&+7guyE!DUCKG9O}L2=wtp=QKVEY$ItwX5>M&+j}ea1oiSuXH;odi9|Q z7ysg^j!=0|OrfCxny~Res~LHOc*k`7k>7UVh)#ECC~f=aih5iTmS{Bk@TDHS`YJP} z?ih+A!-8g8pM}2*5Ti2tLpY3!mT;}9YT?~$19cHP!svCWU*_23bqh2$GV#wpoQQi( z6Lv{5su;7{X7)F3!4OZ&=yNmLNZi6ONO5;xoJF``IRbZ&jQMsV+zlMi0{~yJ!dTNu zV0W#Qmk0+0O)U-VR?K;=p1PEjW7V*WI(O*m=>@-2?4>gQi@F8iV*yKI-<-3^tB&dr z2o5|1X@C>?`hFl$l~y{JR!R((6~K>aCDvoOr@XL<@3`I^>+8VuEBArW)pTfRe0bA& zp8FJtd@v^p?JnH}{2359SIO}MMX34FUzh&7NS0)b={xpYxeqG?PBD|hOh2=?P}B|F zkHp>*zIqfX1$1W~!tLHZX627wXRd%3Hgw*Wm^FG^PiFrbb-M;pMm%AT*A_SxG=<13 z1Uis46}iWyuLa?UIG>V^-hnaaA;*fDMnL5Z45EVc>XHxzD?1T&)d%t-)Z$urczA6j zvqYsL#9lWE7;agi#>h_^qlQ5+{w!#Wq7d_pdMJh+R@C}Zu8tU}y0pFWF3)SVfQe$o zMennx@fEB(v)CWFo<|z@FkPE!O+vh3@S2sTg?RLiU%$m0(xsRw1?-egCa_6>n&_m2 zDXJ(6C0mMGflWzBB!#Q36+^MY${=fsnVvwyv_w3do;U7##V;IHA1v8)@YBBqVUq55|#r;^Wz`Be|E1GQ!q> z3z#U;0;0>;fx}R7orz==I^saBnw%sSx3@&6vpkoui-4MN|7R&>sPOq^32k`hP3IL! z6aJ{B%nXUV2U8vOsrxAe=%^G9`*-^4#fxgsqw1(1-4F5Lu4m!UeO%w{8hroT0Usju9S$d@y3$bocXYl?_<8WG)LI>w`hEv z9PpCe;Z$e#K^0#SWjaS?k?#2c{n80AQAy{krY7)*C2Sw%ruRP+S#zh_LPNJ099Az{ z0U!64pD3Y3i@`sb%74imJpHVa7a5JM2c_-E=_uuXRgRMn=u*O(`P5$(sr-Uzc9N(g zm&v(WrADm#gS^5y!_^~|W|^c_+FlUC{6-36>0@zQfp{moVGbj?d=Og@t+M{0!XRW2 znhEj$w5tJ2nYmQN>_*pY%wF^I4B;@9_v3K1?3%8lMaY(A>Vk9$dg}(zr$fA$`~NVV z1Og{SmBHPUU!YvyO90_UjZAMhYVA`kh~JdfCqj71!UWZC;yXB%@71R(FautIAV1JZ z?{c5@5OfSgs(<1_bk?cGMof>ZCgIr5V z*ayg!(L+LFDC@5Z`Z=MAW}RI02-32FSsi}8LO^4lLDBA)(w7W-N4RcbAg{F3_s)2K z#;2k`aU6R46iHZEPP~-yIlOp{Off{cXfK64nt0hPM-WL z#3XvtO_1CVwmK#P`tpFGqwRu&BbF>@H&Z>`!>iSavf^A__xAjs%9npX+^C3C%#)ub z7sVRJfjx`D!>B*AWOs~$kCT1{aBsBnw}`$ZXWu7+WMqGeD%scfa@tAtrnUnyhR#_|O=(=5ktch4E-$`ZF1ZD>sLOP@5R1QE zJHoXF}Gi}I+J0!v9Ku8R8U zB+ByaKvA9>V<}kviK)fsLM`_T(Kcu1>PLa?w+vM?NUXN2sEd~OIdaPZ7y$jrwfNBb zU%B`p+U+0=fFJhtqF!Cvm092~*{{2SSHv{!`$W@KSR&uMpt2Zd6V>4y5BcdaQOQp#vix&waMtr`;~d#D$hW5q{HkAbhhYuSZP^6ce`R0eJc}mJh4;7tHoU*W1AD!5JYiKfGHl3H?|$s3y51dMwBEKDr5|1N zxZeG>2)>$IPmqdUyxnfSySlrWyLH|_0yUZ$Xzd)fz5@iyk(vEr>xO&*buZSQ4F?Ze z1YKP*w%)|8S1%e|ul~KeIFutC%MfRlRvx;sg2r1}!5-c*{a>J?HdZqFq0c81fS1xM zeIFxKIFmzh?9ou%B&PHHwxzH5+%#dg##|FQRL{7Ymt}Bd(3F+Rd6cLIj_FjW z_dO+I$wjZQ_ri@BZPUQCBxwO1%P7A{KTR}`I?}yx<_q` zJd*-$twoM5a*Vi4f1cZ$b5Ylg`yg?i$EZ~5s#%oJk{(67wt zm`1@OuF)5eKQQ@Vb81^%e|q&r#h1IVR>5bCWZj>w;mmPis6A2@O63sb;mWew=&;v< zEKUmM^ZebU-1gmNB4Pl1vX|HVHPvKPp`~Y=yTNO8@+lNr`_(xj7}5{=ut;48jX!n^ zl032rThY8=daVckPYc!I4pNx#*0;%B{C(33z!|zJ>g^mRk1c4_UQYFzf_UO~%m3|M z&$ZmR&4TH9+&zOJyJXF2?`9*MJ^rq>hHBo9U%Ac0sy*(8R+%<#>!IN7w_4%+cinB@ zEsvZUugmmrumyv~MZc zS8p1I%(q#(8C1L9ok5O&-T6U0Cs|-vM3d+P(WhXZ9hiDubh_*g+y8gFD&$z!{ANZy z<48nL;z$Y@H2d6OYfbJ8=v`Q7#+A3hi2L2nJ&9hl<0+2sd1J>e<1d5i@jv5W5C8x+ z#KprAJNp}rS<-mt2{i3fEQu7bYm8d4f?|5yl_X5@A^+o*#5pd;ZD;qvhx#ZoapX-I z6xl-tiCC6%W6vA(?cWv)2H9W!TfyMldrBJ+F)OkuHOThe8anP9LTi5eNLMRp{>b-g1M;bkWm~OppS3fkB$$JC9hx zpG{6BxQm?vN@vGzcIXF-_9|h4r942oGVN&B?wdBy*!8OjMl4AxOpXN_26XQ1=JcSS z2)-u|Q8z4uxc(50SYFf{5ANz3*VD&2jY*zQ5e;k9e()k#El|>v{)4C zMX29W(k_uBhPb9*AOs);rIeE1K4|+%e!P`6{NcbmIQpy{F^3nkEF10IO$0xYhd>Qq z0t2OKA(2r+7sN!XD^)woOe{A(lN|Us9DSV^rO+*P2A%&bZRmNAu2Nw!V;DMq2kOZh zntaJH(J7GvXIorzYDvX1{m6p#WoWdlXxufxp4F$ zcxvkaNl|=HAKe_K1yakeI&zVJ|7!V^=kU{@bc8A6ra&wz>??&iWKe-y3UX>3|HYU- zK2n@g-BEs>69ofJu%Ta!DT<{L<%!#~m1IrH;JAVZNFth3t@n19sVc*cNul2(_Ocy- zCr>~-ok-M+kr+6@JMZ6*z1;BW2jvKSy<4CihIs*KlbCIUP(v>JC5_e`Bp41LxoM} z`+`Yh3F}Wr$>wv3&#-Avn&ed8DJ}TxyW!UC!W_zfN;FE->4Mg*q%(8k{xi(ST8wM+ z9jDDdJW?aC-37XV+7FxYTj0Y7ahLIV$pM@A0q>9az}u_8cz{1KV@x$xP?qtSqgxwI z&|#)WBV10guaT9;`xr}O-@ueg;c7tzaK}_pr85$sg+J6kut(;DPL$7 z%tPOIX}Mb33g-G68FF!`(3L^_Qz?a>Zk0a$k&L(N5m>vW0F4%s7fs_t*RizS`fXJh z7`@_MmK2acoJi)1RSQz@;v7=yQ&xxozeB;`V*9?ZV#@g&hl+3Vx!Eg~x?z`hw|?MB z+my33X?7QF;w|FxKOf(azej&0;LZJa0rXo4iPcr;oFTC=CIq^-lDTPcp>Z+*mA%q3 zVj0}r;zDILzC4LoXmirV(kJZ!;@Cs*nSPrd^4nBg*t3L9$deet2DZpW05>W7+28H; zmPZgj+xmSm8}sFVLCXI%D3;gEl0X7B_ypn&MmDGGw*B!F@03H^pm+=8KD)TjHxfI} z1oFe;3bR5Nig^CcGSFBlw2Z^t1~`d4ZVB@WFSj0MMgNfLZVt!&6bXZQSQ7UtNQ0~Z z;erqEme`g4Be(d=8N6k7&V4uHe50M4(A_H2VWRJ|eA@DYO=5LS3}|)wCUVOCMW)Fk z@G#aG1Vb$kTAsweOUC?kn#SR8C1&H@hawNsS~DCgoZ(|cTF)|RqzWk<^To$LQIY)` z-GXOf$jGSnrNZLAu1I z_52|Yjel_>reG$Jfh2zJ=tog5lL#{$%)&b>7nNh#?<8C$%_rCe!|ENlTU zbde7*C%>8_Hqd>eJ&da9YpPdrVXkoqBI8V?jzxkJeUU`hotVW(E?N)4s)YRZxyvc8Pr3WlPo%N^xCc;A)R1P3$n zuHB0l9e3rfmE^jm&ON2-s=Uq?YMY@7HCG&c;LJw>krB>UlM)D9sm!7ZQ_Muy1m!%2 rA&r>Qg3-pITgK|Hx3~?6z5|sBHZp~^GkDy8&_Y8+N4ZkbGW7og3u&M5 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-974418.png b/src/olddocs/grohtml-974418.png new file mode 100644 index 0000000000000000000000000000000000000000..2659ec842d916f361e31868b5654462e5edd2dac GIT binary patch literal 21201 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 S-t4WE03!o)Xes1j_`d+ykpoKr literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-974419.png b/src/olddocs/grohtml-974419.png new file mode 100644 index 0000000000000000000000000000000000000000..3abe23d13a5d585178d70bbc257605ff0aed8520 GIT binary patch literal 11046 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 g(3Ic@c3YJnl zv-}YLBLZ=TBONR!KtWynb&$i^s68EhPfYWTg}tzwqy!a5zmGp}^dkc#(qBf9-VC>) z-aYzbVGj>zcc#8YipP)PKP2jXlFd@Lp*9hYMtyv{tk4|Am@`gQl&+EL)Q+(JcvlN< z$8V(VB_0v|J_TK$q|@a9WfTl~0aPH(h>;7lQcD_zvMEhnSKb<#%nuknJxGg1L3093 zqNE&1Nj_?Yby5UaqzH5Z;97hsY54j+bHZve`X`>ddm2Z)iq{WIly)^lJMwyItRhh1lLZg;iN``_h zzAY(yeV1(^6kgmxJp-&Z$K?21_DFx%}-Vk6NA6fxcAU9EnT^x=VXK z#YCB^a!ERBg>_OG=ut_@P_V^UB@JKSXHJl9g?q;br>hI%4VK6m+Is`2vHAXV*}tba z%)!FZKpB#wGHMJMFv-pL0$gHFPZ$^G%G+fLS)4FMI?Tag2{Rlg%oIwJ6XsNsjyhqT z6af|~0`;@poGbiV((?6vO5#tzu&GeDe%*URJn>!^=KYxNO?Kb7F70Lbj9EXP>E2}b zjn9#``5f`y_=czFdvV>D?7s0y(*DCI?$4;=Zr9V#cxe3Gr~gNM)INQ`2g%<%xo=mF z_cA$NzqZFO&uiiusD~a*x@r3w?l2}GkYrTw;zd0oJh-uuZg!P&?72xtj!_{$_K;%t zkmtmR>Onp9K&tPnuHg;?gwiBAPt}8~`^N$C+x*g= z+BysZ$-%v0pF;m+WRvJ!88F#Mr7*_MK{}lvlaOrur-OZpktAc-sW^7ZPK>Bc6}lEh z(&}$r-KV~FA5Wbu5K(DznYgo02mX`8JYlM=nK~h^&H}4VRF+P~B+sKkdL+;1$^@0k z1G>Sn^`EwmQzoaKlqwa>MajyV2dLEUp%GPRld~is`CS`NB1tQlRGEw~u=d{4lxD;z zv#frVRxqozC0U~|+7%3f29aaf+owbSi43yx$#^M=)ia7DwPrLKk$-aG+4WnM6_baE zM*h@KNw6|8B1EXf_#(%U=2Ubm8 zwwgQyt@54!)W~SbO>DS|Uq%v_(Pbm}(1@yOV+1Ln3`OA-Nr4_kua%WA94jvSSlJiL zEhTFUF@jn-`Xzx~!~z(aKxbgR0f6dXF%JDFI15AzFUCuq5Ld^h_vGXaiG?(Ws?cE$ zoUnTbtoe$`W3dD%+xSnt88!Z+p;me|Kl(ZB^ZZ!;llcBRe#h(U z!<_K@$KhtY43B+o^zwCjDF12v{;H<&^%Di$FNViH-}~d&&s?VY`RVD)_yBM9QE_H% Z{R^uYdb!m*CYk^M002ovPDHLkV1he*5p@6n literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-974420.png b/src/olddocs/grohtml-974420.png new file mode 100644 index 0000000000000000000000000000000000000000..523b39e6500e40672ba999254734755eb9fac3b9 GIT binary patch literal 4495 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 D-LlTm literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-97443.png b/src/olddocs/grohtml-97443.png new file mode 100644 index 0000000000000000000000000000000000000000..157dcee3e55acf1fe3dfd8605d1dff322f29e6a9 GIT binary patch literal 3397 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-97445.png b/src/olddocs/grohtml-97445.png new file mode 100644 index 0000000000000000000000000000000000000000..ce6791adefd4bbb4b9581c37376045cf1dea0169 GIT binary patch literal 3213 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-99071.png b/src/olddocs/grohtml-99071.png new file mode 100644 index 0000000000000000000000000000000000000000..5f26193e95135f2c3024f40de4cd2517fc00aef7 GIT binary patch literal 1783 zcmV>*1bE89`L!d)|LV!Z3J>b`%M2Xhe*1k8a3)y6U(JhEF%V5C7uZOp5!g-9Fysm1^ zzvz3uWy*z<~Y)6McS|z+p}Bp1^XLNdD^hr+Z(c8jGPl(EhbG39g2%_Ruf6F z`H`R16ty{Th*tNznA8K5(C(o}) zmB)Jit3{S5LM1n;IxStgP|QtJ)7Zx5=!T{vIl`*6gUv{C2N?E%avVFQl3+1vlQgLn zOfc*L<&r0((2krNv@2di2;p0_(nXL-5(a9dS0g9oMIsDSuRGE>!YG(Uy~LX4wHIn3pEW z)7Yhp#dH9s)R;ImK@#gKJC%B+n5KT7=#>kroOdo{8KeaOLq(2l65yq#cVXX5H^~_^ zBRNiNJ#|N8Nr$Kqg#aBAPcEWNlJGPQsWrW!NQ5MN!%2~bgy)Ppa?UI#>qZeFq|6yP zc(rG1Pm;cG#UUV+BJ9Oth=kILh;-MBj8&d3vRc8EB`DIC7sF}j(zRkxRU@QaM%Ag5 zYxx9eAUq|-$Z~4J=A^^ZvNH5t67nL0q*3vCTHFLxR`5|kR8Z1`w-&-hl#3-DoDH7| zT^`%VhNiW%O~IYsH{)E2LaT)v1%OFlR_wxJy%GNP5md=aW!P4F?rAcySYqk4{2BRER=A zGZVr^lB0$qskI4GbRX0vV|$bRSCO-MG8mK=5yWbTVA5*LpC?rvgrS%ku^3fC9F&&n zt{0iAJXd73g7Q$OU7dz5T`Q(G6;dvv>eR{9geN3r>a`P7<7w4IH_~{LNvNjAr43%( z1htwtTWZItXWvfrhze1N4!nnO5#{K5)Fho6NRdd$yK!EXsi`7o^LW*9MirqfnU|Xf z!w(HVdQVP<@xURrA(SHQ>DN@ZXjKZuq?XpR*>-KmeR29+^ZI>@U8VJQT--e# z7jDiwJ#2{-@bvJoU3tf6qvkp>kdy=&CvtVjRZ>*q7P*RuB)LjFWiFAV#i&h?A}a~$ zy%5>^crm`RpCMUIJMIcBxK0eME1aUp&LLMxQJGt`AR+~m_*S<_f@K7sBwf8|)*ZcB zaE(}5?zk(EKFg5?#L%LOQ{;2w&yu1tw`j?Xl9M1fC{_edQe-8?sc~@DopOzY<&L}J z5df3|8vT4|^Y>PdSLoN5@T#=Dby+AL030!xr|+jm>j+l0^sSXvjs9_Hu()_)x#NCV zaGe-vK7~`1*g5N@sKPC(nNhylYnIHV=rQq_0xK!8eWu2;;u_7IvgLG^?Z4v-fd$uz z@nJNRaS}UcofK8LMGGQQ<|^@&xkNIsmmrzR2J}B5MeVpZ Z{sXq?*5oi)9{B(O002ovPDHLkV1g?qVF~~M literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-99261.png b/src/olddocs/grohtml-99261.png new file mode 100644 index 0000000000000000000000000000000000000000..f1c853f083ff79d3af2acaf09d70384aa7383e2e GIT binary patch literal 1846 zcmV-62g&$}P)A4G)RymX-leFn_V?S0qD=`Mhg<9CosssZRvN`$}+j` zGh^RvELcbIONjPbgYcfULQRIb>tg=`jg41WlIS#b*Ub-QwbTOg9; zWV{`7DDbPY}hB#7uD*PBLd*CUJX@e z%MK_yyJ7O7RD%7E@r}9n>RL8kJ=N}S-L;e3Pwl(nmrcM=H$pEJtG=7SsIuG$vb5jb z*SWDcL5?=>DTf!y!4!Q=>hb7;UN>!pjhTQYWwVY--ic5aZ})3J0p|$O)qEda@rBpee+c z2>La90}%Yw6C@iF;*jvpXI3$M6M;>=vMhuanBqXPBWcLqlJN8N$#F1bEKr_dT8qh~ z3Bi&~W|#_Umbc&tvkA$#s(Q9%DFJx4RdK_%cDqnrRopDSWn;;WhhEEvjk;q2W#~+o zHPfS|#pvfYw0xp0S0Xfr!S>JWDL!xSQR&#jYb&%m~SqLpKRahT~#?i;U zjnjQaXS=bOVOooB(nP=lWirD|Q1zb7PNlIDl2z3gTb3J^Hmtnc#pZ;q_Of0)0%`x6JE{`F_}1m?VRm= z#H8+tP6KL%WL5QS%TfaH>`%oFEAMu(x~jPA^a_nNpq&PEQyUwzMmwOLdJJ@sy7hpI z!y2|DYlP2nB5~2vG zhV59Rr8Umje}cmv-2~H1Rw=wS&e%zi+iokgz>Hxd+~5MXZhQ|oNt#nbHgdz2XE?9T zm7SHXamM}yq-Zs4HzIDlHO|<-1Nu4d=ro`XNMtFmx~h;)02S&8bg^N@;ufo`imTIW zC;59J4!K#*7kkF#(mXE0clS6XPucU|o)F`|Ctok7wwL;G0e)QDDGx_-uN;kakF>8Z zFW+qSxB!iL9FjM@yxsxnMmb&z4|#|jC)Obkk)yE=d5B!uSZ}MD^Y1S|w)M}qU|2gZ z`a55(y_U-k)o~q|>Yu;d0AcMsm#^P({xbV~`$W4am$z?sSRL{c za?P9fx6@kfN4>lgc{|m*+Wkl7bZJ&_b14H{168Asg5n`hl{E{=S=c2fYe~`xp9@E3R>sK+Dv(Fl@T;P8 zXJP00GRcP|;b8g%Mc73d*GMLpw5mg%CLopssF?$#I9Y236xDa5ij$Q{RO!)Y{Hn+$ zYO*gcizFY0h^|slBD*N(8imW6R&~g;1ez)lzaq{!K-4shPT8ri>J=v|k*IPy6?gbm zaVEtjH%LCwz-uVUpW+(nh?-V)$g?E7EBpX(!56#vMO9E(O6y*~6;xKrW$Rh;xF@`$ zd4DTHF=pY+sQ>d-lrGzMuZKKN3Ir&>q!||YJ^C2YoUBBm%IQ>l{Hl4ztN9|yCr0iY z1tqeJa;{OhxSG^zL# zz!J%aBu~J}GeL>$qMU0KFBz@M-1*zWL++7Z|MQ(ZgPjk%J|4(MIAkgRqsBVqnexkj k37xZx;^;Y)qeFJ&U%m_Vc;-8Cq5uE@07*qoM6N<$f;up8wEzGB literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-99451.png b/src/olddocs/grohtml-99451.png new file mode 100644 index 0000000000000000000000000000000000000000..bce93cc34b6032d4b1619c02c9d846ea1e149f39 GIT binary patch literal 3546 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 HJ3je4hf$}0 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-99452.png b/src/olddocs/grohtml-99452.png new file mode 100644 index 0000000000000000000000000000000000000000..6ecce63494b434aa0e077fcefb1c06c93a907df7 GIT binary patch literal 1739 zcmV;+1~mDJP)jWAg2bru6!PmrRj9$FTVg!*%_&}$Z)!31jnRm*-INK#G5M43w%Lv3$M~j(jz*7mb zycoWb%9w3ZvpslnE7l?YUNHaHHEp1E1$ySRLGH6gK z8%8jx(7x2n&V`qHuvIV{uwd39BiU)gsLe-KtE^cNBP*;JQDP z(H32A8t)4mjm26SBIv>*%-Pb#)g)!3v5cJFGe~BA26}yb|#xG7&3^;5{RbaS&{r3KcTW(q}0%TVA^Pe_Y`=R;Hp1c{SCUY z=^{x;lFH!rzB2D9Agh60$x3zX8=_~Il(119quZ2BeOfuaX9x)qc#mvVAD9hc>lN|m z1ADB+c065R!`Hyx1VH*_oeiQ~V_Dmo%*6-`;`R_1ZeS1A5_3gbP3zUtj;PEE9~CLe z0K(QK;uyx;#Et^b5}Y@dyPzTyooUEfV|A#94$V;8jxJDlsD~C^hk9Uv+-`;?ptFur zpb$z0rAdvf%eoHeT0mO#)KHqvUx9k!)5z^&-jD@q=1Qyl-wH~zMKeIPo|zAClm=&% zH*2vSPZ!wmwLXv+m9&7STOKO1avuwM!?+QF$T&0PgrZ;WFkIjAM1b z2tW1xs66-;d;Zk~ej&b(s>sLUegR(J+$eXa^67Am_1NuyAJi{TPe1bPegP_VKPo3Y zz3ia$X?XAr^}tuf?|dsfa7P@Cb>J>I8tcGa@C;o3czRt|xV*>P>9)!x_3HI6F@4HCm5IVF7f$_D zrpk$%#Gh5$_e6R;$9@SsX!(-i=48F60O6RzWQ0RX)E)NH}cIQ6jPZ*q2BP(1Jj zV19I<8B+_hV00s0aIfAnzGo-BbdKDwug{M`L$zTP&5f=lgKTbbHnex(u@Qzs%+KC# z7L3u1UU+qDe9z9Qg~2v*V}1-mokgQ)c62QrWHX0_p}hkS4J21P%z`nR(MzZGxG}zG zSHfT$xiLQmQsPmx;4d0viz6mOdj}pG>GxQ*ehHt9t^mf#tC?sK-}3m^*Aiz`=hNa3 zvPw;yspx-ybV}p;)9Zl;L)utZ-MzwI=KS@H>p6X8Fzrv;PLT5KSHOY hYxeBX=h+Ud;6H-cRrQkOhpGSo002ovPDHLkV1ma^Mymh- literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-99453.png b/src/olddocs/grohtml-99453.png new file mode 100644 index 0000000000000000000000000000000000000000..3f28bf692ed739bdbb3557902f70b4f3d4992cd0 GIT binary patch literal 6807 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 b9w2P_x0LdZbf?aLd;xTC8){c++C}{jtRnfB literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-99455.png b/src/olddocs/grohtml-99455.png new file mode 100644 index 0000000000000000000000000000000000000000..32144ff7daac5022e7c0617f0e881652a64d4611 GIT binary patch literal 5563 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/grohtml-99457.png b/src/olddocs/grohtml-99457.png new file mode 100644 index 0000000000000000000000000000000000000000..b426a554ea30c807341d390b3c18ed1aec6b86cf GIT binary patch literal 4330 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/i80.html b/src/olddocs/i80.html new file mode 100644 index 000000000..3a01053a3 --- /dev/null +++ b/src/olddocs/i80.html @@ -0,0 +1,1391 @@ + + + + + + +Back end table for the Intel 8080 micro-processor + + + +

Back end table for the Intel 8080 micro-processor

+1. THE 8080 MICRO PROCESSOR
+1.1. Registers
+1.2. Flip-flops
+1.3. Addressing modes
+1.3.1. Implied addressing
+1.3.2. Register addressing
+1.3.3. Register indirect addressing
+1.3.4. Immediate addressing
+1.3.5. Direct addressing
+2. THE 8080 BACK END TABLE
+2.1. Constant definitions
+2.2. Registers and their properties
+2.3. Tokens
+2.4. Sets
+2.5. Instructions
+2.6. Moves
+2.7. Tests
+2.8. Stacking rules
+2.9. Coercions
+2.10. Patterns
+2.10.1. Group 1: Load instructions
+2.10.2. Group 2: Store instructions
+2.10.3. Groups 3 and 4: Signed and unsigned integer arithmetic
+2.10.4. Group 5: Floating point arithmetic
+2.10.5. Group 12: Compare instructions
+2.10.6. Group 9: Logical instructions
+2.10.7. Group 14: Procedure call instructions
+3. LIBRARY ROUTINES
+4. TRAPS
+5. IMPLEMENTATION
+6. INTEL 8080 VERSUS ZILOG Z80 AND INTEL 8086
+6.1. Introduction
+6.2. Differences between the 8080 and z80 processors
+6.3. Consequences for the 8080 and z80 back end
+6.4. What did I do?
+6.5. The results
+ +
+ +

ABSTRACT

+ +

Gerard Buskermolen

+ +

A back end is a part of the Amsterdam Compiler Kit +(ACK). It translates EM, a family of intermediate languages, +into the assembly language of some target machine, here the +Intel 8080 and Intel 8085 microprocessors. INTRODUCTION

+ +

To simplify the task of producing portable (cross) +compilers and interpreters, the Vrije Universiteit designed +an integrated collection of programs, the Amsterdam Compiler +Kit (ACK). It is based on the old UNCOL-idea ([4]) which +attempts to solve the problem of making a compiler for each +of N languages on M different machines without +having to write N * M programs.

+ +

The UNCOL approach is to write N "front +ends", each of which translates one source language +into a common intermediate language, UNCOL (UNiversal +Computer Oriented Language), and M "back +ends", each of which translates programs in UNCOL into +a specific machine language. Under these conditions, only +N + M programs should be written to provide all +N languages on all M machines, instead of N +* M programs.

+ +

The intermediate language for the Amsterdam Compiler Kit +is the machine language for a simple stack machine called EM +(Encoding Machine). So a back end for the Intel 8080 micro +translates EM code into 8080 assembly language.

+ +

The back end is a single program that is driven by a +machine dependent driving table. This driving table, or back +end table, defines the mapping from EM code to the +machine’s assembly language.

+ +

1. THE 8080 MICRO PROCESSOR

+ +

This back end table can be used without modification for +the Intel 8085 processor. Except for two additional +instructions, the 8085 instruction set is identical and +fully compatible with the 8080 instruction set. So +everywhere in this document ’8080’ can be read +as ’8080 and 8085’.

+ +

1.1. Registers

+ +

The 8080 processor has an 8 bit accumulator, six general +purpose 8-bit registers, a 16 bit programcounter and a 16 +bit stackpointer. Assembler programs can refer the +accumulator by A and the general purpose registers by B, C, +D, E, H and L. (*)

+ +

+ +

Several instructions address registers in groups of two, +thus creating 16 bit registers:

+
     Registers referenced:   Symbolic reference:
+           B and C                   B
+           D and E                   D
+           H and L                   H
+
+ +

The first named register, contains the high order byte +(H and L stand for High and Low).
+The instruction determines how the processor interprets the +reference. For example, ADD B is an 8 bit operation, adding +the contents of register B to accumulator A. By contrast +PUSH B is a 16 bit operation pushing B and C onto the +stack.

+ +

There are no index registers.

+ +

1.2. Flip-flops

+ +

The 8080 microprocessor provides five flip-flops used as +condition flags (S, Z, P, C, AC) and one interrupt enable +flip-flop IE.
+The sign bit S is set (cleared) by certain instructions when +the most significant bit of the result of an operation +equals one (zero). The zero bit Z is set (cleared) by +certain operations when the 8-bit result of an operation +equals (does not equal) zero. The parity bit P is set +(cleared) if the 8-bit result of an operation includes an +even (odd) number of ones. C is the normal carry bit. AC is +an auxiliary carry that indicates whether there has been a +carry out of bit 3 of the accumulator. This auxiliary carry +is used only by the DAA instruction, which adjusts the 8-bit +value in the accumulator to form two 4-bit binary coded +decimal digits. Needless to say this instruction is not used +in the back-end.

+ +

The interrupt enable flip-flop IE is set and cleared +under program control using the instructions EI (Enable +Interrupt) and DI (Disable Interrupt). It is automatically +cleared when the CPU is reset and when an interrupt occurs, +disabling further interrupts until IE = 1 again.

+ +

1.3. Addressing modes

+ +

1.3.1. Implied addressing

+ +

The addressing mode of some instructions is implied by +the instruction itself. For example, the RAL (rotate +accumulator left) instruction deals only with the +accumulator, and PCHL loads the programcounter with the +contents of register-pair HL.

+ +

1.3.2. Register addressing

+ +

With each instruction using register addressing, only +one register is specified (except for the MOV instruction), +although in many of them the accumulator is implied as +second operand. Examples are CMP E, which compares register +E with the accumulator, and DCR B, which decrements register +B. A few instructions deal with 16 bit register-pairs: +examples are DCX B, which decrements register-pair BC and +the PUSH and POP instructions.

+ +

1.3.3. Register indirect addressing

+ +

Each instruction that may refer to an 8 bit register, +may refer also to a memory location. In this case the letter +M (for Memory) has to be used instead of a register. It +indicates the memory location pointed to by H and L, so ADD +M adds the contents of the memory location specified by H +and L to the contents of the accumulator.
+The register-pairs BC and DE can also be used for indirect +addressing, but only to load or store the accumulator. For +example, STAX B stores the contents of the accumulator into +the memory location addressed by register-pair BC.

+ +

1.3.4. Immediate addressing

+ +

The immediate value can be an 8 bit value, as in ADI 10 +which adds 10 to the accumulator, or a 16 bit value, as in +LXI H,1000, which loads 1000 in the register-pair HL.

+ +

1.3.5. Direct addressing

+ +

Jump instructions include a 16 bit address as part of +the instruction.
+The instruction SHLD 1234 stores the contents of register +pair HL on memory locations 1234 and 1235. The high order +byte is stored at the highest address.

+ +

2. THE 8080 BACK END TABLE

+ +

The back end table is designed as described in [5]. For +an overall design of a back end table I refer to this +document.
+This section deals with problems encountered in writing the +8080 back-end table. Some remarks are made about particular +parts of the table that might not seem clear at first +sight.

+ +

2.1. Constant definitions

+ +

Word size (EM_WSIZE) and pointer size (EM_PSIZE) are +both defined as two bytes. The hole between AB and LB +(EM_BSIZE) is four bytes: only the return address and the +local base are saved.

+ +

2.2. Registers and their properties

+ +

All properties have the default size of two bytes, +because one-byte registers also cover two bytes when put on +the real stack.

+ +

The next considerations led to the choice of +register-pair BC as local base. Though saving the local base +in memory would leave one more register-pair available as +scratch register, it would slow down instructions as +’lol’ and ’stl’ too much. So a +register-pair should be sacrificed as local base. Because a +back-end without a free register-pair HL is completely +broken-winged, the only reasonable choices are BC and DE. +Though the choice between them might seem arbitrary at first +sight, there is a difference between register-pairs BC and +DE: the instruction XCHG exchanges the contents of +register-pairs DE and HL. When DE and HL are both heavily +used on the fake-stack, this instruction is very useful. +Since it won’t be useful too often to exchange HL with +the local base and since an instruction exchanging BC and HL +does not exist, BC is chosen as local base.

+ +

Many of the register properties are never mentioned in +the PATTERNS part of the table. They are only needed to +define the INSTRUCTIONS correctly.

+ +

The properties really used in the PATTERNS part are:

+ + + + + + + +
+ +

areg:

+
+ +

the accumulator only

+
+
+ + + + + + +
+ +

reg:

+
+ +

any of the registers A, D, E, H or L. Of course the +registers B and C which are used as local base don’t +possess this property. When there is a single register on +the fake-stack, its value is always considered +non-negative.

+
+ + + + + + + +
+ +

dereg:

+
+ +

register-pair DE only

+
+
+ + + + + + + +
+ +

hlreg:

+
+ +

register-pair HL only

+
+
+ + + + + + +
+ +

hl_or_de:

+
+ +

register-pairs HL and DE both have this property

+
+ + + + + + +
+ +

local

+
+ +

used only once (i.e. in the EM-instruction ’str +0’)

+
+ +

The stackpointer SP and the processor status word PSW +have to be defined explicitly because they are needed in +some instructions (i.e. SP in LXI, DCX and INX and PSW in +PUSH and POP).
+It doesn’t matter that the processor status word is +not just register A but includes the condition flags.

+ +

2.3. Tokens

+ +

The tokens ’m’ and ’const1’ are +used in the INSTRUCTIONS- and MOVES parts only. They will +never be on the fake-stack.

+ +

The token ’label’ reflects addresses known +at assembly time. It is used to take full profit of the +instructions LHLD (Load HL Direct) and SHLD (Store HL +Direct).

+ +

Compared with many other back-end tables, there are only +a small number of different tokens (four). Reasons are the +limited addressing modes of the 8080 microprocessor, no +index registers etc. For example to translate the +EM-instruction

+
     lol 10
+
+ +

the next 8080 instructions are generated:

+
LXI H,10        /* load registers pair HL with value 10 */
+DAD B           /* add local base (BC) to HL            */
+MOV E,M         /* load E with byte pointed to by HL    */
+INX H           /* increment HL                         */
+MOV D,M         /* load D with next byte                */
+
+ +

Of course, instead of emitting code immediately, it +could be postponed by placing something like a {LOCAL,10} on +the fake-stack, but some day the above mentioned code will +have to be generated, so a LOCAL-token is hardly useful. See +also the comment on the load instructions.

+ +

2.4. Sets

+ +

Only ’src1or2’ is used in the PATTERNS.

+ +

2.5. Instructions

+ +

Each instruction indicates whether or not the condition +flags are affected, but this information will never have any +influence because there are no tests in the PATTERNS part of +the table.

+ +

For each instruction a cost vector indicates the number +of bytes the instruction occupies and the number of time +periods it takes to execute the instruction. The length of a +time period depends on the clock frequency and may range +from 480 nanoseconds to 2 microseconds on a 8080 system and +from 320 nanoseconds to 2 microseconds on a 8085 system.

+ +

In the TOKENS-part the cost of token ’m’ is +defined as (0,3). In fact it usually takes 3 extra time +periods when this register indirect mode is used instead of +register mode, but since the costs are not completely +orthogonal this results in small deficiencies for the DCR, +INR and MOV instructions. Although it is not particularly +useful these deficiencies are corrected in the INSTRUCTIONS +part, by treating the register indirect mode separately.

+ +

The costs of the conditional call and return +instructions really depend on whether or not the call resp. +return is actually made. However, this is not important to +the behaviour of the back end.

+ +

Instructions not used in this table have been commented +out. Of course many of them are used in the library +routines.

+ +

2.6. Moves

+ +

This section is supposed to be straight-forward.

+ +

2.7. Tests

+ +

The TESTS section is only included to refrain cgg +from complaining.

+ +

2.8. Stacking rules

+ +

When, for example, the token {const2,10} has to be +stacked while no free register-pair is available, the next +code is generated:

+
     PUSH H
+     LXI H,10
+     XTHL
+
+ +

The last instruction exchanges the contents of HL with +the value on top of the stack, giving HL its original value +again.

+ +

2.9. Coercions

+ +

The coercion to unstack register A, is somewhat tricky, +but unfortunately just popping PSW leaves the high-order +byte in the accumulator.

+ +

The cheapest way to coerce HL to DE (or DE to HL) is by +using the XCHG instruction, but it is not possible to +explain cgg this instruction in fact exchanges the +contents of these register-pairs. Before the coercion is +carried out other appearances of DE and HL on the fake-stack +will be moved to the real stack, because in the +INSTRUCTION-part is told that XCHG destroys the contents of +both DE and HL. The coercion transposing one register-pair +to another one by emitting two MOV-instructions, will be +used only if one of the register-pairs is the local +base.

+ +

2.10. Patterns

+ +

As a general habit I have allocated (uses ...) all +registers that should be free to generate the code, although +it is not always necessary. For example in the code rule

+
     pat loe
+     uses hlreg
+     gen lhld {label,$1}                   yields hl
+
+ +

the ’uses’-clause could have been omitted +because cgg knows that LHLD destroys register-pair +HL.

+ +

Since there is only one register with property +’hlreg’, there is no difference between +’uses hlreg’ (allocate a register with property +’hlreg’) and ’kills hlreg’ (remove +all registers with property ’hlreg’ from the +fake-stack). The same applies for the property +’dereg’.
+Consequently ’kills’ is rarely used in this +back-end table.

+ +

2.10.1. Group 1: Load instructions

+ +

When a local variable must be squared, there will +probably be EM-code like:

+
     lol 10
+     lol 10
+     mli 2
+
+ +

When the code for the first ’lol 10’ has +been executed, DE contains the wanted value. To refrain +cgg from emitting the code for ’lol 10’ +again, an extra pattern is included in the table for cases +like this. The same applies for two consecutive +’loe’-s or ’lil’-s.

+ +

A bit tricky is ’lof’. It expects either DE +or HL on the fake-stack, moves {const2,$1} into the other +one, and eventually adds them. The ’kills’ part +is necessary here because if DE was on the fake-stack, +cgg doesn’t see that the contents of DE is +destroyed by the code (in fact ’kills dereg’ +would have been sufficient: because of the DAD instruction +cgg knows that HL is destroyed).

+ +

By lookahead, cgg can make a clever choice +between the first and second code rule of ’loi +4’. The same applies for several other +instructions.

+ +

2.10.2. Group 2: Store instructions

+ +

A similar idea as with the two consecutive identical +load instructions in Group 1, applies for a store +instruction followed by a corresponding load +instruction.

+ +

2.10.3. Groups 3 and 4: Signed and unsigned integer arithmetic

+ +

Since the 8080 instruction set doesn’t provide +multiply and divide instructions, special routines are made +to accomplish these tasks.

+ +

Instead of providing four slightly differing routines +for 16 bit signed or unsigned division, yielding the +quotient or the remainder, the routines are merged. This +saves space and assembly time when several variants are used +in a particular program, at the cost of a little speed. When +the routine is called, bit 7 of register A indicates whether +the operands should be considered as signed or as unsigned +integers, and bit 0 of register A indicates whether the +quotient or the remainder has to be delivered.
+The same applies for 32 bit division.

+ +

The routine doing the 16 bit unsigned multiplication +could have been used for 16 bit signed multiplication too. +Nevertheless a special 16 bit signed multiplication routine +is provided, because this one will usually be much +faster.

+ +

2.10.4. Group 5: Floating point arithmetic

+ +

Floating point is not implemented. Whenever an +EM-instruction involving floating points is offered to the +code-generator, it calls the corresponding library routine +with the proper parameters. Each floating point library +routine calls ’eunimpl’, trapping with trap +number 63. Some of the Pascal and C library routines output +floating point EM-instructions, so code has to be generated +for them. Of course this does not imply the code will ever +be executed.

+ +

2.10.5. Group 12: Compare instructions

+ +

The code for ’cmu 2’, with its 4 labels, is +terrible. But it is the best I could find.

+ +

2.10.6. Group 9: Logical instructions

+ +

I have tried to merge both variants of the instructions +’and 2’, ’ior 2’ and ’xor +2’, as in

+
     pat and $1==2
+     with hl_or_de hl_or_de
+     uses reusing %1, reusing %2, hl_or_de, areg
+     gen mov a,%1.2
+         ana %2.2
+         mov %a.2,a
+         mov a,%1.1
+         ana %2.1
+         mov %a.1,a                     yields %a
+
+ +

but the current version of cgg doesn’t +approve this. In any case cgg chooses either DE or HL +to store the result, using lookahead.

+ +

2.10.7. Group 14: Procedure call instructions

+ +

There is an 8 bytes function return area, called +’.fra’. If only 2 bytes have to be returned, +register-pair DE is used.

+ +

3. LIBRARY ROUTINES

+ +

Most of the library routines start with saving the +return address and the local base, so that the parameters +are on the top of the stack and the registers B and C are +available as scratch registers. Since register-pair HL is +needed to accomplish these tasks, and also to restore +everything just before the routine returns, it is not +possible to transfer data between the routines and the +surrounding world through register H or L. Only registers A, +D and E can be used for this.

+ +

When a routine returns 2 bytes, they are usually +returned in registers-pair DE. When it returns more than 2 +bytes they are pushed onto the stack.
+It would have been possible to let the 32 bit arithmetic +routines return 2 bytes in DE and the remaining 2 bytes on +the stack (this often would have saved some space and +execution time), but I don’t consider that as +well-structured programming.

+ +

4. TRAPS

+ +

Whenever a trap, for example trying to divide by zero, +occurs in a program that originally was written in C or +Pascal, a special trap handler is called. This trap handler +wants to write an appropriate error message on the monitor. +It tries to read the message from a file (e.g. +etc/pc_rt_errors in the EM home directory for Pascal +programs), but since the 8080 back-end doesn’t know +about files, we are in trouble. This problem is solved, as +far as possible, by including the ’open’-monitor +call in the mon-routine. It returns with file descriptor -1. +The trap handler reacts by generating another trap, with the +original trap number. But this time, instead of calling the +C- or Pascal trap handler again, the next message is printed +on the monitor:

+
        trap number <TN>
+        line <LN> of file <FN>
+
+
+where   <TN> is the trap number (decimal)
+        <LN> is the line number (decimal)
+        <FN> is the filename of the original program
+
+ +

Trap numbers are subdivided as follows:

+ + + + + + +
+ +

1-27:

+
+ +

EM-machine error, as described in [3]

+
+ + + + + + +
+ +

63:

+
+ +

an unimplemented EM-instruction is used

+
+ + + + + + +
+ +

64-127:

+
+ +

generated by compilers, runtime systems, etc.

+
+ + + + + + + +
+ +

128-252:

+
+ +

generated by user programs

+
+
+ +

5. IMPLEMENTATION

+ +

It will not be possible to run the entire Amsterdam +Compiler Kit on a 8080-based computer system. One has to +write a program on another system, a system where the +compiler kit runs on. This program may be a mixture of +high-level languages, such as C or Pascal, EM and 8080 +assembly code. The program should be compiled using the +compiler kit, producing 8080 machine code. This code should +come available to the 8080 machine for example by +downloading or by storing it in ROM (Read Only Memory).

+ +

Depending on the characteristics of the particular 8080 +based system, some adaptations have to be made:

+ + + + + + +
+ +

1)

+
+ +

In ’head_em’: the base address, which is the +address where the first 8080 instruction will be stored, and +the initial value of the stackpointer are set to 0x1000 and +0x8000 respectively.

+
+ + + + + +
+

Other systems require other values.

+
+ + + + + + +
+ +

2)

+
+ +

In ’head_em’: before calling +"__m_a_i_n", the environment pointer, argument +vector and argument count will have to be pushed onto the +stack. Since this back-end is tested on a system without any +knowledge of these things, dummies are pushed now.

+
+ + + + + + +
+ +

3)

+
+ +

In ’tail_em’: proper routines +"putchar" and "getchar" should be +provided. They should write resp. read a character on/from +the monitor. Maybe some conversions will have to be +made.

+
+ + + + + + +
+ +

4)

+
+ +

In ’head_em’: an application program returns +control to the monitor by jumping to address 0xFB52. This +may have to be changed for different systems.

+
+ + + + + + +
+ +

5)

+
+ +

In ’tail_em’: the current version of the +8080 back-end has very limited I/O capabilities, because it +was tested on a system that had no knowledge of files. So +the implementation of the EM-instruction ’mon’ +is very simple; it can only do the following things:

+
+ + + + + + + +
+ +

Monitor call 1:

+
+ +

exit

+
+ + + + + + + +
+ +

Monitor call 3:

+
+ +

read, always reads from the monitor.

+
+ + + + + +
+

echos the read character.
+ignores file descriptor.

+
+ + + + + + + +
+ +

Monitor call 4:

+
+ +

write, always writes on the monitor.

+
+ + + + + +
+

ignores file descriptor.

+
+ + + + + + + +
+ +

Monitor call 5:

+
+ +

open file, returns file descriptor -1.

+
+ + + + + +
+

(compare chapter about TRAPS)

+
+ + + + + + + +
+ +

Monitor call 6:

+
+ +

close file, returns error code = 0.

+
+ + + + + + + +
+ +

Monitor call 54:

+
+ +

io-control, returns error code = 0.

+
+ + + + + +
+

If the system should do file-handling the routine +".mon" should be extended thoroughly.

+ +

6. INTEL 8080 VERSUS ZILOG Z80 AND INTEL 8086

+ +

6.1. Introduction

+ +

At about the same time I developed the back end for the +Intel 8080 and Intel 8085, Frans van Haarlem did the same +job for the Zilog z80 microprocessor. Since the z80 +processor is an extension of the 8080, any machine code +offered to a 8080 processor can be offered to a z80 too. The +assembly languages are quite different however.
+During the developments of the back ends we have used two +micro-computers, both equipped with a z80 microprocessor. Of +course the output of the 8080 back end is assembled by an +8080 assembler. This should assure I have never used any of +the features that are potentially available in the z80 +processor, but are not part of a true 8080 processor.

+ +

As a final job, I have investigated the differences +between the 8080 and z80 processors and their influence on +the back ends. I have tried to measure this influence by +examining the length of the generated code. I have also +involved the 8086 micro-processor in this measurements.

+ +

6.2. Differences between the 8080 and z80 processors

+ +

Except for some features that are less important +concerning back ends, there are two points where the z80 +improves upon the 8080:

+ + + + + + +
+ +

First,

+
+ +

the z80 has two additional index registers, IX and IY. +They are used as in

+
+ + + + + +
+
              LD B,(IX+10)
+
+ +

The offset, here 10, should fit in one byte.

+
+ + + + + + +
+ +

Second,

+
+ +

the z80 has several additional instructions. The most +important ones are:

+
+ + + + + + + +
+ +

1)

+
+ +

The 8080 can only load or store register-pair HL direct +(using LHLD or SHLD). The z80 can handle BC, DE and SP +too.

+
+ + + + + + + +
+ +

2)

+
+ +

Instructions are included to ease block movements.

+
+ + + + + + + +
+ +

3)

+
+ +

There is a 16 bit subtract instruction.

+
+ + + + + + + +
+ +

4)

+
+ +

While the 8080 can only rotate the accumulator, the z80 +can rotate and shift each 8 bit register.

+
+ + + + + + + +
+ +

5)

+
+ +

Special routines are included to jump to near locations, +saving 1 byte.

+
+ +

6.3. Consequences for the 8080 and z80 back end

+ +

The most striking difference between the 8080 and z80 +back ends is the choice of the local base. The writer of the +z80 back end chose index register IY as local base, because +this results in the cheapest coding of EM-instructions like +’lol’ and ’stl’. The z80 +instructions that load local 10, for example

+
     LD E,(IY+10)
+     LD D,(IY+11)
+
+ +

occupy 6 bytes and take 38 time periods to execute. The +five corresponding 8080 instructions loading a local occupy +7 bytes and take 41 time periods. Although the profit of the +z80 might be not world-shocking, it should be noted that as +a side effect it may save some pushing and popping since +register pair HL is not used.

+ +

The choice of IY as local base has its drawbacks too. +The root of the problem is that it is not possible to add IY +to HL. For the EM-instruction

+
     lal 20
+
+ +

the z80 back end generates code like

+
     LD BC,20
+     PUSH IY
+     POP HL
+     ADD HL,BC
+
+ +

leaving the wanted address in HL.
+This annoying push and pop instructions are also needed in +some other instructions, for instance in ’lol’ +when the offset doesn’t fit in one byte.

+ +

Beside the choice of the local base, I think there is no +fundamental difference between the 8080 and z80 back ends, +except of course that the z80 back end has register pair BC +and, less important, index register IX available as scratch +registers.

+ +

Most of the PATTERNS in the 8080 and z80 tables are more +or less a direct translation of each other.

+ +

6.4. What did I do?

+ +

To get an idea of the quality of the code generated by +the 8080, z80 and 8086 back ends I have gathered some C +programs and some Pascal programs. Then I produced 8080, z80 +and 8086 code for them. Investigating the assembler listing +I found the lengths of the different parts of the generated +code. I have checked two areas:

+ + + + + + + +
+ +

1)

+
+ +

the entire text part

+
+
+ + + + + + +
+ +

2)

+
+ +

the text part without any library routine, so only the +plain user program

+
+ +

I have to admit that neither one of them is really +honest. When the entire text part is checked, the result is +disturbed because not always the same library routines are +loaded. And when only the user program itself is considered, +the result is disturbed too. For example the 8086 has a +multiply instruction, so the EM-instruction ’mli +2’ is translated in the main program, but the 8080 and +z80 call a library routine that is not counted. Also the +8080 uses library routines at some places where the z80 does +not.

+ +

But nevertheless I think the measurements will give an +idea about the code produced by the three back ends.

+ +

6.5. The results

+ +

The table below should be read as follows. For all +programs I have computed the ratio of the code-lengths of +the 8080, z80 and 8086. The averages of all Pascal/C +programs are listed in the table, standardized to +’100’ for the 8080. So the listed +’107’ indicates that the lengths of the text +parts of the z80 programs that originally were Pascal +programs, averaged 7 percent larger than in the +corresponding 8080 programs.

+ + +

--------------------------------------------------
+| | 8080 | z80 | 8086 |
+--------------------------------------------------
+| C, text part | 100 | 103 | 65 |
+| Pascal, text part | 100 | 107 | 55 |
+| C, user program | 100 | 110 | 71 |
+| Pascal, user program | 100 | 118 | 67 |
+--------------------------------------------------

+ +

The most striking thing in this table is that the z80 +back end appears to produce larger code than the 8080 back +end. The reason is that the current z80 back end table is +not very sophisticated yet. For instance it doesn’t +look for any EM-pattern longer than one. So the table shows +that the preparations in the 8080 back end table to produce +faster code (like recognizing special EM-patterns and +permitting one byte registers on the fake-stack) was not +just for fun, but really improved the generated code +significantly.

+ +

The table shows that the 8080 table is relatively better +when only the plain user program is considered instead of +the entire text part. This is not very surprising since the +8080 back end sometimes uses library routines where the z80 +and especially the 8086 don’t.

+ +

The difference between the 8080 and z80 on the one hand +and the 8086 on the other is very big. But of course it was +not equal game: the 8086 is a 16 bit processor that is much +more advanced than the 8080 or z80 and the 8086 back end is +known to produce very good code.

+ +

REFERENCES

+ + + + + + +
+ +

[1]

+
+ +

8080/8085 Assembly Language Programming Manual,

+
+ + + + + +
+

Intel Corporation (1977,1978)

+
+ + + + + + +
+ +

[2]

+
+ +

Andrew S. Tanenbaum, Hans van Staveren, E.G. Keizer and +Johan W. Stevenson,

+
+ + + + + +
+

A practical tool kit for making portable compilers,
+Informatica report 74, Vrije Universiteit, Amsterdam, +1983.

+ +

An overview on the Amsterdam Compiler Kit.

+
+ + + + + + +
+ +

[3]

+
+ +

Tanenbaum, A.S., Stevenson, J.W., Keizer, E.G., and van +Staveren, H.

+
+ + + + + +
+

Description of an experimental machine architecture for +use with block structured languages,
+Informatica report 81, Vrije Universiteit, Amsterdam, +1983.

+ +

The defining document for EM.

+
+ + + + + + + +
+ +

[4]

+
+ +

Steel, T.B., Jr.

+
+
+ + + + + +
+

UNCOL: The myth and the Fact. in Ann. Rev. Auto. +Prog.
+Goodman, R. (ed.), vol. 2, (1960), p325-344.

+ +

An introduction to the UNCOL idea by its originator.

+
+ + + + + + + +
+ +

[5]

+
+ +

van Staveren, Hans

+
+
+ + + + + +
+

The table driven code generator from the Amsterdam +Compiler Kit (Second Revised Edition),
+Vrije Universiteit, Amsterdam.

+ +

The defining document for writing a back end table.

+
+ + + + + + + +
+ +

[6]

+
+ +

Voors, Jan

+
+
+ + + + + +
+

A back end for the Zilog z8000 micro,
+Vrije Universiteit, Amsterdam.

+ +

A document like this one, but for the z8000.

+
+
+ + diff --git a/src/olddocs/i80.pdf b/src/olddocs/i80.pdf new file mode 100644 index 0000000000000000000000000000000000000000..13c6484e28ba23bfc5c6ee41d14d1b1bc20f0f11 GIT binary patch literal 52560 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/install.html b/src/olddocs/install.html new file mode 100644 index 000000000..d7e4fd5c1 --- /dev/null +++ b/src/olddocs/install.html @@ -0,0 +1,2645 @@ + + + + + + +Amsterdam Compiler Kit Installation Guide + + + +

Amsterdam Compiler Kit Installation Guide

+
1. Introduction
+2. The ACK installation process
+3. Restoring the ACK tree
+4. Adapting ACK to the local system
+5. Compiling the Kit
+5.1. Problems
+5.1.1. on Unisoft m68000 systems.
+5.1.2. with backends
+5.2. An example output of TakeAction.
+6. Commands
+7. Machines
+8. Compilation on a different machine.
+8.1. Backend
+8.2. Universal assembler/loader, link editor
+9. Options
+9.1. Default machine
+9.2. Pathnames
+10. Makefiles
+11. Testing
+12. Documentation
+ +
+ +

1. Introduction

+ +

This document describes the process of installing the +Amsterdam Compiler Kit (ACK). It depends on the combination +of hard- and software how hard it will be to install the +Kit. This description is intended for a Sun-3 or SPARC +workstation. Installation on VAXen running Berkeley +UNIX ® or Ultrix, Sun-2 systems and most +System V UNIX systems should be easy. As of +this distribution, installation on PDP-11’s or other +systems with a small address space is no longer supported. +See section 8 for installation on other systems.

+ +

2. The ACK installation process

+ +

In the ACK installation process, three directory trees +are used:

+ + + + + + +
+ +

-

+
+ +

the ACK source tree. This is the tree on the ACK +distribution medium. For the rest of this document, we will +refer to this directory as $SRC_HOME;

+
+ + + + + + +
+ +

-

+
+ +

a configuration tree. This tree is built by the +installation process and is used to do compilations in. Its +structure reflects that of the source tree, but this tree +will mostly contain Makefiles and relocatable objects. For +the rest of this document, we will refer to this directory +as $CONFIG;

+
+ + + + + + +
+ +

-

+
+ +

an ACK users tree. This tree is also built by the +installation process. For the rest of this document, we will +refer to this directory as $TARGET_HOME;

+
+ +

After installation, the directories in $TARGET_HOME +contain the following information:

+ + + + + + +
+ +

bin

+
+ +

the few utilities that knot things together. See the +section about "Commands".

+
+ + + + + + +
+ +

lib

+
+ +

root of a tree containing almost all libraries used by +commands. Files specific to a certain machine are collected +in one subtree per machine. E.g. "lib/pdp", +"lib/z8000". The names used here are the same +names as used for subtrees of +"$SRC_HOME/mach".

+
+ + + + + + +
+ +

lib/descr

+
+ +

command descriptor files used by the program ack.

+
+ + + + + + +
+ +

lib/LLgen

+
+ +

files used by the LL(1) parser generator.

+
+ + + + + + +
+ +

lib/flex

+
+ +

files used by the lexical analyzer generator Flex.

+
+ + + + + + + +
+ +

lib/m2

+
+ +

definition modules for Modula-2.

+
+
+ + + + + + +
+ +

lib.bin

+
+ +

root of a tree containing almost all binaries used by +commands. All programs specific to a certain machine are +collected in one subtree per machine. E.g. +"lib.bin/pdp", "lib.bin/z8000". The +names used here are the same names as used for subtrees of +"$SRC_HOME/mach".

+
+ + + + + + + +
+ +

lib.bin/ego

+
+ +

files used by the global optimizer.

+
+
+ + + + + + +
+ +

lib.bin/lint

+
+ +

binaries for the lint passes and lint libraries.

+
+ + + + + + +
+ +

lib.bin/ceg

+
+ +

files used by the code-expander-generator.

+
+ + + + + + +
+ +

etc

+
+ +

contains the file "ip_spec.t" needed for EM +interpreters and EM documentation.

+
+ + + + + + + +
+ +

config

+
+ +

contains two include files:

+
+
+ +

+ + + + + +
+

These include files are specific for the current machine, +so they are in a separate directory.

+
+ +

include/_tail_cc

+ + + + + +
+

include files needed by modules in the C library from +lang/cem/libcc.

+
+ +

include/tail_ac

+ + + + + +
+

include files for ANSI C.

+
+ + + + + + + +
+ +

include/occam

+
+ +

include files for occam.

+
+
+ +

include/_tail_mon

+ + + + + +
+

more or less system independent include files needed by +modules in the library lang/cem/libcc/mon.

+
+ + + + + + + +
+ +

h

+
+ +

the #include files for:

+
+
+ +

+ + + + + + +
+ +

modules

+
+ +

root of a tree containing modules for compiler +writers.

+
+ + + + + + + +
+ +

modules/man

+
+ +

manual pages for all modules.

+
+
+ + + + + + + +
+ +

modules/lib

+
+ +

contains module objects.

+
+
+ + + + + + +
+ +

modules/h

+
+ +

include files for some of the modules.

+
+ + + + + + +
+ +

modules/pkg

+
+ +

include files for some of the modules.

+
+ + + + + + +
+ +

doc

+
+ +

this directory contains the unformatted documents for +the Kit. A list of the available documents can be found in +the last section. These documents must be processed by +[nt]roff.

+
+ + + + + + + +
+ +

man

+
+ +

man files for various utilities.

+
+
+ +

When installing ACK on several types of machines with a +shared file system, it may be useful to know that the +"doc", "etc", "h", +"include", "lib" and "man" +sub-directories do not depend on this particular +installation. They do not contain binaries or path-dependent +information. These directories can therefore be shared +between the ACK installations. This can be accomplished by +creating the tree and suitable symbolic links before +starting the installation process.

+ +

For instance, let us say there is a file-system that is +accessible from the different machines as +"/usr/share/local", and the ACK binary tree must +be installed in "/usr/local/ack". In this case, +proceed as follows:

+ + + + + + +
+ +

+
+ +

create a directory "/usr/share/local/ack", +with subdirectories "doc", "etc", +"h", "include", "lib" and +"man".

+
+ + + + + + +
+ +

+
+ +

create a directory "/usr/local/ack" and then +create symbolic links "doc" to +"/usr/share/local/ack/doc", etc.

+
+ +

If this is done on all machines on which ACK will be +installed, the machine-independent part only has to be +installed once, preferably on the fastest processor (it +takes a long time to install all libraries).

+ +

The directories in the source tree contain the following +information:

+ + + + + + + +
+ +

bin

+
+ +

source of some shell-scripts.

+
+
+ + + + + + +
+ +

lib

+
+ +

mostly description files for the "ack" +program.

+
+ + + + + + +
+ +

etc

+
+ +

the main description of EM sits here. Files (e.g. +em_table) describing the opcodes and pseudos in use, the +operands allowed, effect in stack etc. etc.

+
+ + + + + + +
+ +

mach

+
+ +

just there to group the directories with all sources for +each machine. The section about "Machines" of this +manual indicates which subdirectories are used for which +systems.

+
+ + + + + +
+

These directories have subdirectories named:

+ +

+ + + + + +
+

Actually, some of these directories will only appear in +the configuration tree.
+The directory proto contains files used by most machines, +like machine-independent sources and Makefiles.

+ +

+ + + + + + + +
+ +

emtest

+
+ +

contains prototype of em test set.

+
+
+ + + + + + +
+ +

lang

+
+ +

just there to group the directories for all +front-ends.

+
+ + + + + + + +
+ +

lang/pc

+
+ +

the Pascal front-end.

+
+
+ + + + + +
+ +

lang/pc/libpc

+
+
+ + + + + +
+

source of Pascal run-time system (in EM or C).

+
+ + + + + + +
+ +

lang/pc/test

+
+ +

some test programs written in Pascal.

+
+ + + + + + + +
+ +

lang/pc/comp

+
+ +

the Pascal compiler proper.

+
+
+ + + + + + + +
+ +

lang/cem

+
+ +

the C front-end.

+
+
+ +

lang/cem/libcc

+ + + + + +
+

directories with sources of C runtime system, libraries +(in EM or C).

+
+ +

lang/cem/libcc/gen

+ + + + + +
+

sources for routines in chapter III of +UNIX programmers manual, excluding stdio.

+
+ +

lang/cem/libcc/stdio

+ + + + + +
+

stdio sources.

+
+ +

lang/cem/libcc/math

+ + + + + +
+

sources for mathematical routines, normally available +with the -lm option to cc.

+
+ +

lang/cem/libcc/mon

+ + + + + +
+

sources for routines in chapter II, mostly written in +EM.

+
+ +

lang/cem/cemcom

+ + + + + +
+

the compiler proper.

+
+ +

lang/cem/cemcom.ansi

+ + + + + +
+

the ANSI C compiler proper.

+
+ +

lang/cem/cpp.ansi

+ + + + + +
+

the ANSI C preprocessor.

+
+ +

lang/cem/libcc.ansi

+ + + + + +
+

the ANSI C library sources.

+
+ +

lang/cem/ctest

+ + + + + +
+

the C test set.

+
+ +

lang/cem/ctest/cterr

+ + + + + +
+

programs developed for pinpointing previous errors.

+
+ +

lang/cem/ctest/ct*

+ + + + + +
+

the test programs.

+
+ + + + + + + +
+ +

lang/cem/lint

+
+ +

a C program checker.

+
+
+ +

lang/cem/lint/lpass1

+ + + + + +
+

the first pass of lint.

+
+ +

lang/cem/lint/lpass1.ansi

+ + + + + +
+

the first pass of lint, this time for ANSI C.

+
+ +

lang/cem/lint/lpass2

+ + + + + +
+

the second pass of lint, shared between ANSI C and +"old-fashioned" C.

+
+ +

lang/cem/lint/llib

+ + + + + +
+

programs for producing lint libraries.

+
+ + + + + + + +
+ +

lang/basic

+
+ +

the Basic front-end.

+
+
+ +

lang/basic/src

+ + + + + +
+

the compiler proper.

+
+ +

lang/basic/lib

+ + + + + +
+

the Basic run-time library source.

+
+ +

lang/basic/test

+ + + + + +
+

various Basic programs.

+
+ + + + + + + +
+ +

lang/occam

+
+ +

the occam front-end.

+
+
+ +

lang/occam/comp

+ + + + + +
+

the compiler proper.

+
+ +

lang/occam/lib

+ + + + + +
+

source of occam run-time system (in EM or C).

+
+ +

lang/occam/test

+ + + + + +
+

some occam programs.

+
+ + + + + + + +
+ +

lang/m2

+
+ +

the Modula-2 front-end.

+
+
+ + + + + + + +
+ +

lang/m2/comp

+
+ +

the compiler proper.

+
+
+ + + + + + +
+ +

lang/m2/libm2

+
+ +

source of Modula-2 run-time system (in EM, C and +Modula-2).

+
+ + + + + + + +
+ +

lang/m2/m2mm

+
+ +

the Modula-2 makefile generator.

+
+
+ + + + + + + +
+ +

lang/m2/test

+
+ +

some Modula-2 example programs.

+
+
+ + + + + + +
+ +

lang/fortran

+
+ +

the Fortran front-end (translates Fortran into C). This +compiler is not a part of ACK, but is included because it +adds another language. The Fortran system carries the +following copyright notice:

+
+ + + + + +
+
/**************************************************************
+Copyright 1990, 1991 by AT&T Bell Laboratories and Bellcore.
+
+Permission to use, copy, modify, and distribute this software
+and its documentation for any purpose and without fee is hereby
+granted, provided that the above copyright notice appear in all
+copies and that both that the copyright notice and this
+permission notice and warranty disclaimer appear in supporting
+documentation, and that the names of AT&T Bell Laboratories or
+Bellcore or any of their entities not be used in advertising or
+publicity pertaining to distribution of the software without
+specific, written prior permission.
+
+AT&T and Bellcore disclaim all warranties with regard to this
+software, including all implied warranties of merchantability
+and fitness.  In no event shall AT&T or Bellcore be liable for
+any special, indirect or consequential damages or any damages
+whatsoever resulting from loss of use, data or profits, whether
+in an action of contract, negligence or other tortious action,
+arising out of or in connection with the use or performance of
+this software.
+**************************************************************/
+
+
+ +

lang/fortran/comp

+ + + + + +
+

the compiler proper.

+
+ +

lang/fortran/lib

+ + + + + +
+

source of Fortran runtime system and libraries.

+
+ + + + + + +
+ +

fast

+
+ +

contains sub-directories for installing the fast ACK +compatible compilers.

+
+ + + + + +
+ +

fast/driver

+
+
+ + + + + +
+

contains the sources of the fast ACK compatible compiler +drivers.

+
+ + + + + + +
+ +

fcc

+
+ +

contains the fast cc-compatible C compiler for SUN-3 and +VAX.

+
+ + + + + + +
+ +

util

+
+ +

contains directories with sources for various +utilities.

+
+ + + + + + +
+ +

util/ack

+
+ +

the program used for translation with the Kit.

+
+ + + + + + +
+ +

util/opt

+
+ +

the EM peephole optimizer (*.k => *.m).

+
+ + + + + + + +
+ +

util/ego

+
+ +

the global optimizer.

+
+
+ + + + + + + +
+ +

util/topgen

+
+ +

the target optimizer generator.

+
+
+ + + + + + +
+ +

util/misc

+
+ +

decode (*.[km] => *.e) + encode (*.e => *.k).

+
+ + + + + + +
+ +

util/data

+
+ +

the C-code for $TARGET_HOME/lib.bin/em_data.a. These +sources are created by the Makefile in +‘etc‘.

+
+ + + + + + +
+ +

util/ass

+
+ +

the EM assembler (*.[km] + libraries => e.out).

+
+ + + + + + +
+ +

util/arch

+
+ +

the archivers to be used for all EM utilities.

+
+ + + + + + +
+ +

util/cgg

+
+ +

a program needed for compiling backends.

+
+ + + + + + +
+ +

util/ncgg

+
+ +

a program needed for compiling the newest backends.

+
+ + + + + + + +
+ +

util/cpp

+
+ +

the C preprocessor.

+
+
+ + + + + + + +
+ +

util/shf

+
+ +

various shell files.

+
+
+ + + + + + + +
+ +

util/LLgen

+
+ +

the extended LL(1) parser generator.

+
+
+ + + + + + +
+ +

util/amisc

+
+ +

contains some programs handling ACK a.out format, such +as anm, asize.

+
+ + + + + + +
+ +

util/cmisc

+
+ +

contains some programs to help in resolving name +conflicts, and a dependency generator for makefiles.

+
+ + + + + + +
+ +

util/led

+
+ +

the ACK link-editor, reading ACK relocatable a.out +format, and writing ACK a.out format.

+
+ + + + + + +
+ +

util/int

+
+ +

an EM interpreter, written in C. Very useful for +checking out software, but slow.

+
+ + + + + + + +
+ +

util/ceg

+
+ +

code expander generator.

+
+
+ + + + + + + +
+ +

util/grind

+
+ +

a symbolic debugger.

+
+
+ + + + + + +
+ +

util/byacc

+
+ +

this is Berkeley yacc, in the public domain.

+
+ + + + + + +
+ +

util/flex

+
+ +

this is a replacement for lex. It carries the following +copyright notice:

+
+ + + + + +
+
Copyright (c) 1990 The Regents of the University of California.
+All rights reserved.
+
+This code is derived from software contributed to Berkeley by
+Vern Paxson.
+
+The United States Government has rights in this work pursuant
+to contract no. DE-AC03-76SF00098 between the United States
+Department of Energy and the University of California.
+
+Redistribution and use in source and binary forms are permitted
+provided that: (1) source distributions retain this entire
+copyright notice and comment, and (2) distributions including
+binaries display the following acknowledgement:  ‘‘This product
+includes software developed by the University of California,
+Berkeley and its contributors’’ in the documentation or other
+materials provided with the distribution and in all advertising
+materials mentioning features or use of this software.  Neither the
+name of the University nor the names of its contributors may be
+used to endorse or promote products derived from this software
+without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED ‘‘AS IS’’ AND WITHOUT ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.
+
+
+ +

All path names mentioned in the text of this document +are relative to $SRC_HOME, unless they start with +’/’ or one of $SRC_HOME, $TARGET_HOME or +$CONFIG.

+ +

3. Restoring the ACK tree

+ +

The process of installing the Amsterdam Compiler Kit is +quite simple. The first step is to restore the Amsterdam +Compiler Kit distribution tree structure. Proceed as +follows

+ + + + + + + +
+ +

+
+ +

Create a directory, for example +/usr/share/local/src/ack, on a device with at least 15 +Megabytes left. This directory will be $SRC_HOME.

+
+ + + + + + + + +
+ +

+
+ +

Change to that directory (cd ...).

+
+
+ + + + + + + +
+ +

+
+ +

Extract all files from the distribution medium, for +instance magtape: tar x.

+
+ + + + + + + +
+ +

+
+ +

Keep a copy of the original distribution to be able to +repeat the process of installation in case of disasters. +This copy is also useful as a reference point for +diff-listings.

+
+ +

4. Adapting ACK to the local system

+ +

Before compiling the sources in the Kit some +installation dependent actions have to be taken. Most of +these are performed by an interactive shell script in the +file $SRC_HOME/first/first. Calling this script +should be done from another directory, for instance an empty +directory which will later become $CONFIG.

+ +

The actions of the first script are:

+ + + + + + +
+ +

+
+ +

Asking for the path names of the ACK source directory +($SRC_HOME), the configuration directory ($CONFIG), and the +ACK users directory ($TARGET_HOME). About 5M are needed for +the configuration tree. The disk space needed for the ACK +users tree depends on which front-ends and back-ends are to +be installed. For instance, on our SPARC systems we have +installed all languages and 6 back-ends, including the +system-independent part. This amounts to about 16M. On our +SUN-3 systems, we have installed all front-ends and 5 +back-ends, but only the machine-dependent part. The +machine-independent directories are symbolic links to the +SPARC ACK users tree. We also have the fast ACK compilers +installed on the SUN-3’s. The total amount of +disk-space used is less than 8M.

+
+ + + + + + +
+ +

+
+ +

Asking for what type of system the binary tree must be +produced for and creating the shell script +"ack_sys" in the Kit’s bin directory. +Several utilities make use of "ack_sys" to +determine the type of system. The current choice is +between:

+
+ +

+ + + + + +
+

For some of these, the installation procedure has not +been tested, as we don’t have them. For others, the +installation procedure has only been tested with earlier +distributions, as we don’t have those systems anymore. +However, the sun3 and sparc systems are known to behave +reasonably. The sparc_solaris system has only been tested +with the GNU C compiler, because we don’t have the SUN +C compiler (it is unbundled in Solaris 2). The Sun systems +should run SunOs Release 3.0 or newer. The i386 choice may +also be used for Intel 80386 or 80486 systems running +UNIX System V Release 4. These systems are +also able to run Xenix System V binaries. If the target +system is not on this list, choose one that comes close. If +none of them come close, use the "ANY" choice. For +ANY, any name can be used, but the Kit will not be able to +compile programs for the target system. See the section +about "compilation on a different machine".

+
+ + + + + + +
+ +

+
+ +

Setting the default machine for which code is produced +to the local type of system according to the table above. +This in done in the file +"$TARGET_HOME/config/local.h". See also section +9.1.

+
+ + + + + + +
+ +

+
+ +

Asking for things that don’t have to be +installed.

+
+ + + + + + +
+ +

+
+ +

Producing a shell script called "INSTALL" that +will take care of the ACK installation process.

+
+ +

5. Compiling the Kit

+ +

The next step in the installation process is to run the +"INSTALL" shell-script. When using a Bourne-shell, +type:

+
     sh INSTALL > INSTALL.out 2>&1 &
+
+ +

When using a C-shell, type:

+
     sh INSTALL >& INSTALL.out &
+
+ +

This shell-script performs the following steps:

+ + + + + + +
+ +

+
+ +

Produce a configuration tree ($CONFIG), reflecting the +structure of the source tree.

+
+ + + + + + +
+ +

+
+ +

Produce Makefiles in $CONFIG. As mentioned before, +compilations will be done in the configuration tree, not in +the source tree. Most configuration directories will have +Makefiles used to compile and install the programs in that +directory. All programs needed for compilation and/or cross +compilation with the Kit are installed in $TARGET_HOME by +these Makefiles. These Makefiles are produced from +corresponding files called "proto.make" in the +source tree. In fact, the "proto.make" files are +almost complete Makefiles, except for some macro definitions +that are collected by the first script. The Makefiles +adhere to a standard which is described in the section +9.

+
+ + + + + + +
+ +

+
+ +

Copy "Action" files to the configuration tree +and editing them to reflect the choices concerning the parts +of ACK that have to be installed. "Action" files +are described below.

+
+ + + + + + +
+ +

+
+ +

Copy part of the source tree to the ACK users tree +(include files, manual pages, documentation, et cetera).

+
+ + + + + + +
+ +

+
+ +

Calling the "TakeAction" script. All these +Makefiles do not have to be called separately. We wrote a +shell script calling the make’s needed to install the +whole Kit. This script consists of the file +$SRC_HOME/TakeAction and a few files called Action in some +configuration directories. The Action files describe in a +very simple form which actions have to be performed in which +directories. The default action is to start "make +install && make clean". The output of each make +is diverted to a file called "Out" in the same +directory as the make was started in. If the make was +successful (return code 0) the Out file is removed and the +script TakeAction produces a small message indicating that +it succeeded in fulfilling its goal. If the make was not +successful (any other return code) the Out file is left +alone for further examination and the script TakeAction +produces a small message indicating that it failed.

+
+ + + + + +
+

For some programs the scripts already know they +can’t be installed on the local type of system. In +that case they produce a message "Sorry, ....." +and happily proceed with further installation commands.

+
+ +

Installation of the Kit might take anything from a few +hours to more than a day, depending on the speed of the +local machine and what must be installed.

+ +

If the installation succeeded, the Kit is ready to be +used. Read section 6 and the manuals provided with the Kit +(in the $TARGET_HOME/man directory) on how to use it.

+ +

5.1. Problems

+ +

5.1.1. on Unisoft m68000 systems.

+ +

The Unisoft C compiler has a bug which impedes the +correct translation of the peephole optimizer. For a more +detailed description of this phenomenon see the file +"$SRC_HOME/mach/m68k2/Unisoft_bug". (This +observation was made in 1985 or so, so it is probably no +longer true).

+ +

5.1.2. with backends

+ +

The backends for the PDP11, VAX, Motorola 68000 and +68020, SPARC, Intel 8086, and Intel 80386 have been heavily +used by ourselves and are well tested. The backends for the +other machines are known to run our own test programs, but +might reveal errors when more heavily used.

+ +

5.2. An example output of TakeAction.

+
    System definition -- done
+    EM definition library -- done
+    C utilities -- done
+    Flex lexical analyzer generator -- done
+    Yacc parser generator -- done
+    system-call interface module -- done
+        .
+        .
+        .
+    EM Global optimizer -- done
+    ACK archiver -- done
+    Program ’ack’ -- done
+    Bootstrap for backend tables -- done
+    Bootstrap for newest form of backend tables -- done
+        .
+        .
+        .
+    C frontend -- done
+    ANSI-C frontend -- done
+    ANSI-C preprocessor -- done
+    ANSI-C header files -- done
+    Failed for LINT C program checker, see lang/cem/lint/Out
+    Pascal frontend -- done
+    Basic frontend -- done
+        .
+        .
+        .
+    Vax 4-4 assembler -- done
+    Vax 4-4 backend -- done
+    Vax target optimizer -- done
+    ACK a.out to VAX a.out conversion program -- done
+    Sorry, Vax code expander library can only be made on vax* systems
+    Vax 4-4 EM library -- done
+    Vax 4-4 debugger support library -- done
+    Vax 4-4 etext,edata,end library -- done
+    Vax 4-4 systemcall interface -- done
+        .
+        .
+        .
+
+
+ +

The lines starting with "Sorry, " indicate +that certain programs cannot be translated on the local +machine. The lines starting with "Failed for" +indicate that certain programs/libraries were expected to, +but did not compile. In this example, the installation of +LINT failed. To repeat a certain part of the installation, +look in the Action file, which resides in the root of the +configuration tree, for the directory in which that part is +to be found. If that directory contains an Action file issue +the command "sh $CONFIG/bin/TakeAction", otherwise +type "make install".

+ +

6. Commands

+ +

The following commands are available in the +$TARGET_HOME/bin directory after compilation of the Kit:

+ +

ack, acc, abc, apc, +ocm, m2, f2c and their links

+ + + + + +
+

the names mentioned here can be used to compile Pascal, +C, etc... programs. Most of the links can be used to +generate code for a particular machine. See also the section +about "Machines".

+
+ + + + + + +
+ +

arch

+
+ +

the archiver used for the EM- and universal +assembler/loader.

+
+ + + + + + + +
+ +

aal

+
+ +

the archiver used for ACK objects.

+
+
+ + + + + + +
+ +

em

+
+ +

this program selects a interpreter to execute an e.out +file. Interpreters exist for PDP-11 and Motorola 68000 +systems.

+
+ + + + + + +
+ +

eminform

+
+ +

the program to unravel the post-mortem information of +the EM interpretator for the PDP-11.

+
+ + + + + + + +
+ +

LLgen

+
+ +

the LL(1) parser generator.

+
+
+ + + + + + +
+ +

ack_sys

+
+ +

a shell script producing an identification of the target +system. Used by some utilities to determine what is, and +what is not feasible on the target system.

+
+ + + + + + +
+ +

march

+
+ +

a shell script used while compiling libraries.

+
+ +

asize, anm, astrip

+ + + + + +
+

do the same as size, nm and strip, +but for ACK object format.

+
+ + + + + + +
+ +

mkdep

+
+ +

a dependency generator for makefiles.

+
+ +

cid, prid, cclash

+ + + + + +
+

some utilities for handling name clashes in C programs. +Some systems have C-compilers with only 7 or 8 characters +significant in identifiers.

+
+ + + + + + +
+ +

tabgen

+
+ +

a utility for generating character tables for +C-programs.

+
+ + + + + + +
+ +

int

+
+ +

an EM interpreter. This one is written in C, and is very +useful for checking out programs.

+
+ + + + + + +
+ +

grind

+
+ +

a source level debugger for C, ANSI-C, Modula-2 and +Pascal.

+
+ +

afcc, afm2, afpc

+ + + + + +
+

these are ACK-compatible fast C, Modula-2 and Pascal +compilers, available for M68020, VAX and Intel 80386 +systems. They compile very fast, but produce slow code.

+
+ + + + + + +
+ +

fcc

+
+ +

this is a cc-compatible fast C compiler, available on +SUN-3 and VAX systems. It compiles very fast, but produces +slow code.

+
+ +

We currently make the Kit available to our users by +telling them that they should include the $TARGET_HOME/bin +directory in their PATH shell variable. The programs will +still work when moved to a different directory or linked to. +Copying should preferably be done with tar, since links are +heavily used. Renaming of the programs linked to ack +will not always produce the desired result. This program +uses its call name as an argument. Any call name not being +cc, acc, abc, pc, f2c, +ocm, m2, or apc will be interpreted as +the name of a ’machine description’ and the +program will try to find a description file with that name. +The installation process will only touch the utilities in +the $TARGET_HOME/bin directory, not copies of these +utilities.

+ +

7. Machines

+ +

Below is a table with entries for all commands in the +bin directory used to (cross)compile for a particular +machine. The name in the first column gives the name in the +bin directory. The column headed dir indicates which +subdirectories of $TARGET_HOME/lib and/or +$TARGET_HOME/lib.bin are needed for compilation. The column +head i/p contains the integer and pointer size used in units +of bytes. The subdirectories with the same name in mach +contain the sources. A * in the column headed +’fp’ indicates that floating point can be used +for that particular machine. A + in that column indicates +that floating point is available under the ’-fp’ +option. In this case, software floating point emulation is +used.

+ +

+ +

The commands em22, em24 and em44 +produce e.out files with EM machine code which must be +interpreted. The Kit contains three interpreters: one +running under PDP 11/V7 UNIX, one for the M68000, running +under the PMDS system, Sun systems, the Mantra system, etc, +and a portable one, written in C. The first one can only +interpret 2/2 e.out files, the second takes 2/4 and 4/4 +files, and the last one takes 2/2, 2/4 and 4/4. The PDP 11 +interpreter executes floating point instructions.

+ +

The program $TARGET_HOME/bin/em calls the +appropriate interpreter. The interpreters are looked for in +the em22, em24 and em44 subdirectories of +$TARGET_HOME/lib.bin. The third interpreter is available as +the program $TARGET_HOME/bin/int in the bin +directory.

+ +

8. Compilation on a different machine.

+ +

The installation mechanism of the Kit is supposed to be +portable across UNIX machines, so the Kit can +be installed and used as a cross-compiler for the languages +it supports on any UNIX machine. The presence +of most UNIX utilities is essential for +compilation. A few of the programs certainly needed are: sh, +C-compiler, sed, ed, make, and awk.

+ +

8.1. Backend

+ +

The existence of a backend with a system call library +for the target system is essential for producing executable +files for that system. Rewriting the system call library if +the one supplied does not work on the target system is +fairly straightforward. If no backend exists for the target +CPU type, a new backend has to be written which is a major +undertaking.

+ +

8.2. Universal assembler/loader, link editor

+ +

For most machines, the description files in +$TARGET_HOME/lib/*/descr use our universal assembler and our +link editor. The load file produced is not directly usable +in any system known to us, but has to be converted before it +can be put to use. The cv programs convert our a.out +format into executable files. The dl programs present +for some machines unravel our a.out files and transmit +commands to load memory to a microprocessor over a serial +line. The file $TARGET_HOME/man/man5/ack.out.5 contains a +description of the format of the universal assembler load +file. It might be useful to those who wish or need to write +their own conversion programs. Also, a module is included to +read and write our a.out format. See +$TARGET_HOME/man/man3/object.3.

+ +

9. Options

+ +

9.1. Default machine

+ +

There is one important option in +$TARGET_HOME/config/local.h. The utility ack uses a +default machine name when called as acc, cc, +abc, apc, pc, ocm, m2, +f2c, or ack. The machine name used by default +is determined by the definition of ACKM in +$TARGET_HOME/config/local.h. The Kit is distributed with +"sun3" as the default machine, but the shell +script "first" in the directory "first" +alters this to suit the target system. There is nothing +against using the Kit as a cross-compiler and by default +produce code that can’t run on the local system.

+ +

9.2. Pathnames

+ +

Absolute path names are concentrated in +"$TARGET_HOME/config/em_path.h". Only the +utilities ack, flex, and LLgen use +absolute path names to access files in the Kit. The tree is +distributed with /usr/em as the working directory. The +definition of EM_DIR in em_path.h should be altered to +specify the root directory for the Compiler Kit binaries on +the local system ($TARGET_HOME). This is done automatically +by the shell script "first" in the directory +"first". Em_path.h also specifies which directory +should be used for temporary files. Most programs from the +Kit do indeed use that directory although some remain +stubborn and use /tmp.

+ +

The shape of the tree should not be altered lightly +because most Makefiles and the utility ack know the +shape of the ACK tree. The knowledge of the utility +ack about the shape of the tree is concentrated in +the files in the directory $TARGET_HOME/lib/*/descr and +$TARGET_HOME/lib/descr/*.

+ +

10. Makefiles

+ +

Most directories contain a "proto.make", from +which a Makefile is derived. Apart from commands applying to +that specific directory these files all recognize a few +special commands. When called with one of these they will +apply the command to their own directory. The special +commands are:

+ + + + + + +
+ +

install

+
+ +

recompile and install all binaries and libraries.

+
+ + + + + +
+

Some Makefiles allow errors to occur in the programs they +call. They ignore such errors and notify the user with the +message "~....... error code n: ignored". Whenever +such a message appears in the output it can be ignored.

+
+ + + + + + +
+ +

cmp

+
+ +

recompile all binaries and libraries and compare them to +the ones already installed.

+
+ + + + + + +
+ +

pr

+
+ +

print the sources and documentation on the standard +output.

+
+ + + + + + + +
+ +

opr

+
+ +

make pr | opr

+
+
+ + + + + +
+

Opr should be an off-line printer daemon. On some systems +it exists under another name e.g. lpr. The easiest way to +call such a spooler is using a shell script with the name +opr that calls lpr. This script should be placed in /usr/bin +or $TARGET_HOME/bin or one of the directories in the PATH +environment variable.

+
+ + + + + + +
+ +

clean

+
+ +

remove all files not needed for day-to-day use, that is +binaries not in $TARGET_HOME/bin or $TARGET_HOME/lib.bin, +object files etc.

+
+ +

Example:

+
     make install
+
+ +

given as command in a configuration directory will cause +compilation of all programs in the directory and copying of +the results to the $TARGET_HOME/bin and $TARGET_HOME/lib.bin +directories.

+ +

11. Testing

+ +

Test sets are available in Pascal, C, Basic and EM +assembly:

+ + + + + + +
+ +

EM

+
+ +

the directory $SRC_HOME/emtest contains a few EM test +programs. The EM assembly files in these tests must be +transformed into load files. These tests use the LIN and NOP +instructions to mark the passing of each test. The NOP +instruction prints the current line number during the test +phase. Each test notifies its correctness by calling LIN +with a unique number followed by a NOP which prints this +line number. The test finishes normally with 0 as the last +number printed In all other cases a bug showed its +existence.

+
+ + + + + + +
+ +

Pascal

+
+ +

the directory $SRC_HOME/lang/pc/test contains a few +Pascal test programs. All these programs print the number of +errors found and a identification of these errors.

+
+ + + + + +
+

We also tested Pascal with the Validation Suite. The +Validation Suite is a collection of more than 200 Pascal +programs, designed by Brian Wichmann and Arthur Sale to test +Pascal compilers. We are not allowed to distribute it, but a +copy may be requested from

+ + + + + +
+
     Richard J. Cichelli
+     A.N.P.A.
+     1350 Sullivan Trail
+     P.O. Box 598
+     Easton, Pennsylvania 18042
+     USA
+
+
+ + + + + + + +
+ +

C

+
+ +

the sub-directories in $SRC_HOME/lang/cem/ctest contain +C test programs. The idea behind these tests is: if there is +a program called xx.c, compile it into xx.cem. Run it with +standard output to xx.cem.r, compare this file to xx.cem.g, +a file containing the ’ideal’ output. Any +differences will point to implementation differences or +bugs. Giving the command "run gen" or plain +"run" starts this process. The differences will be +presented on standard output. The contents of the result +files depend on the word size, the xx.cem.g files on the +distribution are intended for a 32-bit machine.

+
+ + + + + + +
+ +

Basic

+
+ +

the directory $SRC_HOME/lang/basic/test contains some +forty Basic programs. Not all of these programs are correct, +some have syntactic errors, some simply don’t work. +The Makefile in that directory attempts to compile and run +these tests. If it compiles its output is compared to a file +with suffix .g which contains the output to be expected. The +make should be started with its standard input diverted to +/dev/null. An example of the output of a make is present in +the file Out.std.

+
+ +

12. Documentation

+ +

After installation, the manual pages for Amsterdam +Compiler Kit can be found in the $TARGET_HOME/man directory. +Also, the following documents are provided in the +$TARGET_HOME/doc directory:

+ +

+ +

Use the Makefile to get readable copies.

+ +

Good luck.

+
+ + diff --git a/src/olddocs/install.pdf b/src/olddocs/install.pdf new file mode 100644 index 0000000000000000000000000000000000000000..618817dd3bda29c5ea7bce3befb704d3d29538a8 GIT binary patch literal 66032 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 z%0D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 UqEJ068U;rp8TRj2)m3Bof8;FE^#A|> literal 0 HcmV?d00001 diff --git a/src/olddocs/int.html b/src/olddocs/int.html new file mode 100644 index 000000000..39552c67b --- /dev/null +++ b/src/olddocs/int.html @@ -0,0 +1,3910 @@ + + + + + + +The EM Interpreter + + + +

The EM Interpreter

+1. INTRODUCTION.
+1.1. The virtual EM machine.
+1.1.1. Instruction Space
+1.1.2. The Procedure Table
+1.1.3. The Data Space
+1.2. Physical lay-out
+1.3. Speed.
+2. IMPLEMENTATION DETAILS.
+2.1. Stack manipulation and start-up
+2.1.1. The anomalous value of the ML register
+2.1.2. The absence of an initial Return Status Block
+2.2. Floating point numbers.
+2.3. Pointers.
+2.3.1. Pointer arithmetic.
+2.3.2. Null pointer.
+2.4. Function Return Area (FRA).
+2.5. Environment interaction.
+2.5.1. Traps and interrupts.
+2.5.2. Monitor calls.
+2.6. Internal arithmetic.
+2.7. Shadow bytes implementation.
+2.8. Return Status Block (RSB)
+2.9. Operand access.
+2.9.1. The Dispatch Table, Method 1.
+2.9.2. Intelligent Routines, Method 2.
+2.9.3. Intelligent Calls, Method 3.
+2.9.4. Static Evaluation.
+2.10. Disassembly.
+3. THE LOGGING MACHINE.
+3.1. Implementation.
+3.2. Controlling the Logging machine.
+3.3. Dumps.
+3.4. Forking.
+List of Warnings.
+How to use the interpreter
+ +
+ +

ABSTRACT

+ +

Eddo de Groot
+Leo van den Berge
+Dick Grune

+Faculteit Wiskunde en Informatica
+Vrije Universiteit, Amsterdam

+ +

This document describes the implementation and usage of +a new interpreter for the EM machine language. This +interpreter implements the full EM machine and can be +helpful to people writing new front-ends. Moreover, it can +be used as a thorough testing and debugging tool by anyone +familiar with the EM language.

+ +

A list of all warnings is given in appendix A; appendix +B is a simple tutorial.

+ +

1. INTRODUCTION.

+ +

This document describes an EM interpreter which does +extensive checking. The interpreter exists in two versions: +the normal version with full checking and debugging +facilities, and a fast stripped version that does +interpretation only. This document assumes that the full +version is used.

+ +

First the virtual EM machine embodied by the interpreter +(called int) is described, followed by some remarks +on performance. The second section gives some specific +implementation decisions. Section three explains the usage +of the built-in debugging tool.

+ +

Appendix A gives an overview of the various warnings +int gives, with possible causes and solutions. +Appendix B is a simple tutorial on the use of int. A +separate manual page exists.

+ +

The document assumes a good understanding of what EM is +and what the assembly code looks like [1]. Notions like +’procedure descriptor’, ’mini’, +’shortie’ etc. are not explained. In the sequel, +any word in this font refers to the name of a +variable, constant, function or whatever, used in the source +code under the same name.

+ +

To avoid confusion: int interprets EM machine +language (e.out files), not the assembly language (.e +files) and not the compact code (.k files).

+ +

1.1. The virtual EM machine.

+ +

The memory layout of the virtual EM machine represented +by the interpreter differs in details from the description +in [1]. Virtual memory is split up into two separate spaces: +one space containing the instructions, the other all the +data, including stack and heap (D-space). The procedure +descriptors are preprocessed and stored in a separate array, +proctab[]. Both spaces start off at address 0. This +is possible because pointers in the two different spaces are +distinguishable by context (and shadow-bytes: see 2.6).

+ +

1.1.1. Instruction Space

+ +

Figure 1 shows the I-space, together with the position +of some important EM registers.

+
                      NEXT -->  |________________|  <-- DB    \
+                                |                |            |
+                                |                |            |  T
+                                |                |  <-- PC    |
+                                |     Program    |            |  e
+                                |                |            |
+                                |      Text      |            |  x
+                                |                |            |
+                                |                |            |  t
+                         0 -->  |________________|  <--(PB)   /
+
+
+ +

Fig 1. Virtual instruction space +(I-space).

+ +

The I-space is just big enough to contain all the +instructions. The size needed for the program text +(NTEXT) is found from the header-bytes of the +loadfile. Legal values for the program counter (PC) +consist of all addresses in the range from 0 through +NTEXT − 1. If the PC is made to point to +an illegal address, a trap will occur.

+ +

1.1.2. The Procedure Table

+ +

The NProc constant indicates how many procedure +descriptors there are in the proctab array. Elements of this +array contain for each procedure: the number of locals, the +entry point and the entry point of the textually following +procedure. This is used in testing the restriction that the +program counter may not wander from procedure to +procedure.

+ +

1.1.3. The Data Space

+ +

Figure 2 shows the layout of the data space, which +closely conforms to the EM Manual.

+
                                __________________
+            maxaddr(psize) -->  |                |  <-- ML    \
+                                |                |            |  S
+                                |     Locals     |            |  t
+                                |       &        |            |  a
+                                |      RSBs      |            |  c
+                                |                |            |  k
+                                |________________|  <-- SP    /
+                                .                .
+                                .                .
+                                .     Unused     .
+                                .                .
+                                .                .
+                                .                .
+                                .                .
+                                .                .
+                                .     Unused     .
+                                .                .
+                                .                .
+                                |________________|  <-- HP
+                                |                |            \
+                                |      Heap      |            |
+                                |________________|  <-- HB    |
+                                |                |            |  D
+                                |    Arguments   |            |
+                                |     Environ    |            |  a
+                                |  _   _   _   _ |            |
+                                |                |            |  t
+                                |                |            |
+                                |                |            |  a
+                                |   Global data  |            |
+                                |                |            |
+                                |                |            |
+                         0 -->  |________________|  <--(EB)   /
+
+
+ +

Fig 2. Virtual dataspace +(D-space).

+ +

D-space begins at address 0, and ends at the largest +address representable by the pointer size (psize) +being used; for a 2-byte pointer size this maximum address +is

+
     ((2 ^ 16 − 1) / word size * word size) − 1
+
+ +

for a 4-byte pointer size it is

+
     ((2 ^ 31 − 1) / word size * word size) − 1
+
+ +

(not 2 ^ 32, to allow illegal pointers to be implemented +in the future). The funny rounding construction is required +to make ML+1 expressible as the initialisation value of LB +and SP.

+ +

D-space is split into two partitions: Data and Stack +(indicated by the brackets). The Data partition holds the +global data area (GDA) and the heap. Its initial size is +given by the loadfile constant SZDATA. Some space is added +to it, because arguments and environment are stored here +also. This total size is static while interpreting. However, +as the heap may grow during execution (e.g. caused by +dynamic allocation) this results in a variable size for the +Data partition. Initially, the size for the Data partition +is the sum of the space needed by the GDA (including the +space needed for arguments and environment) and the initial +heapspace. The lowest legal Data address is 0; the highest +HP − 1.

+ +

The Stack partition holds the stack. It begins at the +highest available D-space address, and grows towards the low +addresses, so the Stack partition is of variable size too. +The lowest legal Stack address is the stackpointer +(SP), the highest is the memory limit +(ML).

+ +

1.2. Physical lay-out

+ +

Each partition is mapped onto a piece of physical memory +with the same name: text (fig. 1), stack and +data (fig. 2). These are the storage structures which +int uses to physically store the contents of the +virtual EM spaces. Figure 2 thus shows the mapping of +D-space onto two different physical parts: stack and +data. The I-space is represented by one physical +part: text.

+ +

Each time more space is needed, the actual partition is +reallocated, with the new size being computed with the +formula:

+
     new size = 1.5 × (old size + extra)
+
+ +

extra is the number of bytes exceeding the old +size. One can prove that using this method, there is a +linear relationship between allocation time and needed +partition size.

+ +

A virtual D-space starting at address 0 is in +correspondence with the definition in [1], p. 3−6. The +main reason for having D-space start at address 0, is that +it induces a one-one correspondence between the heap − +and GDA addresses on the virtual machine (and hence the +definition) on one hand, and the offset within the +data partition on the other. This implies that no +extra calculation is needed to perform load and storage +operations.

+ +

Some calculation however cannot be avoided, because the +stack part of the D-space grows downwards by EM definition. +The first address of the virtual stack (ML, the +maximum address for the given psize) is mapped onto +the beginning of the stack partition. When the stack +grows (i.e. EM addresses get lower), the offset within the +stack partition gets higher. By taking offset ML +− A in the stack partition, one obtains the +physical address corresponding to some virtual EM (stack) +address A.

+ +

1.3. Speed.

+ +

From several test results with both versions of the +interpreter, the following may be concluded. The speed of +the interpreter depends strongly on the type of program +being interpreted. If plain CPU arithmetic is performed, the +interpreter is relatively slow (1000 × the cc +version). When stack manipulation is at hand, the +interpreter is quite fast (100 × the cc version).

+ +

Most programs however will not be this extreme, so an +interpretation time of somewhere between 300 and 500 times +direct execution for a normal program is to be expected.

+ +

The fast version runs in about 60% of the time of the +full version, at the expense of a considerably lower +functionality. Tallying costs about 10%.

+ +

2. IMPLEMENTATION DETAILS.

+ +

The pertinent issues are addressed below, in arbitrary +order.

+ +

2.1. Stack manipulation and start-up

+ +

It is not at all easy to start the EM machine with the +stack in a reasonable and consistent state. One reason is +the anomalous value of the ML register and another is the +absence of a proper RSB. It may be argued that the initial +stack does not have to be in a consistent state, since the +first instruction proper is only executed after argc, +argv and environ have been stacked (which +takes care of the empty stack) and the initial procedure has +been called (which creates a RSB). We would, however, like +to preform the stacking of these values and the calling of +the initial procedure using the normal stack and call +routines, which again require the stack to be in an +acceptable state.

+ +

2.1.1. The anomalous value of the ML register

+ +

All registers in the EM machine point to word +boundaries, and all of them, except ML, address the +even-numbered byte at the boundary. The exception has a good +reason: the even numbered byte at the ML boundary does not +exist. This problem is not particular to EM but is inherent +in the number system: the number of N-digit numbers can +itself not be expressed in an N-digit number, and the number +of addresses in an N-bit machine will itself not fit in an +N-bit address. The problem is solved in the interpreter by +having ML point to the highest word boundary that has bytes +on either side; this makes ML+1 expressible.

+ +

2.1.2. The absence of an initial Return Status Block

+ +

When the stack is empty, there is no legal value for AB, +since there are no actuals; LB can be set naturally to ML+1. +This is all right when the interpreter starts with a call of +the initial routine which stores the value of LB in the +first RSB, but causes problems when finally this call +returns. We want this call to return completely before +stopping the interpreter, to check the integrity of the last +RSB; restoring information from it will, however, cause +illegal values to be stored in LB and AB (ML+1 and +ML+1+rsbsize, resp.). On top of this, the initial (illegal) +Procedure Identifier of the running procedure will be +restored; then, upon restoring the likewise illegal PC will +cause a check to see if it still is inside the running +procedure. After a few attempts at writing special cases, we +have decided that it is possible, but not worth the effort; +the final (= initial) RSB will not be unstacked.

+ +

2.2. Floating point numbers.

+ +

The interpreter is capable of working with 4- and 8-byte +floating point (FP) numbers. In C-terms, this corresponds to +objects of type float and double respectively. Both types +fit in a C-double so the obvious way to manipulate these +entities internally is in doubles. Pushing a 8-byte FP, all +bytes of the C-double are pushed. Pushing a 4-byte FP causes +the 4 bytes representing the smallest fraction to be +discarded.

+ +

In EM, floats can be obtained in two different ways: via +conversion of another type, or via initialization in the +loadfile. Initialized floats are represented in the loadfile +by an ASCII string in the syntax of a Pascal real (signed +UnsignedReal). I.e. a float looks like:

+
     [ Sign ] Digit+ [ . Digit+ ] [ Exp [ Sign ] Digit+ ]                                (G1)
+
+ +

followed by a null byte. Here Sign = {+, +−}; Digit = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; +Exp = {e, E}; [ Anything ] means that +Anything is optional; and a + means one or more +times. To accommodate some loose code generators, the actual +grammar accepted is:

+
     [ Sign ] Digit∗ [ . Digit∗ ] [ Exp [ Sign ] Digit+ ]                                (G2)
+
+ +

followed by a null byte. Here ∗ means zero or +more times. A floating denotation which is in G2 but not in +G1 draws a warning, one that is not even in G2 causes a +fatal error.

+ +

A string, representing a float which does not fit in a +double causes a warning to be given. In that case, the +returned value will be the double 0.0.

+ +

Floating point arithmetic is handled by some simple +routines, checking for over/underflow, and returning +appropriate values in case of an ignored error.

+ +

Since not all C compilers provide floating point +operations, there is a compile time flag NOFLOAT, which, if +defined, suppresses the use of all fp operations in the +interpreter. The resulting interpreter will still load EM +files with floats in the global data area (and ignore them) +but will give a fatal error upon attempt to execute a +floating point instruction; consequently code involving +floating point operations can be run as long as the actual +instructions are avoided.

+ +

2.3. Pointers.

+ +

The following sub-sections both deal with problems +concerning pointers. First, something is said about pointer +arithmetic in general. Then, the null-pointer problem is +dealt with.

+ +

2.3.1. Pointer arithmetic.

+ +

Strictly speaking, pointer arithmetic is defined only +within a fragment. From the explanation of the term +fragment however (as given in [1], page 3), it is not quite +clear what a fragment should look like from an +interpreter’s point of view. For this reason we +introduced the term segment, bordering the various +areas within which pointer arithmetic is allowed. Every +stack-frame is a segment, and so are the global data area +(GDA) and the heap area. Thus, the number of segments varies +over time, and at some point in time is given by the number +of currently active stack-frames (#CAL + #CAI − #RET +− #RTT) plus 2 (gda, heap). Pointers in the area +between heap and stack (which is inaccessible by +definition), are assumed to be in the heap segment.

+ +

The interpreter, while building a new stack-frame (i.e. +segment), stores the value of the last ActualBase in a +pointer-array (AB_list[ ]). When a pointer (say +P) is available for arithmetic, the number of the +segment where it points (say S P ), is +determined first. Next, the arithmetic is performed, +followed by a check on the number of the segment where the +resulting pointer R points (say S +R ). Now, if S P != S +R , a warning is given: Pointer +arithmetic yields pointer to bad segment.
+It may also be clear now, why the illegal area between heap +and stack was joined with the heap segment. When calculating +a new heap pointer (HP), one will obtain intermediate +results being pointers in this area just before it is made +legal. We do not want error messages all of the time, just +because someone is allocating space in the heap.

+ +

A similar treatment is given to the pointers in the SBS +instruction; they have to point into the same fragment for +subtraction to be meaningful.

+ +

The length of the AB_list[ ] is initially 100, +and it is reallocated in the same way the dynamically +growing partitions are (see 1.1).

+ +

2.3.2. Null pointer.

+ +

Because the EM language lacks an instruction for loading +a null pointer, most programs solve this problem by loading +a pointer-sized integer of value zero, and using this as a +null pointer (this is also proposed in [1]). Int +allows this, and will not complain. A warning is given +however, when an attempt is made to add something to a null +pointer (i.e. the pointer-sized integer zero).

+ +

Since many programming languages use a pointer to +location 0 as an illegal value, it is desirable to detect +its use. The big problem is though that 0 is a perfectly +legal EM address; address 0 holds the current line number in +the source file. It may be freely read but is written only +by means of the LIN instruction. This allows us to declare +the area consisting of the line number and the file name +pointer to be read-only memory. Thus a store will be caught +(and result in a warning) but a read will succeed (and yield +the EM information stored there).

+ +

2.4. Function Return Area (FRA).

+ +

The Function Return Area (FRA[ ]) has a default +size of 8 bytes; this default can be overridden through the +use of the −r-option, but cannot be made +smaller than the size of two pointers, in accordance with +the remark on page 5 of [1]. The global variable +FRASize keeps track of how many bytes were stored in +the FRA, the last time a RET instruction was executed. The +LFR instruction only works when its argument is equal to +this size. If not, the FRA contents are loaded anyhow, but +one of the following warnings is given: Returned function +result too large (FRASize > LFR size) or +Returned function result too small (FRASize +< LFR size).

+ +

Note that a C-program, falling through the end of its +code without doing a proper return or exit(), +will generate this warning.

+ +

The only instructions that do not disturb the contents +of the FRA are GTO, BRA, ASP and RET. This is expressed in +the program by setting FRA_def to +"undefined" in any instruction except these four. +We realize this is a useless action most of the time, but a +more efficient solution does not seem to be at hand. If a +result is loaded when FRA_def is +"undefined", the warning: Returned function +result may be garbled is generated.

+ +

Note that the FRA needs a shadow-FRA in order to store +the shadow information when performing a LFR +instruction.

+ +

2.5. Environment interaction.

+ +

The EM machine represented by int can communicate +with the environment in three different ways. A first +possibility is by means of (UNIX) interrupts; the second by +executing (relatively) high level system calls (called +monitor calls). A third means of interaction, especially +interesting for the debugging programmer, is via internal +variables set on the command line. The former two +techniques, and the way they are implemented will be +described in this section. The latter has been allotted a +separate section (3).

+ +

2.5.1. Traps and interrupts.

+ +

Simple user programs will generally not mess around with +UNIX-signals. In interpreting these programs, the default +actions will be taken when a signal is received by the +program: it gives a message and stops running.

+ +

There are programs however, which try to handle certain +signals themselves. In C, this is achieved by the system +call signal( sig_no, catch ), which calls the +handling routine catch(), as soon as signal +sig_no occurs. EM does not provide this call; +instead, the sigtrp() monitor call is available for +mapping UNIX signals onto EM traps. This implies that a +signal() call in a C-program must be translated by +the EM library routine to a sigtrp() call in EM.

+ +

The interpreter keeps an administration of the mapping +of UNIX-signals onto EM traps in the array +sig_map[NSIG]. Initially, the signals all have their +default values. Now assume a sigtrp() occurs, telling +to map signal sig_no onto trap trap_no. This +results in:

+ + + + + + +
+ +

1.

+
+ +

setting the relevant array element +sig_map[sig_no] to trap_no (after saving the +old value),

+
+ + + + + + +
+ +

2.

+
+ +

catching the next to come sig_no signal with the +handling routine HndlEMSig (by a plain UNIX +signal() of course), and

+
+ + + + + + +
+ +

3.

+
+ +

returning the saved map-value on the stack so the user +can know the previous trap value onto which sig_no +was mapped.

+
+ +

On an incoming signal, the handling routine for signal +sig_no arms the correct EM trap by calling the +routine arm_trap() with argument +sig_map[sig_no]. At the end of the EM instruction the +proper call of trap() is done. Trap() on its +turn examines the value of the HaltOnTrap variable; +if it is set, the interpreter will stop with a message. In +the normal case of controlled trap handling this bit is not +on and the interpreter examines the value of the +TrapPI variable, which contains the procedure +identifier of the EM trap handling routine. It then +initiates a call to this routine and performs a +longjmp() to the main loop to bypass all further +processing of the instruction that caused the trap. +TrapPI should be set properly by the library +routines, through the SIG instruction.

+ +

In short:

+ + + + + + +
+ +

1.

+
+ +

A UNIX interrupt is caught by the interpreter.

+
+ + + + + + +
+ +

2.

+
+ +

A handling routine is called which generates the +corresponding EM trap (according to the mapping).

+
+ + + + + + +
+ +

3.

+
+ +

The trap handler calls the corresponding EM routine +which emulates a UNIX interrupt for the benefit of the +interpreted program.

+
+ +

When considering UNIX signals, it is important to notice +that some of them are real signals, i.e., messages coming +from outside the program, like DEL and QUIT, but some are +actually program-caused synchronous traps, like Illegal +Instruction. The latter, if they happen, are incurred by the +interpreter itself and consequently are of no concern to the +interpreted program: it cannot catch them. The present code +assumes that the UNIX signals between SIGILL (4) and SIGSYS +(12) are really traps; do_sigtrp() will fail on +them.

+ +

To avoid losing the last line(s) of output files, the +interpreter should always do a proper close-down, even in +the presence of signals. To this end, all non-ignored +genuine signals are initially caught by the interpreter, +through the routine HndlIntSig, which gives a message +and preforms a proper close-down. Synchronous trap can only +be caused by the interpreter itself; they are never caught, +and consequently the UNIX default action prevails. Generally +they cause a core dump. Signals requested by the interpreted +program are caught by the routine HndlEMSig, as +explained above.

+ +

2.5.2. Monitor calls.

+ +

For the convenience of the programmer, as many monitor +calls as possible have been implemented. The list of monitor +calls given in [1] pages 20/21, has been implemented +completely, except for ptrace(), profil() and +mpxcall(). The semantics of ptrace() and +profil() from an interpreted program is unclear; the +data structure passed to mpxcall() is non-trivial and +the system call has low portability and applicability. For +these calls, on invocation a warning is generated, and the +arguments which were meant for the call are popped properly, +so the program can continue without the stack being messed +up. The errorcode 5 (IOERROR) is pushed onto the stack +(twice), in order to fake an unsuccessful monitor call. No +other − more meaningful − errorcode is available +in the errno-list.

+ +

Now for the implemented monitor calls. The returned +value is zero for a successful call. When something goes +wrong, the value of the external errno variable is +pushed, thus enabling the user to find out what the reason +of failure was. The implementation of the majority of the +monitor calls is straightforward. Those working with a +special format buffer, (e.g. ioctl(), time() +and stat() variants), need some extra attention. This +is due to the fact that working with varying word/pointer +size combinations may cause alignment problems.

+ +

The data structure returned by the UNIX system call +results from C code that has been translated with the +regular C compiler, which, on the VAX, happens to be a 4-4 +compiler. The data structure expected by the interpreted +program conforms to the translation by ack of the +pertinent include file. Depending on the exact call of +ack, sizes and alignment may differ.

+ +

An example is in order. The EM MON 18 instruction in the +interpreted program leads to a UNIX stat() system +call by the interpreter. This call fills the given struct +with stat information, the contents and alignments of which +are determined by the version of UNIX and the used C +compiler, resp. The interpreter, like any program wishing to +do system calls that fill structs, has to be translated by a +C compiler that uses the appropriate struct definition and +alignments, so that it can use, e.g., stab.st_mtime +and expect to obtain the right field. This struct cannot be +copied directly to the EM memory to fulfill the MON +instruction. First, the struct may contain extraneous, +system-dependent fields, pertaining, e.g., to symbolic +links, sockets, etc. Second, it may contain holes, due to +alignment requirements. The EM program runs on an EM +machine, knows nothing about these requirements and expects +UNIX Version 7 fields, with offsets as determined by the +em22, em24 or em44 compiler, resp. To do the conversion, the +interpreter has a built-in table of the offsets of all the +fields in the structs that are filled by the MON +instruction. The appropriate fields from the result of the +UNIX stat() are copied one by one to the appropriate +positions in the EM memory to be filled by MON 18.

+ +

The ioctl() call (MON 54) poses additional +problems. Not only does it have a second argument which is a +pointer to a struct, the type of which is dynamically +determined, but its first argument is an opcode that varies +considerably between the versions of UNIX. To solve the +first problem, the interpreter examines the opcode (request) +and treats the second argument accordingly. The second +problem can be solved by translating the UNIX Version 7 +ioctl() request codes to their proper values on the +various systems. This is, however, not always useful, since +some EM run-time systems use the local request codes. There +is a compile-time flag, V7IOCTL, which, if defined, will +restrict the ioctl() call to the version 7 request +codes and emulate them on the local system; otherwise the +request codes of the local system will be used (as far as +implemented).

+ +

Minor problems also showed up with the implementation of +execve() and fork(). Execve() expects +three pointers on the stack. The first points to the name of +the program to be executed, the second and third are the +beginnings of the argv and envp pointer arrays +respectively. We cannot pass these pointers to the system +call however, because the EM addresses to which they point +do not correspond with UNIX addresses. Moreover, (it is not +very likely to happen but) what if someone constructs a +program holding the contents for one of these pointers in +the stack? The stack is implemented upside down, so passing +the pointer to execve() causes trouble for this +reason too. The only solution was to copy the pointer +contents completely to fresh UNIX memory, constructing +vectors which can be passed to the system call. Any +impending memory fault while making these copies results in +failure of the system call, with errno set to +EFAULT.

+ +

The implementation of the fork() call faced us +with problems concerning IO-channels. Checking messages (as +well as logging) must be divided over different files. +Otherwise, these messages will coincide. This problem was +solved by post-fixing the default message file +int.mess (as well as the logging file int.log) +with an automatically leveled number for every new forked +process. Children of the original process do their +diagnostics in files with postfix 1,2,3 etc. Second +generation processes are assigned files numbered 11, 12, 21 +etc. When 6 generations of processes exist at one moment, +the seventh will get the same message file as the sixth, for +the length of the filename will become too long.

+ +

Some of the monitor calls receive pointers (addresses) +from to program, to be passed to the kernel; examples are +the struct stat for stat(), the area to be filled for +read(), etc. If the address is wrong, the kernel does +not generate a trap, but rather the system call returns with +failure, while errno is set to EFAULT. This is +implemented by consistent checking of all pointers in the +MON instruction.

+ +

2.6. Internal arithmetic.

+ +

Doing arithmetic on signed integers, the smallest +negative integer (minsint) is considered a legal +value. This is in contradiction with the EM Manual [1], page +14, which proposes using minsint for uninitialized +integers. The shadow bytes already check for uninitialized +integers however, so we do not need this special illegal +value. Although the EM Manual provides two traps, for +undefined integers and floats, undefined objects occur so +frequently (e.g. in block copying partially initialized +areas) that the interpreter just gives a warning.

+ +

Except for arithmetic on unsigneds, all arithmetic +checks for overflow. The value that is pushed on the stack +after an overflow occurs depends on the UNIX behavior with +regard to that particular calculation. If UNIX would not +accept the calculation (e.g. division by zero), a zero is +pushed as a convention. Illegal computations which UNIX does +accept in silence (e.g. one’s complement of +minsint), simply push the UNIX-result after giving a +trap message.

+ +

2.7. Shadow bytes implementation.

+ +

A great deal of run-time checking is performed by the +interpreter (except if used in the fast version). This +section gives all details about the shadow bytes. In order +to keep track of information about the contents of D-space +(stack and global data area), there is one shadow-byte for +each byte in these spaces. Each bit in a shadow-byte +represents some piece of information about the contents of +its corresponding ’sun-byte’. All bits off +indicates an undefined sun-byte. One or more bits on always +guarantees a well-defined sun-byte. The bits have the +following meaning:

+ +

• bit 0:

+ + + + + +
+

indicates that the sun-byte is (a part of) an +integer.

+
+ +

• bit 1:

+ + + + + +
+

the sun-byte is a part of a floating point number.

+
+ +

• bit 2:

+ + + + + +
+

the sun-byte is a part of a pointer in dataspace.

+
+ +

• bit 3:

+ + + + + +
+

the sun-byte is a part of a pointer in the instruction +space. According to [1] (paragraph 6.4), there are two types +pointers which must be distinguishable. Conversion between +these two types is impossible. The shadow-bytes make the +distinction here.

+
+ +

• bit 4:

+ + + + + +
+

protection bit. Indicates that the sun-byte is part of a +protected piece of memory. There is a protected area in the +stack, the Return Status Block. The EM machine language has +no possibility to declare protected memory, as is possible +in EM assembly (the ROM instruction). The protection bit is, +however, set for the line number and filename pointer area +near location 0, to aid in catching references to location +0.

+
+ +

• bit 5/6/7:

+ + + + + +
+

free for later use.

+
+ +

The shadow bytes are managed by the routines declared in +shadow.h. The warnings originating from checking +these shadow-bytes during run-time are various. A list of +them is given in appendix A, together with suggestions +(primarily for the C-programmer) where to look for the +trouble maker(s).

+ +

A point to notice is, that once a warning is generated, +it may be repeated thousands of times. Since repetitive +warnings carry little information, but consume much file +space, the interpreter keeps track of the number of times a +given warning has been produced from a given line in a given +file. The warning message will be printed only if the +corresponding counter is a power of four (starting at 1). In +this way, a logarithmic back-off in warning generation is +established.

+ +

It might be argued that the counter should be kept for +each (warning, PC value) pair rather than for each (warning, +file position) pair. Suppose, however, that two instruction +in a given line would cause the same message regularly; this +would produce two intertwined streams of identical messages, +with their counters jumping up and down. This does not seem +desirable.

+ +

2.8. Return Status Block (RSB)

+ +

According to the description in [1], at least the return +address and the base address of the previous RSB have to be +pushed when performing a call. Besides these two pointers, +other information can be stored in the RSB also. The +interpreter pushes the following items:

+ + + + + + + +
+ +

+
+ +

a pointer to the current filename,

+
+
+ + + + + + + +
+ +

+
+ +

the current line number (always four bytes),

+
+
+ + + + + + + +
+ +

+
+ +

the Local Base,

+
+
+ + + + + + + +
+ +

+
+ +

the return address (Program Counter),

+
+
+ + + + + + + +
+ +

+
+ +

the current procedure identifier

+
+
+ + + + + + +
+ +

+
+ +

the RSB code, which distinguishes between initial +start-up, normal call, returnable trap and non-returnable +trap (a word-size integer).

+
+ +

Consequently, the size of the RSB varies, depending on +word size and pointer size; its value is available as +rsbsize. When the RSB is removed from the stack (by a +RET or RTT) the RSB code is under the Stack Pointer for +immediate checking. It is not clear what should be done if +RSB code and return instruction do not match; at present we +give a message and continue, for what it is worth.

+ +

The reason for pushing filename and line number is that +some front-ends tend to forget the LIN and FIL instructions +after returning from a function. This may result in error +messages in wrong source files and/or line numbers.

+ +

The procedure identifier is kept and restored to check +that the PC will not move out of the running procedure. The +PI is an index in the proctab, which tells the limits in the +text segment of the running procedure.

+ +

If the Return Status Block is generated as a result of a +trap, more is stacked. Before stacking the normal RSB, the +trap function pushes the following items:

+ + + + + + +
+ +

+
+ +

the contents of the entire Function Return Area,

+
+ + + + + + +
+ +

+
+ +

the number of bytes significant in the above (a +word-size integer),

+
+ + + + + + +
+ +

+
+ +

a word-size flag indicating if the contents of the FRA +are valid,

+
+ + + + + + + +
+ +

+
+ +

the trap number (a word-size integer).

+
+
+ +

The latter is followed directly by the RSB, and +consequently acts as the only parameter to the trap +handler.

+ +

2.9. Operand access.

+ +

The EM Manual mentions two ways to access the operands +of an instruction. It should be noticed that the operand in +EM is often not the direct operand of the operation; the +operand of the ADI instruction, e.g., is the width of the +integers to be added, not one of the integers themselves. +The various operand types are described in [1]. Each opcode +in the text segment identifies an instruction with a +particular operand type; these relations are described in +computer-readable format in a file in the EM tree, +ip_spec.t.

+ +

The interpreter uses the third method. Several other +approaches can be designed, with increasing efficiency and +equally increasing complexity. They are briefly treated +below.

+ +

2.9.1. The Dispatch Table, Method 1.

+ +

When the interpreter starts, it reads the ip_spec.t file +and constructs from it a dispatch table. This table (of +which there are actually three, for primary, secondary and +tertiary opcodes) has 256 entries, each describing an +instruction with indications on how to decode the operand. +For each instruction executed, the interpreter finds the +entry in the dispatch table, finds information there on how +to access the operand, constructs the operand and calls the +appropriate routine with the operand as calculated. There is +one routine for each instruction, which is called with the +ready-made operand. Method 1 is easy to program but requires +constant interpretation of the dispatch table.

+ +

2.9.2. Intelligent Routines, Method 2.

+ +

For each opcode there is a separate routine, and since +an opcode uniquely defines the instruction and the operand +format, the routine knows how to get the operand; this +knowledge is built into the routine. Preferably the heading +of the routine is generated automatically from the ip_spec.t +file. Operand decoding is immediate, and no dispatch table +is needed. Generation of the 469 required routines is, +however, far from simple. Either a generated array of +routine names or a generated switch statement is used to map +the opcode onto the correct routine. The switch approach has +the advantage that parameters can be passed to the +routines.

+ +

2.9.3. Intelligent Calls, Method 3.

+ +

The call in the switch statement does full operand +construction, and the resulting operand is passed to the +routine. This reduces the number of routines to 133, the +number of EM instructions. Generation of the switch +statement from ip_spec.t is more complicated, but the +routine space is much cleaner. This does not give any +speed-up since the same actions are still required; they are +just performed in a different place.

+ +

2.9.4. Static Evaluation.

+ +

It can be observed that the evaluation of the operand of +a given instruction in the text segment will always give the +same result. It is therefore possible to preprocess the text +segment, decomposing the instructions into structs which +contain the address, the instruction code and the operand. +No operand decoding will be necessary at run-time: all +operands have been precalculated. This will probably give a +considerable speed-up. Jumps, especially GTO jumps, will, +however, require more attention.

+ +

2.10. Disassembly.

+ +

A disassembly facility is available, which gives a +readable but not letter-perfect disassembly of the EM +object. The procedure structure is indicated by placing the +indication P[n] at the entry point of each procedure, +where n is the procedure identifier. The number of +locals is given in a comment.

+ +

The disassembler was generated by the software in the +directory switch and then further processed by +hand.

+ +

3. THE LOGGING MACHINE.

+ +

Since messages and warnings provided by int +include source code file names and line numbers, they alone +often suffice to identify the error. If, however, the +necessity arises, much more extensive debugging information +can be obtained by activating the the Logging Machine. This +Logging Machine, which monitors all actions of the EM +machine, is the subject of this chapter.

+ +

3.1. Implementation.

+ +

When inspecting the source code of int, many +lines in the following format will show up:

+
     LOG(("@<letter><digit> message", args));
+
+ +

or

+
     LOG((" <letter><digit> message", args));
+
+ +

The double parentheses are needed, because LOG() +is declared as a define, and has a printf-like argument +structure.

+ +

The <letter> classifies the log message and +corresponds to an entry in the logmask, which holds a +threshold for each class of messages. The following classes +exist:

+ +

+ +

When the interpreter reaches a LOG(()) statement it +scans its first argument; if letter occurs in the +logmask, and if digit is lower or equal to the +threshold in the logmask, the message is given. Depending on +the first character, the message will be preceded by a +position indication (with the @) or will be printed as is +(with the space). The letter is determines the +message class and the digit is used to distinguish +various levels of logging, with a lower digit indicating a +more important message. We will call the +<letter><digit> combination the +id of the logging.

+ +

In general, the lower the digit following the +letter, the more important the message. E.g. m5 +reports about unsuccessful monitor calls only, m9 also +reports about successful monitors (which are obviously less +interesting). New logging messages can be added to the +source code on relevant places.

+ +

Reasonable settings for the logmask are:

+ +

+ +

An EM interpreter without a Logging Machine can be +obtained by undefining the macro CHECKING in the file +checking.h.

+ +

3.2. Controlling the Logging machine.

+ +

The actions of the Logging Machine are controlled by a +set of internal variables (one of which is the log mask). +These variables can be set through assignments on the +command line, as explained int the manual page int.1, +q.v. Since there are a great many logging statements in the +program, of which only a few will be executed in any call of +the interpreter, it is important to be able to decide +quickly if a given id has to be checked at all. To +this end all logging statements are guarded (in the #define) +by a test for the boolean variable logging. This +variable will only be set if the command line assignments +show the potential need for logging (must_log) and +the instruction count (inr) is at least equal to +log_start (which derives from the parameter +LOG).

+ +

The log mask can be set by the assignment

+
     "LOGMASK=logstring"
+
+ +

which sets the current logmask to logstring. A +logstring has the following form:

+
     [ [ letter | letterletter ]+ digit ]+
+
+ +

E.g. LOGMASK=A−D8x9R7c0hi4 will print all messages +belonging to loggings with ids: +A0..A8,B0..B8,C0..C8,D0..D8,x0..x9,R0..R7,c0,h0..h4,i0..i4.

+ +

The logging variable STOP can be used to prevent +run-away logging past the point where the user expects an +error to occur. STOP=nr will stop the interpreter +after instruction number nr.

+ +

To simplify the use of the logging machine, a number of +abbreviations have been defined. E.g., AT=nr can be +thought of as an abbreviation of LOG=nr−1 +STOP=nr+1; this causes three stack dumps, one before +the suspect instruction, one on it and one after it; then +the interpreter stops.

+ +

Logging results will appear in a special logging file +(default: int.log).

+ +

3.3. Dumps.

+ +

There are three routines available to examine the memory +contents:

+ +

+ +

These routines can be used everywhere in the program to +examine the contents of memory. The internal variables allow +the gda and heap to be dumped only once (according to the +corresponding internal variable). The stack is dumped after +each instruction if the log mask contains d1 or d2; d2 gives +a full formatted dump, d1 produces a listing of the Return +Status Blocks only. An attempt is made to format the stack +correctly, based on the shadow bytes, which identify the +Return Status Block.

+ +

Remember to set the correct id in the LOGMASK, +and to give LOG the correct value. If dumping is needed +before the first instruction, then LOG must be set to 0.

+ +

The dumps of the global data area and the heap are +controlled internally by the id-s +1 and *1 resp.; the +corresponding logmask entries are set automatically by +setting the GDA and HEAP variables.

+ +

3.4. Forking.

+ +

As mentioned earlier, a call to fork(), causes an +image of the current program to start running. To prevent a +messy logfile, the child process gets its own logfile (and +message file, tally file, etc.). These logfiles are +distinguished from the parent logfile by the a postfix, +e.g., logfile_1 for the first child, logfile_2 +for the second child, logfile_1_2 for the second +child of the first child, etc.
+Note
: the implementation of this feature is shaky; it +works for the log file but should also work for other files +and for the names of the logging variables.

+ +

APPENDIX A

+ +

List of Warnings.

+ +

The shadow-byte administration makes it possible to +check for a wide range of errors during run-time. We have +tried to make the diagnostics self-explanatory and +especially useful for the C-programmer. The warnings are +printed in the message file, together with source file and +line number. The complete list of warnings is presented +here, followed by an explanation of what might be wrong. +Often, these explanations implicitly assume that the program +being interpreted, was originally written in C (and not +Pascal, Basic etc.).

+ +

Reading the load file

+ + + + + + +
+ +

1.

+
+ +

Floating point instructions flag in header +ignored

+
+ + + + + + + +
+ +

2.

+
+ +

No float initialisation in this version

+
+
+ + + + + +
+

The interpreter was compiled with the NOFLOAT option; +code involving floating point operations can be run as long +as the actual instructions are avoided.

+
+ + + + + + + +
+ +

4.

+
+ +

Extra-test flag in header ignored

+
+
+ + + + + +
+

The interpreter already tests anything conceivable.

+
+ + + + + + + +
+ +

5.

+
+ +

Maximum line number in header was 0

+
+
+ + + + + +
+

This number could be used to allocate tables for +tallying; these tables are, however, expanded as needed, so +the number is immaterial.

+
+ + + + + + + +
+ +

7.

+
+ +

Bad float initialisation

+
+
+ + + + + +
+

The loadfile contains a floating point denotation which +does not satisfy the syntax (see 2.6). Examining the +loadfile (with od −c) might show the syntax +error. Probably there is a bug in the front-end, creating +floats with a bad syntax.

+
+ +

System calls

+ + + + + + + +
+ +

11.

+
+ +

IOCTL − bad or unimplemented request

+
+
+ + + + + +
+

The second parameter to the ioctl() request (the +operation code) is invalid or not implemented; since there +are many different opcodes on the various UNIX systems, it +is difficult to tell which. The system call fails.

+
+ + + + + + + +
+ +

14.

+
+ +

MPXCALL − not (yet) implemented

+
+
+ + + + + + + +
+ +

15.

+
+ +

PROFIL − not (yet) implemented

+
+
+ + + + + + + +
+ +

16.

+
+ +

PTRACE − not (yet) implemented

+
+
+ + + + + +
+

The monitor calls mpxcall(), profil() and +ptrace() have not been implemented. The monitor call +fails.

+
+ + + + + + + +
+ +

21.

+
+ +

Inaccessible memory in system call

+
+
+ + + + + +
+

Bad pointers passed to system calls do not cause a memory +fault (which in UNIX would happen to the kernel), but cause +the system call to fail with the UNIX variable errno set to +14 (EFAULT). It seems likely that the program is at fault, +but there is also a good possibility that a library routine +made unwarranted assumptions about word size and pointer +size.

+
+ + + + + + + +
+ +

23.

+
+ +

READ − buffer resides in unallocated +memory

+
+
+ + + + + + +
+ +

24.

+
+ +

READ − buffer across global data area and +heap

+
+ + + + + +
+

When the buffer passed to the read() system call is +situated (completely or partially) in unallocated memory +(beyond HP) or begins in the global data area and +ends in the heap, the appropriate warning is given. The +buffer is not written.

+
+ + + + + + +
+ +

25.

+
+ +

WRITE − buffer resides in unallocated +memory

+
+ + + + + + +
+ +

26.

+
+ +

WRITE − buffer across global data area and +heap

+
+ + + + + + +
+ +

27.

+
+ +

WRITE − (part of) global buffer is +undefined

+
+ + + + + + + +
+ +

28.

+
+ +

WRITE − (part of) local buffer is +undefined

+
+
+ + + + + +
+

The first two are equivalent to the READ-errors above. +Writing out a buffer usually makes no sense when the +contents are undefined, so one of the latter two warnings +will be generated in this case. A global buffer resides in +the data partition; a local buffer resides in the stack +partition. This corresponds to global and local variables in +a C-program. In the first two cases the WRITE is not +performed, in the latter two cases it is.

+
+ +

Traps and signals

+ + + + + + + +
+ +

31.

+
+ +

SIGTRP − bad signo argument

+
+
+ + + + + +
+

The sigtrp() monitor call allows sig_no +arguments in the range [1..17] (UNIX Version 7 signals); the +actual argument is out of range.

+
+ + + + + + +
+ +

32.

+
+ +

SIGTRP − signo argument is a synchronous +trap

+
+ + + + + +
+

The signal is one that can only be caused synchronously +by the running program on UNIX; it cannot occur to an +interpreted program.

+
+ + + + + + + +
+ +

33.

+
+ +

SIGTRP − bad trapno argument

+
+
+ + + + + +
+

The sigtrp() monitor call allows trap_no +arguments between 0 and 252, and the special values −2 +and −3; the actual argument is not one of these.

+
+ + + + + + +
+ +

36.

+
+ +

Heap overflow due to command line limitation

+
+ + + + + + +
+ +

37.

+
+ +

Stack overflow due to command line limitation

+
+ + + + + +
+

The maximum sizes of the heap and the stack can be +limited by options on the command line. If overflow occurs +due to such limitations, the corresponding trap is taken, +preceded by one of the above warnings. If the memory of the +interpreter itself is exhausted, a fatal error follows.

+
+ +

Run-time type checking

+ + + + + + + +
+ +

41.

+
+ +

Local character expected

+
+
+ + + + + + + +
+ +

42.

+
+ +

Global character expected

+
+
+ + + + + + + +
+ +

43.

+
+ +

Local integer expected

+
+
+ + + + + + + +
+ +

44.

+
+ +

Global integer expected

+
+
+ + + + + + + +
+ +

45.

+
+ +

Local float expected

+
+
+ + + + + + + +
+ +

46.

+
+ +

Global float expected

+
+
+ + + + + + + +
+ +

47.

+
+ +

Local data pointer expected

+
+
+ + + + + + + +
+ +

48.

+
+ +

Global data pointer expected

+
+
+ + + + + + + +
+ +

49.

+
+ +

Local instruction pointer expected

+
+
+ + + + + + + +
+ +

50.

+
+ +

Global instruction pointer expected

+
+
+ + + + + +
+

In general, a type violation has taken place when one of +these warnings is given. The float- and +instruction pointer warnings are rare and will +usually be easy traceable. Integer/character expected +will normally occur when unsigned arithmetic is performed on +datapointers or when memory containing objects other than +integers is copied bytewise. Often, this warning is followed +by a warning datapointer expected. This is due to our +decision of transforming pointers to (unsigned) integers +after doing unsigned arithmetic on them. When such a +transformed integer is dereferenced (as if it were a +pointer) or, in general, when it is treated as a pointer, +this results in a warning. The present library +implementation of malloc() causes such a sequence of +errors.

+
+ +

These messages are always followed by a tentative +description of what is found in memory at the offending +place.

+ + + + + + + +
+ +

61.

+
+ +

Actual memory is undefined

+
+
+ + + + + + + +
+ +

62.

+
+ +

Actual memory contains an integer

+
+
+ + + + + + + +
+ +

63.

+
+ +

Actual memory contains a float

+
+
+ + + + + + + +
+ +

64.

+
+ +

Actual memory contains a data pointer

+
+
+ + + + + + +
+ +

65.

+
+ +

Actual memory contains an instruction pointer

+
+ + + + + + + +
+ +

66.

+
+ +

Actual memory contains mixed information

+
+
+ + + + + +
+

If the contents of the area was undefined, check the +source code for an uninitialized variable of the mentioned +type. Officially, the use of an undefined value should +result in a EIUND or EFUND trap but the occurrence is so +common that a warning is more appropriate. The contents of +memory are described as mixed if the data consists of pieces +of different types. This happens, e.g., when caller and +callee do not agree on the types and lengths of the +parameters.

+
+ +

Protection

+ + + + + + +
+ +

71.

+
+ +

Destroying contents of ROM (at or near loc 0)

+
+ + + + + +
+

The program stores a value in Read-Only Memory; the only +ROM in the present implementation is the area near location +0. The warning probably results from storing under a NULL +pointer. This is only a warning, the store operation is +executed normally. Reads from location 0 are not +detected.

+
+ + + + + + + +
+ +

72.

+
+ +

Destroying contents of Return Status Block

+
+
+ + + + + +
+

The Return Status Block is the stack area containing the +return address, the dynamic link, etc. This may or may not +be an error. The current implementation of +setjmp()/longjmp() may be responsible for it. +If the program does not use setjmp(), there is +something very wrong (e.g. argument for ASP too large). Note +that there are some library routines (such as +alarm()) which use setjmp().

+
+ + + + + + +
+ +

81.

+
+ +

Logical operation using undefined operand(s)

+
+ + + + + + + +
+ +

82.

+
+ +

Comparing undefined operand(s)

+
+
+ + + + + +
+

The logical operations AND, XOR, IOR, COM and the compare +operation CMS do their jobs bytewise. If one of the bytes is +found to be undefined, the corresponding warning is given, +and the operation is stopped immediately. The stack is +adjusted so interpretation may continue.
+It is hard to say what went wrong. Possibly, the argument of +the instruction at hand (which indicates the size of the +objects to be compared), was too large.

+
+ +

Bad operands

+ + + + + + + +
+ +

91.

+
+ +

Shift over negative distance

+
+
+ + + + + + + +
+ +

92.

+
+ +

Shift over too large distance

+
+
+ + + + + +
+

Shift instructions yield undefined results if the shift +distance is negative or larger than the object size.

+
+ + + + + + +
+ +

93.

+
+ +

Pointer arithmetic yields pointer to bad +segment

+
+ + + + + +
+

When doing pointer arithmetic (ADP, ADS), the operand and +result pointer must be in the same segment (see sec. +4). E.g. loading the address of the first local and adding +20 to it will certainly give this warning.

+
+ + + + + + + +
+ +

94.

+
+ +

Subtracting pointers to different segments

+
+
+ + + + + +
+

Pointers may be subtracted only if they point into the +same segment.

+
+ + + + + + + +
+ +

96.

+
+ +

Pointer arithmetic with NULL pointer

+
+
+ + + + + +
+

By definition it is illegal to do arithmetic with null +pointers. Integers with the size of a pointer and the value +zero are recognized as NULL pointers. A well-known C-trick +to compute the offset of some field in a struct is +converting the null-pointer to the type of the struct and +simply taking the address of the field. This trick will +−when translated and interpreted− generate this +warning because it results in arithmetic with the NULL +pointer.

+
+ +

Return area

+ + + + + + + +
+ +

101.

+
+ +

Returned function result too large

+
+
+ + + + + + + +
+ +

102.

+
+ +

Returned function result too small

+
+
+ + + + + +
+

This warning is generated when the size of the expected +return value is not equal to the size actually returned.
+An interpreted program may have fallen through the end of +the code without explicitly doing an exit() or +return(). The start-up routine (crt0()) +however always expects to get some value returned by the +program proper.
+Another (less probable) possibility of course is that the +code contains a subroutine or function call that does not +return properly (e.g. it returns a short instead of a +long).

+
+ + + + + + + +
+ +

103.

+
+ +

Returned function result may be garbled

+
+
+ + + + + +
+

This warning will be generated, when the contents of the +FRA are fetched after some instruction is executed which can +mess up the area. Compiler-generated loadfiles should not +generate this message.

+
+ +

Return Status Block

+ + + + + + + +
+ +

111.

+
+ +

RET did not find a Return Status Block

+
+
+ + + + + + + +
+ +

112.

+
+ +

Used RET to return from a trap

+
+
+ + + + + +
+

The RET instruction found a garbled Return Status Block, +or on that resulted from a trap.

+
+ + + + + + + +
+ +

115.

+
+ +

RTT did not find a Return Status Block

+
+
+ + + + + + + +
+ +

116.

+
+ +

RTT on empty stack

+
+
+ + + + + + + +
+ +

117.

+
+ +

Used RTT to return from a call

+
+
+ + + + + + +
+ +

118.

+
+ +

Used RTT to return from a non-returnable trap

+
+ + + + + +
+

The RTT (Return from Trap) instruction found a Return +Status block that was not created properly by a trap.

+
+ + + + + + + +
+ +

121.

+
+ +

Stack Pointer too large in RET

+
+
+ + + + + + + +
+ +

122.

+
+ +

Stack Pointer too small in RET

+
+
+ + + + + + + +
+ +

125.

+
+ +

Stack Pointer too large in RTT

+
+
+ + + + + + + +
+ +

126.

+
+ +

Stack Pointer too small in RTT

+
+
+ + + + + +
+

According to the EM Manual (4.2), "the value of SP +just after the return value has been popped must be the same +as the value of SP just before executing the first +instruction of the invocation." If the Stack Pointer is +too large, some dynamically allocated item or some temporary +result may have been left behind on the stack. If the Stack +Pointer is too small, some locals have been unstacked. Since +the interpreter has enough information in the Return Status +Block, it recovers correctly from these errors.

+
+ +

Traps

+ +

Some traps have ambiguous or non-obvious causes. As far +as possible, these are preceded by a warning, explaining the +circumstances of the trap.

+ + + + + + + +
+ +

131.

+
+ +

Trap ESTACK: DCH on bad LB

+
+
+ + + + + + + +
+ +

132.

+
+ +

Trap ESTACK: LPB on bad LB

+
+
+ + + + + + +
+ +

133.

+
+ +

Trap ESTACK: SP retracted over Return Status +Block

+
+ + + + + + + +
+ +

134.

+
+ +

Trap ESTACK: SP moved into data area

+
+
+ + + + + + + +
+ +

135.

+
+ +

Trap ESTACK: SP set to non-word-boundary

+
+
+ + + + + + + +
+ +

136.

+
+ +

Trap ESTACK: LB set out of stack

+
+
+ + + + + + + +
+ +

137.

+
+ +

Trap ESTACK: LB set to non-word-boundary

+
+
+ + + + + + +
+ +

138.

+
+ +

Trap ESTACK: LB set to position where there is no +RSB

+
+ + + + + + +
+ +

141.

+
+ +

Trap EHEAP: HP retracted into Global Data +Area

+
+ + + + + + + +
+ +

142.

+
+ +

Trap EHEAP: HP pushed into stack

+
+
+ + + + + + + +
+ +

143.

+
+ +

Trap EHEAP: HP set to non-word-boundary

+
+
+ + + + + + + +
+ +

151.

+
+ +

Trap EILLINS: unknown opcode

+
+
+ + + + + + +
+ +

152.

+
+ +

Trap EILLINS: conversion with unacceptable size for +this machine

+
+ + + + + + + +
+ +

153.

+
+ +

Trap EILLINS: FIL with non-existing address

+
+
+ + + + + + + +
+ +

154.

+
+ +

Trap EILLINS: LFR with too large size

+
+
+ + + + + + + +
+ +

155.

+
+ +

Trap EILLINS: RET with too large size

+
+
+ + + + + + +
+ +

156.

+
+ +

Trap EILLINS: instruction argument of class c does +not fit a word

+
+ + + + + + +
+ +

157.

+
+ +

Trap EILLINS: instruction on double word on machine +with word size 4

+
+ + + + + + + +
+ +

158.

+
+ +

Trap EILLINS: local offset too large

+
+
+ + + + + + +
+ +

159.

+
+ +

Trap EILLINS: instruction argument of class g not in +GDA

+
+ + + + + + + +
+ +

160.

+
+ +

Trap EILLINS: fragment offset too large

+
+
+ + + + + + +
+ +

161.

+
+ +

Trap EILLINS: counter in lexical instruction out of +range

+
+ + + + + + +
+ +

162.

+
+ +

Trap EILLINS: non-existent procedure +identifier

+
+ + + + + + + +
+ +

163.

+
+ +

Trap EILLINS: illegal register number

+
+
+ + + + + + + +
+ +

172.

+
+ +

Trap EBADPC: jump out of text segment

+
+
+ + + + + + + +
+ +

173.

+
+ +

Trap EBADPC: jump out of procedure fragment

+
+
+ + + + + + +
+ +

181.

+
+ +

Trap EBADGTO: GTO does not restore an existing +RSB

+
+ + + + + + + +
+ +

182.

+
+ +

Trap EBADGTO: GTO descriptor on the stack

+
+
+ + + + + + + +
+ +

191.

+
+ +

Trap caused by TRP instruction

+
+
+ + + + + +
+
     APPENDIX B
+
+
+ +

How to use the interpreter

+ +

The interpreter is not normally used for the debugging +of programs under construction. Its primary application is +as a verification tool for almost completed programs. +Although the proper operation of the interpreter is +obviously a black art, this chapter tries to provide some +guidelines.

+ +

For the sake of the argument, the source language is +assumed to be C, but most hints apply equally well to other +languages supported by ACK.

+ +

Initial measures

+ +

Start with a test case of trivial size; to be on the +safe side, reckon with a time dilatation factor of about +500, i.e., a second grows into 10 minutes. (The interpreter +takes 0.5 msec to do one EM instruction on a Sun 3/50). +Fortunately many trivial test cases are much shorter than +one second.

+ +

Compile the program into an e.out, the EM machine +version of a a.out, by calling em22 (for +2-byte integers and 2-byte pointers), em24 (for 2 and +4) or em44 (for 4 and 4) as seems appropriate; if in +doubt, use em44. These compilers can be found in the +ACK bin directory, and should be used instead of +acc (or normal UNIX ® cc). +Alternatively, acc −memNN can be used instead +of emNN.

+ +

If a C program consists of more than one file, as it +usually does, there is a small problem. The acc and +cc compilers generate .o files, whereas the +emNN compilers generate .m files as object files. A +simple technique to avoid the problem is to call

+
     em44 *.c
+
+ +

if possible. If not, the following hack on the +Makefile generally works.

+ + + + + + +
+ +

+
+ +

Make sure the Makefile is reasonably clean and +complete: all calls to the compiler are through +$(CC), CFLAGS is used properly and all +dependencies are specified.

+
+ + + + + + +
+ +

+
+ +

Add the following lines to the Makefile (possibly +permanently):

+
+ + + + +

.SUFFIXES:

+ + + + + +
+ +

.o

+
+
+ + + + + +
+

.c.o:

+ + + + +

$(CC) −c $(CFLAGS) $<

+
+ + + + + + +
+ +

+
+ +

Set CC to em44 −.c (for example). Make sure +CFLAGS includes the −O option; this yields a speed-up +of about 15 %.

+
+ + + + + + +
+ +

+
+ +

Change all .o to .m (or .k if the −O option is not +used).

+
+ + + + + + + +
+ +

+
+ +

If necessary, change a.out to e.out.

+
+
+ +

With these changes, make will produce an EM +object; esize can be used to verify that it is indeed +an EM object and obtain some statistics. Then call the +interpreter:

+
     int <EM-object-file> [ parameters ]
+
+ +

where the parameters are the normal parameters of the +program. This should work exactly like the original program, +though slower. It reads from the terminal if the original +does, it opens and closes files like the original and it +accepts interrupts.

+ +

Interpreting the results

+ +

Now there are several possibilities.

+ +

It does all this. Great! This means the program does not +do very uncouth things. Now read the file int.mess to +see if any messages were generated. If there are none, the +program did not really run (perhaps the original cc +a.out got called instead?) Normally there is at least +a termination message like

+
     (Message): program exits with status 0 at "awa.p", line 64, INR = 4124
+
+ +

This says that the program terminated through an exit(0) +on line 64 of the file awa.p after 4124 EM +instructions. If this is the only message it is time to move +to a bigger test case.

+ +

On the other hand, the program may come to a grinding +halt with an error message. All messages (errors and +warnings) have a format in which the sequence

+
     "<file name>", line <ln#>
+
+ +

occurs, which is the same sequence many compilers +produce for their error messages. Consequently, the +int.mess file can be processed as any compiler +message output.

+ +

One such message can be

+
     (Fatal error) a.em: trap "Addressing non existent memory" not caught at "a.c", line 2, INR = 16
+
+ +

produced by the abysmal program

+ + + + +

main()

+ + + + + + + + + + + +
+ +

{

+
+
+ +

*(int*)200000 = 1;

+
+
+ +

}

+ +

Often the effects are more subtle, however. The +program

+ + + + +

main()

+ + + + + + + + + + + + + + + + + +
+ +

{

+
+
+ +

int *a, b = 777;

+
+
+ +

b = *a;

+
+
+ +

}

+ +

produces the following five warnings (in far less than a +second):

+
     (Warning 47, #1): Local data pointer expected at "t.c", line 4, INR = 17
+     (Warning 61, cont.): Actual memory is undefined at "t.c", line 4, INR = 17
+     (Warning 102, #1): Returned function result too small at "<unknown>", line 0, INR = 21
+     (Warning 43, #1): Local integer expected at "exit.c", line 11, INR = 34
+     (Warning 61, cont.): Actual memory is undefined at "exit.c", line 11, INR = 34
+
+ +

The one about the function result looks the most +frightening, but is the most easily solved: main is a +function returning an int, so the start-up routine expects a +(four-byte) integer but gets an empty (zero-byte) return +area.

+ +

Note: The experts are divided about this. The +traditional school holds that main is an int function +and its result is the return code; this leaves them with two +ways of supplying a return code: one as the parameter of +exit() and one as the result of main. The +modern school (Berkeley 4.2 etc.) claims that return codes +are supplied exclusively by exit(), and they have an +exit(0) in the start-up routine, just after the call +to main(); leaving main() through the bottom +implies successful termination.

+ +

We shall satisfy both groups by

+ + + + +

main()

+ + + + + + + + + + + + + + + + + + + + + + + +
+ +

{

+
+
+ +

int *a, b = 777;

+
+
+ +

b = *a;

+
+
+ +

exit(0);

+
+
+ +

}

+ +

This results in

+
     (Warning 47, #1): Local data pointer expected at "t.c", line 4, INR = 17
+     (Warning 61, cont.): Actual memory is undefined at "t.c", line 4, INR = 17
+     (Message): program exits with status 0 at "exit.c", line 11, INR = 33
+
+ +

which is pretty clear as it stands.

+ +

Using stack dumps

+ +

Let’s, for the sake of argument and to avoid the +fierce realism of 10000-line programs, assume that the above +still does not give enough information. Since the error +occurred in EM instruction number 17, we should like to see +more information around that moment. Call the interpreter +again, now with the shell variable AT set at 17:

+
     int AT=17 t.em
+
+ +

(The interpreter has a number of internal variables that +can be set by assignments on the command line, like with +make.) This gives a file called int.log +containing the stack dump of 150 lines presented at the end +of this chapter.

+ +

Since dumping is a subfacility of logging in the +interpreter, the formats of the lines are the same. If a +line starts with an @, it will contain a +file-name/line-number indication; the next two characters +are the subject and the log level. Then comes the +information, preceded by a space. The text contains three +stack dumps, one before the offending instruction, one at +it, and one after it; then the interpreter stops. All kinds +of other dumps can be obtained, but this is default.

+ +

For each instruction we have, in order:

+ + + + + + +
+ +

+
+ +

an @x9 line, giving the position in the program,

+
+ + + + + + +
+ +

+
+ +

the messages, warnings and errors from the instruction +as it is being executed,

+
+ + + + + + + +
+ +

+
+ +

dump(s), as requested.

+
+
+ +

The first two lines mean that at line 4 in file +t.c the interpreter performed its 16-th instruction, +with the Program Counter at 30 pointing at opcode 180 in the +text segment; the instruction was an LOL (LOad Local) with +the operand −4 derived from the opcode. It copies the +local at offset −4 to the top of the stack. The effect +can be seen from the subsequent stack dump, where the +undefined word at addresses 2147483568 to ...571 (the +variable a) has been copied to the top of the stack +at 2147483560 (copying undefined values does not generate a +warning). Since we used the em44 compiler, all +pointers and ints in our dump are 4 bytes long. So a +variable at address X in reality extends from address X to +X+3.
+Note that this is not the offending instruction; this stack +dump represents the situation just before the error.

+ +

The stack consists of a sequence of frames, each +containing data followed by a Return Status Block resulting +from a call; the last frame ends in top-of-stack. The first +frame represents the stack when the program starts, through +a call to the start-up routine. This routine prepares the +second stack frame with the actual parameters to +main(): argc at 2147483596, argv at +2147483600 and environ at 2147483604.

+ +

The RSB line shows that the call to main() was +made from procedure 0 which has 0 locals, with PC at 16, an +LB of 2147483608 and file name and line number still +unknown. The code in the RSB tells how this RSB was +made; possible values are STP (start-up), CAL, RTT +(returnable trap) and NRT (non-returnable trap).

+ +

The next frame shows the local variable(s) of +main(); there are two of them, the pointer a +at 2147483568, which is undefined, and variable b at +2147483564, which has the value 777. Then comes a copy of +a, just made by the LOL instruction, at 2147483560. +The following line shows that the Function Return Area +(which does not reside at the end of the stack, but just +happens to be printed here) has size 0 and is presently +undefined. The stack dump ends by showing that the Actuals +Base is at 2147483596 (pointing at argc), the Locals +Base at 2147483572 (pointing just above the local a), +the Stack Pointer at 2147483560 (pointing at the undefined +pointer), the line count is 4 and the file name is +"t.c".

+ +

(Notice that there is one more stack frame than one +would probably expect, the one above the start-up +routine.)

+ +

The Function Return Area could have a size larger than 0 +and still be undefined, for example when an instruction that +does not preserve the contents of the FRA has just been +executed; likewise the FRA could have size 0 and be defined +nevertheless, for example just after a RET 0 +instruction.

+ +

All this has set the scene for the distaster which is +about to strike in the next instruction. This is indeed a +LOI (LOad Indirect) of size 4, opcode 169; it causes the +message

+
     warning: Local data pointer expected [stack.c: 242]
+
+ +

and its continuation

+
     warning cont.: Actual memory is undefined
+
+ +

(detected in the interpreter file stack.c at line +242; this can be useful for sorting out dubious semantics). +We see that the effect, as shown in the third frame of this +stack dump (at instruction number 17) is somewhat +unexpected: the LOI has fetched the value 4 and stacked it. +The reason is that, unfortunately, undefinedness is not +transitive in the interpreter. When an undefined value is +used in an operation (other than copying) a warning is +given, but thereafter the value is treated as if it were +zero. So, after the warning a normal null pointer remains, +which is then used to pick up the value at location 0. This +is the place where the EM machine stores its current line +number, which is presently 4.

+ +

The third stack dump shows the final effect: the value 4 +has been unstacked and copied to variable b at +2147483564 through an STL (STore Local) instruction.

+ +

Since this form of logging dumps the stack only, the log +file is relatively small as dumps go. Nevertheless, a useful +excerpt can be obtained with the command

+
     grep ’d1’ int.log
+
+ +

This extracts the Return Status Block lines from the +log, thus producing three traces of calls, one for each +instruction in the log:

+
      d1 >> RSB: code = STP, PI = uninit, PC = 0, LB = 2147483644, LIN = 0, FIL = NULL
+      d1 >> RSB: code = CAL, PI = (0,0), PC = 16, LB = 2147483608, LIN = 0, FIL = NULL
+      d1 >> AB = 2147483596, LB = 2147483572, SP = 2147483560, HP = 848, LIN = 4, FIL = "t.c"
+      d1 >> RSB: code = STP, PI = uninit, PC = 0, LB = 2147483644, LIN = 0, FIL = NULL
+      d1 >> RSB: code = CAL, PI = (0,0), PC = 16, LB = 2147483608, LIN = 0, FIL = NULL
+      d1 >> AB = 2147483596, LB = 2147483572, SP = 2147483560, HP = 848, LIN = 4, FIL = "t.c"
+      d1 >> RSB: code = STP, PI = uninit, PC = 0, LB = 2147483644, LIN = 0, FIL = NULL
+      d1 >> RSB: code = CAL, PI = (0,0), PC = 16, LB = 2147483608, LIN = 0, FIL = NULL
+      d1 >> AB = 2147483596, LB = 2147483572, SP = 2147483564, HP = 848, LIN = 4, FIL = "t.c"
+
+ +

Theoretically, the pertinent trace is the middle one, +but in practice all three are equal. In the present case +there isn’t much to trace, but in real programs the +trace can be useful.

+ +

Errors in libraries

+ +

Since libraries are generally compiled with suppression +of line number and file name information, the line number +and file name in the interpreter will not be updated when it +enters a library routine. Consequently, all messages +generated by interpreting library routines will seem to +originate from the line of the call. This is especially true +for the routine malloc(), which, from the nature of its +business, often contains dubitable code.

+ +

A usual message is:

+
     (Warning 43, #1): Local integer expected at "buff.c", line 18, INR = 266
+     (Warning 64, cont.): Actual memory contains a data pointer at "buff.c", line 18, INR = 266
+
+ +

and indeed at line 18 of the file buff.c we find:

+ + + + +

buff = malloc(buff_size = BFSIZE);

+
+ +

This problem can be avoided by using a specially +compiled version of the library that contains the correct +LIN and FIL instructions, or, less elegantly, by including +the source code of the library routines in the program; in +the latter case, one has to be sure to have them all.

+ +

Unavoidable messages
+Some messages produced by the logging are almost +unavoidable; sometimes the writer of a library routine is +forced to take liberties with the semantics of EM.

+ +

Examples from C include the memory allocation routines. +For efficiency reasons, one bit of an pointer in the +administration is used as a flag; setting, clearing and +reading this bit requires bitwise operations on pointers, +which gives the above messages. Realloc causes a problem in +that it may have to copy the originally allocated area to a +different place; this area may contain uninitialised +bytes.

+
     @x9 "t.c", line 4, INR = 16, PC = 30 OPCODE = 180
+     @L6 "t.c", line 4, INR = 16, DoLOLm(-4)
+      d2
+      d2 . . STACK_DUMP[4/4] . . INR = 16 . . STACK_DUMP . .
+      d2 ----------------------------------------------------------------
+      d2       ADDRESS     BYTE     ITEM VALUE   SHADOW
+      d2    2147483643        0                  (Dp)
+      d2    2147483642        0                  (Dp)
+      d2    2147483641        0                  (Dp)
+      d2    2147483640       40    [        40]  (Dp)
+      d2    2147483639        0                  (Dp)
+      d2    2147483638        0                  (Dp)
+      d2    2147483637        3                  (Dp)
+      d2    2147483636       64    [       832]  (Dp)
+      d2    2147483635        0                  (In)
+      d2    2147483634        0                  (In)
+      d2    2147483633        0                  (In)
+      d2    2147483632        1    [         1]  (In)
+      d1 >> RSB: code = STP, PI = uninit, PC = 0, LB = 2147483644, LIN = 0, FIL = NULL
+      d2
+      d2       ADDRESS     BYTE     ITEM VALUE   SHADOW
+      d2    2147483607        0                  (Dp)
+      d2    2147483606        0                  (Dp)
+      d2    2147483605        0                  (Dp)
+      d2    2147483604       40    [        40]  (Dp)
+      d2    2147483603        0                  (Dp)
+      d2    2147483602        0                  (Dp)
+      d2    2147483601        3                  (Dp)
+      d2    2147483600       64    [       832]  (Dp)
+      d2    2147483599        0                  (In)
+      d2    2147483598        0                  (In)
+      d2    2147483597        0                  (In)
+      d2    2147483596        1    [         1]  (In)
+      d1 >> RSB: code = CAL, PI = (0,0), PC = 16, LB = 2147483608, LIN = 0, FIL = NULL
+      d2
+      d2       ADDRESS     BYTE     ITEM VALUE   SHADOW
+      d2    2147483571    undef
+      d2         | | |    | | |
+      d2    2147483568    undef (1 word)
+      d2    2147483567        0                  (In)
+      d2    2147483566        0                  (In)
+      d2    2147483565        3                  (In)
+      d2    2147483564        9    [       777]  (In)
+      d2    2147483563    undef
+      d2         | | |    | | |
+      d2    2147483560    undef (1 word)
+      d2        FRA: size = 0, undefined
+      d1 >> AB = 2147483596, LB = 2147483572, SP = 2147483560, HP = 848, \
+                                        LIN = 4, FIL = "t.c"
+      d2 ----------------------------------------------------------------
+      d2
+     @x9 "t.c", line 4, INR = 17, PC = 31 OPCODE = 169
+     @w1 "t.c", line 4, INR = 17, warning: Local data pointer expected [stack.c: 242]
+     @w1 "t.c", line 4, INR = 17, warning cont.: Actual memory is undefined
+     @L6 "t.c", line 4, INR = 17, DoLOIm(4)
+      d2
+      d2 . . STACK_DUMP[4/4] . . INR = 17 . . STACK_DUMP . .
+      d2 ----------------------------------------------------------------
+      d2       ADDRESS     BYTE     ITEM VALUE   SHADOW
+      d2    2147483643        0                  (Dp)
+      d2    2147483642        0                  (Dp)
+      d2    2147483641        0                  (Dp)
+      d2    2147483640       40    [        40]  (Dp)
+      d2    2147483639        0                  (Dp)
+      d2    2147483638        0                  (Dp)
+      d2    2147483637        3                  (Dp)
+      d2    2147483636       64    [       832]  (Dp)
+      d2    2147483635        0                  (In)
+      d2    2147483634        0                  (In)
+      d2    2147483633        0                  (In)
+      d2    2147483632        1    [         1]  (In)
+      d1 >> RSB: code = STP, PI = uninit, PC = 0, LB = 2147483644, LIN = 0, FIL = NULL
+      d2
+      d2       ADDRESS     BYTE     ITEM VALUE   SHADOW
+      d2    2147483607        0                  (Dp)
+      d2    2147483606        0                  (Dp)
+      d2    2147483605        0                  (Dp)
+      d2    2147483604       40    [        40]  (Dp)
+      d2    2147483603        0                  (Dp)
+      d2    2147483602        0                  (Dp)
+      d2    2147483601        3                  (Dp)
+      d2    2147483600       64    [       832]  (Dp)
+      d2    2147483599        0                  (In)
+      d2    2147483598        0                  (In)
+      d2    2147483597        0                  (In)
+      d2    2147483596        1    [         1]  (In)
+      d1 >> RSB: code = CAL, PI = (0,0), PC = 16, LB = 2147483608, LIN = 0, FIL = NULL
+      d2
+      d2       ADDRESS     BYTE     ITEM VALUE   SHADOW
+      d2    2147483571    undef
+      d2         | | |    | | |
+      d2    2147483568    undef (1 word)
+      d2    2147483567        0                  (In)
+      d2    2147483566        0                  (In)
+      d2    2147483565        3                  (In)
+      d2    2147483564        9    [       777]  (In)
+      d2    2147483563        0                  (In)
+      d2    2147483562        0                  (In)
+      d2    2147483561        0                  (In)
+      d2    2147483560        4    [         4]  (In)
+      d2        FRA: size = 0, undefined
+      d1 >> AB = 2147483596, LB = 2147483572, SP = 2147483560, HP = 848, \
+                                        LIN = 4, FIL = "t.c"
+      d2 ----------------------------------------------------------------
+      d2
+     @x9 "t.c", line 4, INR = 18, PC = 32 OPCODE = 229
+     @S6 "t.c", line 4, INR = 18, DoSTLm(-8)
+      d2
+      d2 . . STACK_DUMP[4/4] . . INR = 18 . . STACK_DUMP . .
+      d2 ----------------------------------------------------------------
+      d2       ADDRESS     BYTE     ITEM VALUE   SHADOW
+      d2    2147483643        0                  (Dp)
+      d2    2147483642        0                  (Dp)
+      d2    2147483641        0                  (Dp)
+      d2    2147483640       40    [        40]  (Dp)
+      d2    2147483639        0                  (Dp)
+      d2    2147483638        0                  (Dp)
+      d2    2147483637        3                  (Dp)
+      d2    2147483636       64    [       832]  (Dp)
+      d2    2147483635        0                  (In)
+      d2    2147483634        0                  (In)
+      d2    2147483633        0                  (In)
+      d2    2147483632        1    [         1]  (In)
+      d1 >> RSB: code = STP, PI = uninit, PC = 0, LB = 2147483644, LIN = 0, FIL = NULL
+      d2
+      d2       ADDRESS     BYTE     ITEM VALUE   SHADOW
+      d2    2147483607        0                  (Dp)
+      d2    2147483606        0                  (Dp)
+      d2    2147483605        0                  (Dp)
+      d2    2147483604       40    [        40]  (Dp)
+      d2    2147483603        0                  (Dp)
+      d2    2147483602        0                  (Dp)
+      d2    2147483601        3                  (Dp)
+      d2    2147483600       64    [       832]  (Dp)
+      d2    2147483599        0                  (In)
+      d2    2147483598        0                  (In)
+      d2    2147483597        0                  (In)
+      d2    2147483596        1    [         1]  (In)
+      d1 >> RSB: code = CAL, PI = (0,0), PC = 16, LB = 2147483608, LIN = 0, FIL = NULL
+      d2
+      d2       ADDRESS     BYTE     ITEM VALUE   SHADOW
+      d2    2147483571    undef
+      d2         | | |    | | |
+      d2    2147483568    undef (1 word)
+      d2    2147483567        0                  (In)
+      d2    2147483566        0                  (In)
+      d2    2147483565        0                  (In)
+      d2    2147483564        4    [         4]  (In)
+      d2        FRA: size = 0, undefined
+      d1 >> AB = 2147483596, LB = 2147483572, SP = 2147483564, HP = 848, \
+                                        LIN = 4, FIL = "t.c"
+      d2 ----------------------------------------------------------------
+      d2
+
+ +

BIBLIOGRAPHY

+ +

[1] A.S. Tanenbaum, H. van Staveren, E.G. Keizer and +J.W. Stevenson. Description of a Machine Architecture for +use with Block Structured Languages. VU Informatica +Rapport IR-81, august 1983.

+ +

[2] E.G. Keizer. Ack description file reference +manual.

+ +

[3] K. Jensen and N. Wirth. PASCAL, User Manual and +Report. Springer Verlag.

+ +

[4] B.W. Kernighan and D.M. Ritchie. The C +Programming Language. Prentice-Hall, 1978.

+ +

[5] D.M. Ritchie. C Reference Manual.

+ +

[6] Amsterdam Compiler Kit, reference manual.

+ +

[7] Unix Programmer’s Manual, 4.1BSD. UCB, +August 1983.

+
+ + diff --git a/src/olddocs/int.pdf b/src/olddocs/int.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f330d8d6b4bbb6c6f4c154f45bc70c82f526f704 GIT binary patch literal 114684 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
PAVj1Bi*bt@O(*U-kI0481Z^X(t5W(`Ed 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

4?jp;!PW@;F2-gTi|tLf0O#uu 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/lint.html b/src/olddocs/lint.html new file mode 100644 index 000000000..b195de094 --- /dev/null +++ b/src/olddocs/lint.html @@ -0,0 +1,3054 @@ + + + + + + +Lint, a C Program Checker + + + +

Lint, a C Program Checker

+
Contents
+1. Introduction
+2. Outline of the program
+3. What lint checks
+3.1. Set, used and unused variables
+3.2. Flow of control
+3.3. Functions
+3.4. Undefined evaluation order
+3.5. Pointer alignment problems
+3.6. Libraries
+4. How lint checks
+4.1. The first pass first pass data structure
+4.1.1. The changes
+4.1.1.1. Idf descriptor
+4.1.1.2. Def descriptor
+4.1.2. The additions
+4.1.2.1. Lint_stack_entry descriptor
+4.1.2.2. State descriptor
+4.1.2.3. Auto_def descriptor
+4.1.2.4. Expr_state descriptor
+4.1.2.5. Outdef descriptor
+4.2. The first pass checking mechanism
+4.2.1. Used and/or set variables
+4.2.2. Undefined evaluation orders
+4.2.3. Useless statements
+4.2.4. Not-reachable statements
+4.2.5. Functions returning expressions and just returning
+4.2.6. Output definitions for the second pass
+4.2.7. Generating libraries
+4.2.8. Interpreting the pseudocomments
+4.3. The second pass data structure
+4.3.1. Inp_def descriptor
+4.4. The second pass checking mechanism
+4.4.1. Read_defs()
+4.4.2. Check()
+4.4.3. Check_usage()
+5. How to make lint shut up
+6. User options
+7. Ideas for further development
+8. Testing the program
+9. References
+Appendix A
+The warnings
+Pass one warnings
+Pass two warnings
+Appendix B
+ +
+ +

Lint, a C Program Checker

+ +

Afstudeer verslag

+ +

18 mei 1988

+ +

Frans Kunst

+ +

Vrije Universiteit
+Amsterdam
+This document describes an implementation of a program +which
+does an extensive consistency and plausibility check on a +set
+of C program files.
+This may lead to warnings which help the programmer to +debug
+the program, to remove useless code and to improve his +style.
+The program has been used to test itself and has found
+bugs in sources of some heavily used code.

+ +

Contents

+ + + + + + + +
+ +

1.

+
+ +

Introduction

+
+
+ + + + + + + +
+ +

2.

+
+ +

Outline of the program

+
+
+ + + + + + + +
+ +

3.

+
+ +

What lint checks

+
+
+ + + + + + + + +
+ +

3.1

+
+ +

Set, used and unused variables

+
+
+ + + + + + + + +
+ +

3.2

+
+ +

Flow of control

+
+
+ + + + + + + + +
+ +

3.3

+
+ +

Functions

+
+
+ + + + + + + + +
+ +

3.4

+
+ +

Undefined evaluation order

+
+
+ + + + + + + + +
+ +

3.5

+
+ +

Pointer alignment problems

+
+
+ + + + + + + + +
+ +

3.6

+
+ +

Libraries

+
+
+ + + + + + + +
+ +

4.

+
+ +

How lint checks

+
+
+ + + + + + + + +
+ +

4.1

+
+ +

The first pass data structure

+
+
+ + + + + + + + +
+ +

4.2

+
+ +

The first pass checking mechanism

+
+
+ + + + + + + + +
+ +

4.3

+
+ +

The second pass data structure

+
+
+ + + + + + + + +
+ +

4.4

+
+ +

The second pass checking mechanism

+
+
+ + + + + + + +
+ +

5.

+
+ +

How to make lint shut up

+
+
+ + + + + + + +
+ +

6.

+
+ +

User options

+
+
+ + + + + + + +
+ +

7.

+
+ +

Ideas for further development

+
+
+ + + + + + + +
+ +

8.

+
+ +

Testing the program

+
+
+ + + + + + + +
+ +

9.

+
+ +

References

+
+
+ +

Appendix A − The warnings
+Appendix B − The Ten Commandments for C +programmers

+ +

1. Introduction

+ +

C [1][2] is a dangerous programming language. The +programmer is allowed to do almost anything, as long as the +syntax of the program is correct. This has a reason. In this +way it is possible to make a fast compiler which produces +fast code. The compiler will be fast because it +doesn’t do much checking at compile time. The code is +fast because the compiler doesn’t generate run time +checks. The programmer should protect himself against +producing error prone code. One way to do that is to obey +the Ten Commandments for C programmers [appendix B]. +This document describes an implementation of the lint +program, as referred to in Commandment 1. It is a common +error to run lint only after a few hours of debugging +and some bug can’t be found. Lint should be run +when large pieces of new code are accepted by the compiler +and as soon as bugs arise. Even for working programs it is +useful to run lint, because it can find constructions +that may lead to problems in the future.

+ +

2. Outline of the program

+ +

The program can be divided into three parts. A first +pass, which parses C program files and outputs definitions, +a second pass which processes the definitions and a driver, +which feeds the set of files to the first pass and directs +its output to the second pass. Both passes produce the +warnings on standard error output, which are redirected to +standard output by the driver.

+ +

The first pass is based on an existing C front end, +called cem [3]. Cem is part of the Amsterdam +Compiler Kit (ACK), as described in [4].

+ +

Most of the code of cem is left unchanged. This +has several reasons. A lot of work, which is done by +cem , must also be done by lint. E.g. the +lexical analysis, the macro expansions, the parsing part and +the semantical analysis. Only the code generation part is +turned off. An advantage of this approach is, that a person +who understands cem will not have to spend to much +time in understanding lint.

+ +

All changes and extensions to cem can be turned +off by not defining the compiler directive LINT. +Compiling should then result in the original C compiler.

+ +

The second pass is a much less complex program. It reads +simple definitions generated by the first pass and checks +their consistency. This second pass gives warnings about +wrong usage of function arguments, their results and about +external variables, which are used and defined in more than +one file.

+ +

The driver is a shell program, to be executed by the +UNIX ® shell sh. It executes the +two passes and let them communicate through a filter (sort). +Actually it is simplex communication: the first pass only +talks to the second pass through the filter.

+ +

3. What lint checks

+ +

3.1. Set, used and unused variables

+ +

We make a distinction between two classes of variables: +the class of automatic variables (including register +variables) and the other variables. The other variables, +global variables, static variables, formal parameters et +cetera, are assumed to have a defined value. Global +variables e.g., are initialized by the compiled code at +zeros; formal parameters have a value which is equal to the +value of the corresponding actual parameter. These variables +can be used without explicitly initializing them. The +initial value of automatic variables is undefined (if they +are not initialized at declaration). These variables should +be set before they are used. A variable is set by

+ + + + + + + +
+ +

1.

+
+ +

an assignment (including an initialization)

+
+ + + + + + + + +
+ +

2.

+
+ +

taking the address

+
+
+ +

The first case is clear. The second case is plausible. +It would take to much effort (if at all possible) to check +if a variable is set through one of its aliases. Because +lint should not warn about correct constructs, it +does this conservative approach. Structures (and unions) can +also be set by setting at least one member. Again a +conservative approach. An array can be set by using its name +(e.g. as actual parameter of a function call). Lint +warns for usage as rvalue of automatic variables +which are not set.

+ +

A variable is used if

+ + + + + + + + +
+ +

1.

+
+ +

it is used as a rvalue

+
+
+ + + + + + + + +
+ +

2

+
+ +

its address is taken

+
+
+ + + + + +
+

Arrays and structures (and unions) are also used if one +entry or one member respectively is used.

+
+ +

When a variable is never used in the part of the program +where it is visible, a warning is given. For variables +declared at the beginning of a compound statement, a check +is made at the end of this statement. For formal parameters +a check is made at the end of the function definition. At +the end of a file this is done for global static +definitions. For external variables a warning can be given +when all the files are parsed.

+ +

3.2. Flow of control

+ +

The way lint keeps track of the flow of control +is best explained by means of an example. See the program of +figure 1.

+
   if (cond)
+        /* a statement which is executed if cond is true,
+         * the if-part
+         */
+   else
+        /* the else-part */
+
+
+
+ +

figure 1.

+ +

After evaluation of cond, two things can +happen. The if-part is executed or the else-part is executed +(but not both). Variables which are set in the if-part but +not in the else-part, need not be set after the if +statement, and vice versa. Lint detects this and +assumes these variables after the if statement to be +maybe set. (See figure 2.)

+
  int cond;
+
+
+  main()
+  {
+          int i, j;
+
+
+          if (cond) {
+                  i = 0;
+                  j = 0;
+          }
+          else
+                  use(i);  /* i may be used before set */
+          use(j);          /* maybe j used before set  */
+  }
+
+
+
+ +

figure 2.

+ +

If both the if-part and the else-part are never left +(i.e. they contain an endless loop or a return statement), +lint knows that the if statement is never left too. +Besides the if statement, lint knows the possible +flows of control in while, do, for and switch statements. It +also detects some endless loops like while(1), +do ... while (1), for (;;).

+ +

3.3. Functions

+ +

Most C compilers will not complain if a function is +called with actual parameters of a different type than the +function expects. Using a function in one file as a function +of type A while defining it in another file as a +function of type B is also allowed by most compilers. +It needs no explanation that this can lead to serious +trouble.

+ +

Lint checks if functions are called with the +correct number of arguments, if the types of the actual +parameters correspond with the types of the formal +parameters and if function values are used in a way +consistently with their declaration. When the result of a +function is used, a check is made to see if the function +returns a value. When a function returns a value, +lint checks if the values of all calls of this +function are used.

+ +

3.4. Undefined evaluation order

+ +

The semantics of C do not define evaluation orders for +some constructs, which, at first sight, seem well defined. +The evaluation order of the expression a[i] = i++; +e.g., is undefined. It can be translated to something with +the semantics of a[i] = i; i++; which is what +probably was meant, or a[i+1] = i; i++;. An easier +example to explain why, is j = a[i] + i++;. +‘+’ Is a so called commutative +operator (with respect to the evaluation order) , as is +‘=’. This allows the compiler to choose +which term to evaluate first. It is easy to see, that it +makes a difference for the value of j, which order +is chosen. The expression i++ is said to have +side effects. It affects the value of i. +Because this value is used in the other term, this gives a +conflict.

+ +

A function call with reference to a variable as argument +can have side effects to. Therefor, the evaluation order of +i in the expression f(&i) + i is +undefined. When a function is called with an array as +argument, this array can be affected by the function, +because only the address of the array is passed to the +function. (In Pascal a copy of the array is passed to the +function if the formal parameter is not declared +var.) So the evaluation order of a in the +expression f(a) + a[0] is undefined. This one is +not yet detected by lint.

+ +

Global variables can still cause trouble. If function +f affects the global variable i, the value +of the expression f() + i is undefined, because the +evaluation order of i is undefined.

+ +

The evaluation order of the arguments of a function is +not defined, so the expression f(i, i++) gives a +warning i evaluation order undefined.

+ +

3.5. Pointer alignment problems

+ +

For pointers to objects of different types there are +different alignment restrictions. On some machines pointers +to type char can have both odd and even values, whereas +pointers to type int should contain an even address. +Lint could warn for all pointer conversions. This is +not what lint does. Lint assumes that some +pointers are more restricted than others, and that pointers +of some types can safely be converted to a pointer of a less +restrictive type. The order of restriction is as follows +(‘≤’ means ‘is not more restricted +than’) :

+ +

char ≤ short ≤ int ≤ long

+ +

float ≤ double

+ +

3.6. Libraries

+ +

C is a small language. As a matter of fact it has no i/o +routines. To make it a useful language, C is supported by +libraries. These libraries contain functions and variables +that can be used by any C program. Lint knows some +libraries too. At this moment it knows the +‘-lc’, ‘-lm’ and +‘-lcurses’ libraries. The +‘-lc’ library, containing definitions for +functions from chapter two and three of the +UNIX programmers manual, is default. +Lint warns for definitions of functions or global +variables with the same name as a function definition in a +library.

+ +

4. How lint checks

+ +

4.1. The first pass first pass data structure

+ +

The data structure of cem is changed a little and +some structures have been added.

+ +

4.1.1. The changes

+ +

4.1.1.1. Idf descriptor

+ +

A member id_line is added to the idf +selector. This line number is used for some warnings.

+ +

4.1.1.2. Def descriptor

+ +

The def selector is extended with the members +df_set df_line. The df_used member did +exist already, but was only used for code generation. This +usage is eliminated so it can be used by lint. The +meaning of these members should be clear.

+ +

4.1.2. The additions

+ +

4.1.2.1. Lint_stack_entry descriptor

+
     struct lint_stack_entry {
+             struct lint_stack_entry *next;
+             struct lint_stack_entry *previous;
+             short ls_class;
+             int ls_level;
+             struct state *ls_current;
+             union {
+                     struct state *S_if;
+                     struct state *S_end;
+                     struct switch_states switch_state;
+             } ls_states;
+     };
+
+ +

Structure to simulate a stacking mechanism.

+ + + + + + +
+ +

next

+
+ +

Pointer to the entry on top of this one.

+
+ + + + + + +
+ +

previous

+
+ +

Pointer to the entry beneath this one.

+
+ + + + + + +
+ +

ls_class

+
+ +

The class of statement this entry belongs to. Possible +classes are IF, WHILE, DO, +FOR, SWITCH and CASE.

+
+ + + + + + +
+ +

ls_level

+
+ +

The level the corresponding statement is nested.

+
+ + + + + + +
+ +

ls_current

+
+ +

A pointer to the state descriptor which describes the +state of the function (the state of the automatic variables, +if the next statement can be reached, et cetera) if control +passes the flow of control to the part of the program +currently parsed. The initialization of this state is as +follows

+
+ + + + + +
+

If ls_class in [IF, SWITCH] +the state after parsing the conditional expression.

+ +

If ls_class in [WHILE, FOR] +the state after parsing the code between the brackets.

+ +

If ls_class in [DO, CASE] the +state at entrance of the statement after the DO or +CASE token.

+
+ + + + + + +
+ +

ls_states

+
+ +

Union of pointers to state descriptors containing +different information for different values of +ls_class.

+
+ + + + + +
+

If ls_class is IF and in case of +parsing an else part, ls_states.S_if points to the +state that is reached after the if part.

+ +

If ls_class in [WHILE, FOR, +DO] then ls_states.S_end contains a +conservative description of the state of the program after +‘jumping’ to the end of the statement after the +WHILE, DO or FOR token. I.e. the +state at reaching a break (not inside a switch) or continue +statement.

+ +

If ls_class is SWITCH, ls_states is +used as a structure

+ +
     struct switch_states {
+             struct state S_case;
+             struct state S_break;
+     };
+
+ +

containing two pointers to state descriptors. +ls_states.switch_state.S_case contains a +conservative description of the state of the program after +case ... case parts are parsed. +ls_states.switch_state.S_break the state after +parsing all the case ... break parts. The reason +for ls_states.switch_state.default_met should be +self-explanatory.

+ +

In case ls_class is CASE, +ls_states is not used.

+
+ +

4.1.2.2. State descriptor

+
           struct state {
+                   struct state *next;
+                   struct auto_def *st_auto_list;
+                   int st_nrchd;
+                   int st_warned;
+           };
+
+ + + + + + + +
+ +

st_auto_list

+
+ +

Pointer to a list of definitions of the automatic +variables whose scope contain the current position in the +program.

+
+ + + + + + +
+ +

st_nrchd

+
+ +

True if the next statement can’t be reached.

+
+ + + + + + +
+ +

st_warned

+
+ +

True if a warning has already been given.

+
+ +

4.1.2.3. Auto_def descriptor

+
               struct auto_def {
+                       struct auto_def *next;
+                       struct idf *ad_idf;
+                       struct def *ad_def;
+                       int ad_used;
+                       int ad_set;
+                       int ad_maybe_set;
+               };
+
+ + + + + + + +
+ +

next

+
+ +

Points to the next auto_definition of the list.

+
+ + + + + + +
+ +

ad_idf

+
+ +

Pointer to the idf descriptor associated with this +auto_definition.

+
+ + + + + + + +
+ +

ad_def

+
+ +

Ditto for def descriptor.

+
+
+ + + + + + +
+ +

ad_used

+
+ +

Indicates the state of this automatic variable. Ditto +for ad_set and ad_maybe_set. Only one of +ad_set and ad_maybe_set may be true.

+
+ +

4.1.2.4. Expr_state descriptor

+
              struct expr_state {
+                      struct expr_state *next;
+                      struct idf *es_idf;
+                      arith es_offset;
+                      int es_used;
+                      int es_set;
+              };
+
+ +

This structure is introduced to keep track of which +variables, array entries and structure members (union +members) are set and/or used in evaluating an +expression.

+ + + + + + +
+ +

next

+
+ +

Pointer to the next descriptor of this list.

+
+ + + + + + +
+ +

es_idf

+
+ +

Pointer to the idf descriptor this descriptor belongs +to.

+
+ + + + + + +
+ +

es_offset

+
+ +

In case of an array, a structure or union, this member +contains the offset the compiler would generate for locating +the array entry or structure/union member.

+
+ + + + + + +
+ +

es_used

+
+ +

True if the indicated memory location is used in +evaluating the expression.

+
+ + + + + + + +
+ +

es_set

+
+ +

Ditto for set.

+
+
+ +

4.1.2.5. Outdef descriptor

+
             struct outdef {
+                     int od_class;
+                     char *od_name;
+                     char *od_file;
+                     unsigned int od_line;
+                     int od_nrargs;
+                     struct tp_entry *od_entry;
+                     int od_returns;
+                     struct type *od_type;
+             };
+
+ +

As structures of this type are not allocated dynamically +by a storage allocator, it contains no next member. An +outdef can be given to to output_def() to be passed +to the second pass. Basically this forms the interface with +the second pass.

+ + + + + + +
+ +

od_class

+
+ +

Indicates what kind of definition it is. Possible +classes are EFDF, EVDF, SFDF, +SVDF, LFDF, LVDF, EFDC, +EVDC, IFDC, FC, VU. +([External, Static, Library, +Implicit] [Function, Variable] +[DeFinition, +DeClaration, Call, +Usage])

+
+ + + + + + +
+ +

od_name

+
+ +

The name of the function or variable.

+
+ + + + + + +
+ +

od_file

+
+ +

The file this definition comes from.

+
+ + + + + + +
+ +

od_nrargs

+
+ +

If od_class is one of EFDF, +SFDF or LFDF, this member contains the +number of arguments this function has. If the function was +preceded by the pseudocomment /* VARARGS */, +od_nrargs gets the value -1-n.

+
+ + + + + + +
+ +

od_entry

+
+ +

A pointer to a list of od_nrargs cells, each +containing a pointer to the type descriptor of an argument. +(-1-od_nrargs cells if od_nrargs < 0.) +Tp_entry is defined as

+
+ + + + + +
+
struct tp_entry {
+        struct tp_entry *next; /* pointer to next cell */
+        struct type *te_type;  /* an argument type     */
+};
+
+
+ + + + + + + +
+ +

od_returns

+
+ +

For classes EFDF, SFDF and +LFDF this member tells if the function returns an +expression or not. In case od_class is FC +it is true if the value of the function is used, false +otherwise. For other classes this member is not used.

+
+ + + + + + +
+ +

od_type

+
+ +

A pointer to the type of the function or variable +defined or declared. Not used for classes FC and +VU.

+
+ +

4.2. The first pass checking mechanism

+ +

In the description of the implementation of the pass one +warnings, it is assumed that the reader is familiar with the +LLgen parser generator, as described in [6].

+ +

4.2.1. Used and/or set variables

+ +

To be able to give warnings like %s used before +set and %s set but not used in function %s , +there needs to be a way to keep track of the state of a +variable. A first approach to do this was by adding two +fields to the def selector: df_set and +df_used. While parsing the program, each time an +expression was met this expression was analyzed and the +fields of each def selector were possibly set during +this analysis. This analysis was done by passing each +expression to a function lint_expr , which walks +the expression tree in a way similar to the function +EVAL in the file eval.c of the original +cem compiler. This approach has one big disadvantage: +it is impossible to keep track of the flow of control of the +program. No warning will be given for the program fragment +of figure 3.

+
  func()
+  {
+          int i;
+
+
+          if (cond)
+                  i = 0;
+          else
+                  use(i);  /* i may be used before set */
+  }
+
+
+
+ +

figure 3.

+ +

It is clear that it would be nice having lint +warn for this construction.

+ +

This was done in the second approach. When there was a +choice between two statements, each statement was parsed +with its own copy of the state at entrance of the +choosing statement. A state consisted of the state of +the automatic variables (including register variables). In +addition to the possibilities of being used and set, a +variable could be maybe set. These states were passed +between the statement parsing routines using the +LLgen parameter mechanism. At the end of a choosing +statement, the two states were merged into one state, which +became the state after this statement. The construction of +figure 4 was now detected, but switch statements still gave +problems and continue and break statements were not +understood. The main problem of a switch statement is, that +the closing bracket (‘)’) has to be +followed by a statement. The syntax shows no choice +of statements, as is the case with if, while, do and for +statements. Using the LLgen parameter mechanism, it +is not a trivial task to parse the different case parts of a +switch statement with the same initial state and to merge +the results into one state. This observation led to the +third and final approach, as described next.

+ +

Instead of passing the state of the program through the +statements parsing routines using the LLgen +parameters, a special stack is introduced, the +lint_stack. When a choosing statement is parsed, an +entry is pushed on the stack containing the information that +is needed to keep track of the state of the program. Each +entry contains a description of the current state of +the program and a field that indicates what part of the +program the parser is currently parsing. For all the +possible choosing statements I describe the actions to be +taken.

+ +

At entrance of an if statement, an entry is pushed on +the stack with the current state being a copy of the current +state of the stack element one below. The class of this +entry is IF. At reaching the else part, the current +state is moved to another place in this stack entry (to +S_IF), and a new copy of the current state at +entrance of this if statement is made. At the end of the +else part, the two states are merged into one state, the new +current state, and the IF entry is popped from the +stack. If there is no else part, then the state that is +reached after parsing the if part is merged with the current +state at entrance of the if statement into the new current +state.

+ +

At entrance of a while statement a WHILE entry +is pushed on the stack containing a copy of the current +state. If a continue or break statement is met in the while +statement, the state at reaching this continue or break +statement is merged with a special state in the +WHILE entry, called S_END. (If +S_END did not yet contain a state, the state is +copied to S_END.) At the end of the while statement +this S_END is merged with the current state, which +result is merged with the state at entrance of the while +statement into the new current state.

+ +

A for statement is treated similarly. A do statement is +treated the same way too, except that S_END +isn’t merged with the state at entrance of the do +statement, but becomes the new current state.

+ +

For switch statements a SWITCH entry is pushed +on the stack. Apart from the current state, this entry +contains two other states, S_BREAK and +S_CASE. S_BREAK initially contains no +state, S_CASE initially contains a copy of the +current state at entrance of the switch statement. After +parsing a case label, a CASE entry is pushed on the +stack, containing a copy of the current state. If, after +zero or more statements, we meet another case label, the +state at reaching this case label is merged with +S_CASE of the SWITCH entry below and a new +copy of the state at entrance of the switch statement is put +in the CASE entry. If we meet a break statement, we +merge the current state with S_BREAK of the +SWITCH entry below and pop the CASE entry. +In addition to this, the occurrence of a default statement +inside the switch statement is recorded in the +SWITCH entry. At the end of the switch statement we +check if we have met a default statement. If not, +S_BREAK is merged with the current state at +entrance of the switch statement. (Because it is possible +that no case label will be chosen.) Next the S_CASE +is ‘special_merged’ with S_BREAK into +the new current state. For more details about these merge +functions see the sources.

+ +

With the approach described above, lint is aware +of the flow of control in the program. There still are some +doubtful constructions lint will not detect and there +are some constructions (although rare) for which lint +gives an incorrect warning (see figure 4).

+
       {
+               int i;
+
+
+               for (;;) {
+                       if (cond) {
+                               i = 0;
+                               break;
+                       }
+               }
+               use(i);
+               /* lint warns: maybe i used before set
+                * although  the  fragment  is correct
+                */
+       }
+
+
+
+ +

figure 4.

+ +

A nice advantage of the method is, that the parser stays +clear, i.e. it isn’t extended with extra parameters +which must pass the states. In this way the parser still is +very readable and we have a nice interface with lint +using function calls.

+ +

4.2.2. Undefined evaluation orders

+ +

In expressions the values of some variables are used and +some variables are set. Of course, the same holds for +subexpressions. The compiler is allowed to choose the order +of evaluation of subexpressions involving a commutative and +associative operator (*, +, +&, |, ^), the comma in a +parameter list or an assignment operator. In section 3.4 it +is made clear that this will lead to statements with +ambiguous semantics.

+ +

The way these constructs are detected is rather straight +forward. The function which parses an expression +(lint_expr) returns a linked list containing +information telling which variables are set and which +variables are used. A variable is indicated by its +idf descriptor and an offset. This offset is +needed for discriminating entries of the same array and +members of the same structure or union, so it is possible to +warn about the statement a[b[0]] = b[0]++;. When +lint_expr meets a commutative operator (with +respect to the evaluation order), it calls itself +recursively with the operands of the operator as expression. +The returned results are checked for undefined evaluation +orders and are put together. This is done by the function +check_and_merge.

+ +

4.2.3. Useless statements

+ +

Statements which compute a value that is not used, are +said to have a null effect. Examples are x = 2, +3;, f() + g(); and *p++;. (* +and ++ have the same precedence and associate from +right to left.)

+ +

A conditional expression computes a value too. If this +value isn’t used, it is better to use an if-else +statement. So, if lint sees

+
                       b ? f() : g();
+
+ +

it warns use if-else construction.

+ +

4.2.4. Not-reachable statements

+ +

The algorithm to detect not-reachable statements +(including not reachable initializations) is as follows. +Statements after a label and a case statement and the +compound statement of a function are always reachable. Other +statements are not-reachable after:

+ + + + + +
+

-

+ + + + + +
+

a goto statement

+
+ + + + + +
+

-

+ + + + + +
+

a return statement

+
+ + + + + +
+

-

+ + + + + +
+

a break statement

+
+ + + + + +
+

-

+ + + + + +
+

a continue statement

+
+ + + + + +
+

-

+ + + + + +
+

a switch statement

+
+ + + + + +
+

-

+ + + + + +
+

an endless loop (a while, do or for loop with a +conditional which always evaluates to true and without a +break statement)

+
+ + + + + +
+

-

+ + + + + +
+

an if-else statement of which both if part and else part +end up in a not-reachable state

+
+ + + + + +
+

-

+ + + + + +
+

a switch statement of which all case ... break +parts (including a default ... break part) end up +in a not-reachable state

+
+ + + + + +
+

-

+ + + + + +
+

the pseudocomment /* NOTREACHED */

+
+ +

The algorithm is easily implemented using the +st_nrchd selector in the state descriptor. +The st_warned selector is used to prevent +superfluous warnings. To detect an endless loop, after a +while (<true>), for (..;<true>;..) and do part +the current state of the stack entry beneath the top one is +set to not reached. If, in the statement following, a break +statement is met, this same state is set to reached. If the +while (<cond>) part of the do statement is met, this +state is set to reached if <cond> doesn’t +evaluates to true. The detection of not-reachable statements +after a switch statement is done in a similar way. In +addition it is checked if a default statement isn’t +met, in which case the statement after the switch statement +can be reached. The warning statement not reached +is not given for compound statements. If lint did, it +would warn for the compound statement in a switch statement, +which would be incorrect.

+ +

Not-reachable statements are still interpreted by +lint. I.e. when lint warns that some statement +can’t be reached, it assumes this is not what the +programmer really wants and it ignores this fact. In this +way a lot of useless warnings are prevented in the case of a +not-reachable statement. See figure 5.

+
 {
+         int i;
+
+
+         for (;;) {
+                 /* A loop in which the programmer
+                  * forgot to introduce a conditional
+                  * break statement.
+                  * Suppose i is not used in this part.
+                  */
+         }
+         /* some more code in which i is used */
+ }
+ /* The warning "statement not reached" highlights the bug.
+  * An additional warning "i unused in function %s" is
+  * formally correct, but doesn’t provide the programmer
+  * with useful information.
+  */
+
+
+
+ +

figure 5.

+ +

4.2.5. Functions returning expressions and just returning

+ +

Each time a return statement is met, lint checks +if an expression is returned or not. If a function has a +return with expression and a return without expression, +lint warns function %s has return(e); and +return;. If the flow of control can fall through +the end of the compound statement of a function, this +indicates an implicit return statement without an +expression. If the end of the compound statement of the +function can be reached, lint introduces this +implicit return statement without expression.

+ +

Sometimes the programmer knows for sure that all case +parts inside a switch statement include all possible cases, +so he doesn’t introduce a default statement. This can +lead to an incorrect warning. Figure 6 shows how to prevent +this warning.

+
            func()
+            {
+                    switch (cond) {
+                    case 0: return(e0);
+                    case 1: return(e1);
+                    }
+                    /* NOTREACHED */
+            }
+/* no warning: "function func has return(e); and return; */
+
+
+
+ +

figure 6.

+ +

The pseudocomment /* NOTREACHED */ can also be +used to tell lint that some function doesn’t +return. See figure 7.

+
  func()
+  {
+          switch (cond) {
+          case 0: return(e0);
+          case 1: return(e1);
+          default: error();   /* calls exit or abort */
+                   /* NOTREACHED */
+          }
+  }
+/* no warning: "function func has return(e); and return;" */
+
+
+
+ +

figure 7.

+ +

4.2.6. Output definitions for the second pass

+ +

The first pass can only process one program file. To be +able to process a program that spreads over more than one +file, the first pass outputs definitions that are processed +by a second pass. The format of such a definition is +different for different classes:

+ +

For class in {EFDF, SFDF, LFDF}

+ + +

<name>:<class>:<file>:<line>:<nr +of args>:<type of args>:<returns +value>:<type>

+ +

A negative nr of args indicates that the function +can be called with a varying number of arguments.

+ +

For class = FC

+ + +

<name>:<class>:<file>:<line>:<value +is used>:<type>

+ +

The value is used part can have three meanings: +the value of the function is ignored; the value of the +function is used; the value of the function is cast to type +void.

+ +

For other classes

+ + +

<name>:<class>:<file>:<line>:<type>

+ +

Definitions of class VU (Variable Usage) are only output +for used global variables.

+ +

Structure and union types that are output to the +intermediate file are simplified. (The following occurrences +of structure should be read as structure or +union and struct as struct or union.) +Structures that are identified by a structure tag are +output to the intermediate file as struct +<tag>. Structures without a structure tag are +output as struct {<mems>} with +<mems> a semicolon-separated list of types of +the members of this structure. An alternative way would be +to output the complete structure definition. However, this +gives practical problems. It is allowed to define some +object of a structure type with a structure tag, without +this structure being defined at that place. The first +approach leaves errors, such as in figure 8, undetected.

+
       "a.c"                           "b.c"
+
+
+   struct str {                    struct str {
+           float f;                        int i;
+   } s;                            };
+
+
+   main()                          func(s)
+   {                                       struct str s;
+           func(s);                {}
+   }
+
+
+
+ +

figure 8.

+ +

To be able to detect these errors, the first pass should +also output definitions of structure tags. The example of +figure 8 would then get a warning like structure str +defined inconsistently

+ +

More information on these definitions in section 4.3 and +4.4.

+ +

4.2.7. Generating libraries

+ +

Lint knows the library ‘-lc’, +‘-lm’ and ‘-lcurses’. If a program +uses some other library, it is possible to generate a +corresponding lint library. To do this, precede all +the C source files of this library by the pseudocomment +/* LINTLIBRARY */. Then feed these files one by one +to the first pass of lint collecting the standard +output in a file and ignoring the warnings. The resulting +file contains library definitions of the functions and +external variables defined in the library sources, and not +more than that. If this file is called +‘llib-lname.ln lint can be told to +search the library by passing it as argument in the command +line ‘-llib-lname.ln. The implementation of +this feature is simple.

+ +

As soon as the pseudocomment /* LINTLIBRARY */ +is met, only function and variable definitions are output +with class LFDF and LVDF respectively. Other definitions, +which otherwise would have been output, are discarded.

+ +

Instead of generating a special lint library file, one +can make a file containing the library definitions and +starting with /* LINTLIBRARY */. This file can then +be passed to lint just by its name. This method +isn’t as efficient as the first one.

+ +

4.2.8. Interpreting the pseudocomments

+ +

The interpretation of the pseudocomments is done by the +lexical analyzer, because this part of the program already +took care of the comments. At first sight this seems very +easy: as soon as some pseudocomment is met, raise the +corresponding flag. Unfortunately this doesn’t work. +The lexical analyzer is a one token look ahead +scanner. This causes the above procedure to raise the +flags one token too soon. A solution to get the right effect +is to reserve two flags per pseudocomment. The first is set +as soon as the corresponding pseudocomment is scanned. At +the returning of each token this flag is moved to the second +flag. The delay in this way achieved makes the +pseudocomments have effect at the correct place.

+ +

4.3. The second pass data structure

+ +

4.3.1. Inp_def descriptor

+
             struct inp_def {
+                     struct inp_def *next;
+                     int id_class;
+                     char id_name[NAMESIZE];
+                     char id_file[FNAMESIZE];
+                     unsigned int id_line;
+                     int id_nrargs;
+                     char argtps[ARGSTPSSIZE];
+                     int id_returns;
+                     char id_type[TYPESIZE];
+                     int id_called;
+                     int id_used;
+                     int id_ignored;
+                     int id_voided;
+             };
+
+ +

This description is almost similar to the outdef +descriptor as described in 4.1.2.5. There are some +differences too.

+ + + + + + +
+ +

next

+
+ +

As structures of this type are allocated dynamically, +this field is added so the same memory allocator as used in +the first pass can be used.

+
+ +

id_called
+id_used
+id_ignored

+ + + + + + +
+ +

id_voided

+
+ +

Some additional fields only used for function +definitions.Their meaning should be clear.

+
+ +

The other fields have the same meaning as the +corresponding fields in the outdef descriptor. Some +attention should be paid to id_argtps and +id_type. These members have type array of +char, in contrast to their counterparts in the +outdef descriptor. The only operation performed on +types is a check on equality. Types are output by the first +pass as a string describing the type. The type of i +in int *i(); e.g. is output as int *(). +Such a string is best put in an array of char to be +compared easily.

+ +

4.4. The second pass checking mechanism

+ +

After all the definitions that are output by the first +pass are sorted by name, the definitions belonging to one +name are ordered as follows.

+ + + + + +
+

-

+ + + + + +
+

external definitions

+
+ + + + + +
+

-

+ + + + + +
+

static definitions

+
+ + + + + +
+

-

+ + + + + +
+

library definitions

+
+ + + + + +
+

-

+ + + + + +
+

declarations

+
+ + + + + +
+

-

+ + + + + +
+

function calls

+
+ + + + + +
+

-

+ + + + + +
+

variable usages

+
+ +

The main program of the second pass is easily explained. +For all different names, do the following. First read the +definitions. If there is more than one definition, check for +conflicts. Then read the declarations, function calls and +variable usages and check them against the definitions. +After having processed all the declarations, function calls +and variable usages, check the definitions to see if they +are used correctly. The next three paragraphs will explain +the three most important functions of the program.

+ +

4.4.1. Read_defs()

+ +

This function reads all definitions belonging to the +same name. Only one external definition is allowed, so if +there are more, a warning is given. In different files it is +allowed to define static functions or variables with the +same name. So if a static function is read, +read_defs checks if there isn’t already an +external definition, and if not it puts the static +definition in the list of static definitions, to be used +later. If no external or static definitions are met, a +library definition is taken as definition. If a function or +a variable is defined with the same name as a function or a +variable in a library (which is allowed) lint gives a +warning. Of course it is also possible that there is no +definition at all. In that case check will +warn.

+ +

4.4.2. Check()

+ +

Check verifies declarations, function calls and +variable usages against the definitions. For each of these +entries the corresponding definition is looked up. As there +may be more than one static definition, first a static +definition from the same file as the entry is searched. If +not present, the external definition (which may be a library +definition) is taken as definition. If no definition can be +found and the current entry is an external declaration, +lint warns. However in the case of an implicit +function declaration lint will not warn, because we +will get a warning %s used but not defined later +on. Next a check is done if the declarations are consistent +with their definitions. After the declarations, the function +calls and variable usages are verified against their +corresponding definitions. If no definition exists, +lint warns. Else the field id_called is set +to 1. (For variable definitions this should be interpreted +as used.) For variable usages this will be all. If we +are processing a function call we also check the number and +types of the arguments and we warn for function values which +are used from functions that don’t return a value. For +each function call we administrate if a function value is +used, ignored or voided.

+ +

4.4.3. Check_usage()

+ +

Checks if the external definition and static definitions +are used correctly. If a function or variable is defined but +never used, lint warns, except for library +definitions. Functions, which return a value but whose value +is always or sometimes ignored, get a warning. (A function +value which is voided (cast to void) is not ignored, but it +isn’t used either.)

+ +

5. How to make lint shut up

+ +

It can be very annoying having lint warn about +questionable constructs of which the programmer already is +aware. There should be a mechanism to give lint some +extra information in the source code. This could be done by +introducing some special keywords, which would have a +special meaning to lint. This is a bad solution, +because these keywords would cause existing C compilers not +to work on these programs. A neater solution is to invent +some comments having a special meaning to lint. We +call these comments pseudocomments. The +pseudocomments have no meaning to existing C compilers, so +compilers will not have to be rewritten for C programs +containing the previously proposed special keywords. The +following pseudocomments are recognized by lint.

+ +

/* VARARGSn */

+ + + + + +
+

The next function can be called with a variable number of +arguments. Only check the first n arguments. The +n must follow the word VARARGS immediately. +This pseudocomment is useful for functions like e.g. printf. +(The definition of the function printf should be preceded by +/* VARARGS1 */.)

+ +

/* VARARGS */

+ + + + + +
+

Means the same as /* VARARGS0 */.

+ +

/* ARGSUSED */

+ + + + + +
+

Don’t complain about unused arguments in the next +function. When we are developing a program we sometimes +write functions of which we do not yet use the arguments. +Because we do want to use lint on these programs, it +is nice to have this pseudocomment.

+ +

/* NOTREACHED */

+ + + + + +
+

Lint makes no attempt to discover functions which +never return, although it is possible to find +functions that don’t return. This would require a +transitive closure with respect to the already known +not-returning functions; an inacceptable time +consuming process. To make lint aware of a function +that doesn’t return, a call of this function should be +followed by the pseudocomment /* NOTREACHED */. +This pseudocomment can also be used to indicate that some +case part inside a switch (especially a default part) +can’t be reached. The above mentioned cases of use of +this pseudocomment are examples. The comment can be used +just to indicate that some part of the program can’t +be reached. It sometimes is necessary to introduce an extra +compound statement to get the right effect. See figure +9.

+
+
         if (cond)
+                 /* if part */ ;
+         else {
+                 error();  /* doesn’t return */
+                 /* NOTREACHED */
+         }
+ /* Without  the compound  else  part, lint  would  assume
+  * the statement after the if statement to be NOTREACHED,
+  * instead of the end of the else part.
+  */
+
+
+
+ +

figure 9.

+ +

/* LINTLIBRARY */

+ + + + + +
+

All definitions following this comment are assumed to be +library definitions. It shuts off complaints about unused +functions and variables. See also section 4.2.7 for how to +use this comment for generating lint libraries.

+ +

6. User options

+ +

Lint recognizes the following command line flags. +Some of them are identical to the flags of cem. Lint +warns for flags it doesn’t know.

+ +

-D<name>
+-D<name>=<text>

+ + + + + +
+

Causes <name> to be defined as a macro. +The first form is equivalent to +‘-D<name>=1’. The second form is +equivalent to putting ‘#define <name> +<text>’ in front of all the source +files.

+ +

-U<name>

+ + + + + +
+

Acts as if the line ‘#undef +<name>’ is put in front of all the source +files.

+ +

-I<directory>

+ + + + + +
+

This puts <directory> in the include +directory list.

+ +

-R

+ + + + + +
+

Turn off the ‘strict’ option. Default +lint checks the program according to the Reference +Manual, because this gives a definition of the language with +which there is a better chance of writing portable programs. +With this flag on, some constructs, otherwise not allowed, +are accepted.

+ +

-l<name>
+-llib-l<name>.ln
+-l

+ + + + + +
+

-l<name>’ tells lint +to search the lint library llib-l<name>.ln +for missing definitions of functions and variables. The +option ‘-llib-l<name>.ln’ makes +lint search the lint library file +llib-l<name>.ln in the current directory for +missing definitions. Default is ‘-lc’; +this default can be suppressed by +‘-l’.

+ +

-a

+ + + + + +
+

Warn for conversions from integer to long and vice +versa.

+ +

-b

+ + + + + +
+

Don’t report not-reachable break statements. This +flag is useful for running lint on a lex- or +yacc-generated source file.

+ +

-h

+ + + + + +
+

Check for useless statements and possible pointer +alignment problems.

+ +

-n

+ + + + + +
+

Don’t complain about unused and undefined functions +and variables.

+ +

-v

+ + + + + +
+

Don’t warn about unused arguments of +functions.

+ +

-x

+ + + + + +
+

Complain about unused external variables.

+ +

7. Ideas for further development

+ +

Although the program in its current state is a useful +program, there are still a lot of features that should be +implemented in following versions. I’ll summarize them +in this section.

+ + + + + + +
+ +

+
+ +

Actually the program consists of three passes. The +filter sort is a complete pass, just as the first and +the second pass. I think we speed up the program by removing +the filter and making the second pass accept an unsorted +file. The sorting process can be done in parallel to the +first pass if both processes communicate through a pipe. In +addition to this sorting, the second pass can generate +already some warnings. (Warnings like %s defined but +never used can only be generated after having processed +all the input.) These warnings generated in parallel to the +warnings of the first pass, should be sent to an +intermediate file, otherwise the warnings would get messed +up. Such an improvement will have best effect on a multi +processing machine, but even on single processing machines +this will give a better performance. (On a single processing +machine the pipe should be replaced by an intermediate +file.)

+
+ + + + + + +
+ +

+
+ +

Expressions could be classified so lint can warn +for some classes of expressions in strange contexts. Suppose +as class <boolean>. b Will be of class +<boolean> if e.g. b is assigned to the +expression <ex1> || <ex2>. The +following expression should then give a warning

+
+ + + + + +
+
           b + i;    /* weird expression */
+
+
+ + + + + + + +
+ +

+
+ +

A mechanism to check printf like routines. This +mechanism should verify the format string against the +following arguments. There is a public domain program that +can be used to do this job. It is called printfck and should +be used as a filter between the source files and +lint.

+
+ + + + + + +
+ +

+
+ +

Raise warnings for incomplete initializer lists like

+
+ + + + + +
+
          int a[10] = {0, 1, 2};
+          /* initializer list not complete */
+
+
+ + + + + + + + +
+ +

+
+ +

Warnings for constructs like

+
+
+ + + + + +
+
     for (i = 0; i < 10; i++) {
+             . . . .
+             i--;
+             /* loop control variable affected */
+             . . . .
+     }
+
+ +

and

+ +
       while (var) {
+               /* statements in which the value
+                * of var is never changed
+                */
+       }
+       /* loop control variable not updated */
+
+
+ + + + + + + +
+ +

+
+ +

A warning bad layout for program fragments +like

+
+ + + + + +
+
             if (cond1)
+                     if (cond2)
+                             statement();
+             else  /* bad layout */
+                     statement();
+
+
+ + + + + + + +
+ +

+
+ +

A warning assignment in conditional context in +case of

+
+ + + + + +
+
                      if (a = b)
+
+ +

The programmer probably meant if (a == b). No +warning should be given for if ((a = b) != c), nor +for if ((a = b)).

+
+ + + + + + +
+ +

+
+ +

Warnings for empty statements in strange contexts, +like

+
+ + + + + +
+
               if (cond);  /* mistake */
+                       statement();
+
+ +

(This mistake would also be detected by a warning bad +layout.)

+
+ + + + + + +
+ +

+
+ +

A mechanism to prevent the warning possible pointer +alignment problem for functions of which the programmer +already knows that no problem will arise. E.g. for functions +like malloc and family.

+
+ + + + + + +
+ +

+
+ +

The current version of lint warns for conversions +from long to int (if -a flag is on). It even warns if the +programmer used the proper cast, as e.g.

+
+ + + + + +
+
                     int i;
+                     long l = 0L;
+
+
+                     i = (int)l;
+
+ +

In this case I think lint need not warn. The +explicit cast indicates that the programmer knows what he is +doing. This feature is not implemented because the +expression tree doesn’t show if the cast was implicit +or explicit.

+
+ +

8. Testing the program

+ +

There is no test-suite for testing lint. I have +written a lot of small files that each test one particular +property of the program. At this moment there are about 220 +test programs.

+ +

It would take a lot of time and effort to run these +tests by hand. To ease this work I wrote a program that runs +these tests automatically. The test program (the program +that runs the tests) needs, associated with each .c file, a +.w file, containing from each expected warning a substring. +E.g. when the following warnings should be given by +lint:

+
        file t.c, line 3, i evaluation order undefined
+        file t.c, line 6, a set but not used in function main
+
+ +

it is sufficient to write a file t.w +containing

+
                a set but not used in function main
+                i evaluation order undefined
+
+ +

The test program is called with all the .c files to be +tested as arguments.

+ +

Sometimes it is necessary to test lint on two +files. The test program runs lint on two files when +two consecutive arguments are of the form namea.c and +nameb.c. It then compares the output of lint +with the file name.w.

+ +

Lint is also tested by running it on existing +programs. Lint has been run on some +UNIX utility programs in /usr/src/cmd, on +Unipress Emacs (consisting of more than 30,000 lines of +code) and the program itself. Bugs have been found in e.g. +/usr/src/cmd/cat.c and /usr/src/cmd/ld.c. To test the +robustness of the program, it was run on the password file +/etc/passwd and on ‘mixed’ C program files. +These mixed C program files are C program files that were +broken in chunks and then put together in a different +order.

+ +

9. References

+ + + + + + +
+ +

[1]

+
+ +

Dennis M. Ritchie, C Reference Manual, Bell +Laboratories, Murray Hill, New Jersey, 1978.

+
+ + + + + + +
+ +

[2]

+
+ +

B.W. Kernighan and D.M. Ritchie, The C Programming +Language, Prentice Hall, 1978.

+
+ + + + + + +
+ +

[3]

+
+ +

Eric H. Baalbergen, Dick Grune, Maarten Waage, The +CEM Compiler, Manual IM-4, Vrije Universiteit, +Amsterdam, 1985.

+
+ + + + + + +
+ +

[4]

+
+ +

Andrew S. Tanenbaum et al., A practical tool kit for +making portable compilers, Comm. ACM, Sep. 1983.

+
+ + + + + + +
+ +

[5]

+
+ +

S. C. Johnson, Lint, a C program verifier, Bell +Laboratories, Murray Hill, New Jersey, 1978.

+
+ + + + + + +
+ +

[6]

+
+ +

Dick Grune, Ceriel J. H. Jacobs, A +Programmer-friendly LL(1) Parser Generator, IR 127, +Vrije Universiteit, Amsterdam, 1987.

+
+ +

Appendix A

+ +

The warnings

+ +

Pass one warnings

+
     %s may be used before set
+     maybe %s used before set
+     %s unused in function %s
+     %s set but not used in function %s
+     argument %s unused in function %s
+     static [variable, function] %s unused
+     %s declared extern but never used
+
+
+     long conversion may lose accuracy
+     comparison of unsigned with negative constant
+     unsigned comparison with 0?
+     degenerate unsigned comparison
+     nonportable character comparison
+     possible pointer alignment problem
+
+
+     %s evaluation order undefined
+
+
+     null effect
+     constant in conditional context
+     use if-else construction
+     while (0) ?
+     do ... while (0) ?
+     [case, default] statement in strange context
+
+
+     function %s has return(e); and return;
+     statement not reached
+     function %s declared %s but no value returned
+
+ +

Pass two warnings

+
     %s variable # of args
+     %s arg %d used inconsistently
+     %s multiply defined
+     %s value declared inconsistently
+     %s used but not defined
+     %s defined (%s(%d)) but never used
+     %s declared but never defined
+     %s value is used but none is returned
+     %s returns value which is [sometimes, always] ignored
+     %s also defined in library
+
+ +

Appendix B

+ +

The Ten Commandments for C +Programmers

+ +

Henry Spencer

+ + + + + + +
+ +

1

+
+ +

Thou shalt run lint frequently and study its +pronouncements with care, for verily its perception and +judgement oft exceed thine.

+
+ + + + + + +
+ +

2

+
+ +

Thou shalt not follow the NULL pointer, for chaos and +madness await thee at its end.

+
+ + + + + + +
+ +

3

+
+ +

Thou shalt cast all function arguments to the expected +type if they are not of that type already, even when thou +art convinced that this is unnecessary, lest they take cruel +vengeance upon thee when thou least expect it.

+
+ + + + + + +
+ +

4

+
+ +

If thy header files fail to declare the return types of +thy library functions, thou shalt declare them thyself with +the most meticulous care, lest grievous harm befall thy +program.

+
+ + + + + + +
+ +

5

+
+ +

Thou shalt check the array bounds of all strings +(indeed, all arrays), for surely where thou typest +‘‘foo’’ someone someday shall type +‘‘supercalifragilisticexpialidocious’’.

+
+ + + + + + +
+ +

6

+
+ +

If a function be advertised to return an error code in +the event of difficulties, thou shalt check for that code, +yea, even though the checks triple the size of thy code and +produce aches in thy typing fingers, for if thou thinkest +‘‘it cannot happen to me’’, the gods +shall surely punish thee for thy arrogance.

+
+ + + + + + +
+ +

7

+
+ +

Thou shalt study thy libraries and strive not to +re-invent them without cause, that thy code may be short and +readable and thy days pleasant and productive.

+
+ + + + + + +
+ +

8

+
+ +

Thou shalt make thy program’s purpose and +structure clear to thy fellow man by using the One True +Brace Style, even if thou likest it not, for thy creativity +is better used in solving problems than in creating +beautiful new impediments to understanding.

+
+ + + + + + +
+ +

9

+
+ +

Thy external identifiers shall be unique in the first +six characters, though this harsh discipline be irksome and +the years of its necessity stretch before thee seemingly +without end, lest thou tear thy hair out and go mad on that +fateful day when thou desirest to make thy program run on an +old system.

+
+ + + + + + +
+ +

10

+
+ +

Thou shalt foreswear, renounce, and abjure the vile +heresy which claimeth that ‘‘All the +world’s a VAX’’, and have no commerce with +the benighted heathens who cling to this barbarous belief, +that the days of thy program may be long even though the +days of thy current machine be short.

+
+
+ + diff --git a/src/olddocs/lint.pdf b/src/olddocs/lint.pdf new file mode 100644 index 0000000000000000000000000000000000000000..342b0f6d9ee7e54cc512405f8e5137219ac7c89b GIT binary patch literal 91599 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%0A*BuM? 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/m2ref.html b/src/olddocs/m2ref.html new file mode 100644 index 000000000..f81f52e5e --- /dev/null +++ b/src/olddocs/m2ref.html @@ -0,0 +1,831 @@ + + + + + + +The ACK Modula-2 Compiler + + + +

The ACK Modula-2 Compiler

+1. Introduction
+2. The language implemented
+2.1. Syntax (section 2)
+2.2. Vocabulary and Representation (section 3)
+2.3. Declarations and scope rules (section 4)
+2.4. Constant expressions (section 5)
+2.5. Type declarations (section 6)
+2.5.1. Basic types (section 6.1)
+2.5.2. Enumerations (section 6.2)
+2.5.3. Record types (section 6.5)
+2.5.4. Set types (section 6.6)
+2.6. Expressions (section 8)
+2.6.1. Operators (section 8.2)
+2.6.1.1. Arithmetic operators (section 8.2.1)
+2.7. Statements (section 9)
+2.7.1. Assignments (section 9.1)
+2.7.2. Case statements (section 9.5)
+2.7.3. For statements (section 9.8)
+2.7.4. Return and exit statements (section 9.11)
+2.8. Procedure declarations (section 10)
+2.8.1. Standard procedures (section 10.2)
+2.9. System-dependent facilities (section 12)
+3. Backwards compatibility
+4. Compile time errors
+5. Runtime errors
+6. Calling the compiler
+7. The procedure call interface
+8. References
+ +
+ + + + + +
+

Ceriel J.H. Jacobs
+Department of Mathematics and Computer Science
+Vrije Universiteit
+Amsterdam
+The Netherlands

+
+ +

1. Introduction

+ +

This document describes the implementation-specific +features of the ACK Modula-2 compiler. It is not intended to +teach Modula-2 programming. For a description of the +Modula-2 language, the reader is referred to [1].

+ +

The ACK Modula-2 compiler is currently available for use +with the VAX, Motorola MC68020, Motorola MC68000, PDP-11, +and Intel 8086 code-generators. For the 8086, MC68000, and +MC68020, floating point emulation is used. This is made +available with the -fp option, which must be passed +to ack[4,5].

+ +

2. The language implemented

+ +

This section discusses the deviations from the Modula-2 +language as described in the "Report on The Programming +Language Modula-2", as it appeared in [1], from now on +referred to as "the Report". Also, the Report +sometimes leaves room for interpretation. The section +numbers mentioned are the section numbers of the Report.

+ +

2.1. Syntax (section 2)

+ +

The syntax recognized is that of the Report, with some +extensions to also recognize the syntax of an earlier +definition, given in [2]. Only one compilation unit per file +is accepted.

+ +

2.2. Vocabulary and Representation (section 3)

+ +

The input "10.." is parsed as two +tokens: "10" and +"..".

+ +

The empty string "" has type

+
     ARRAY [0 .. 0] OF CHAR
+
+ +

and contains one character: 0C.

+ +

When the text of a comment starts with a +’$’, it may be a pragma. Currently, the +following pragmas exist:

+
     (*$F      (F stands for Foreign) *)
+     (*$R[+|-] (Runtime checks, on or off, default on) *)
+     (*$A[+|-] (Array bound checks, on or off, default off) *)
+     (*$U      (Allow for underscores within identifiers) *)
+
+ +

The Foreign pragma is only meaningful in a +DEFINITION MODULE, and indicates that this +DEFINITION MODULE describes an interface to a +module written in another language (for instance C, Pascal, +or EM). Runtime checks that can be disabled are: range +checks, CARDINAL overflow checks, checks when +assigning a CARDINAL to an INTEGER and +vice versa, and checks that FOR-loop +control-variables are not changed in the body of the loop. +Array bound checks can be enabled, because many EM +implementations do not implement the array bound checking of +the EM array instructions. When enabled, the compiler +generates a check before generating an EM array instruction. +Even when underscores are enabled, they still may not start +an identifier.

+ +

Constants of type LONGINT are integers with a +suffix letter D (for instance 1987D). +Constants of type LONGREAL have suffix D +if a scale factor is missing, or have D in place of +E in the scale factor (f.i. 1.0D, +0.314D1). This addition was made, because there was +no way to indicate long constants, and also because the +addition was made in Wirth’s newest Modula-2 +compiler.

+ +

2.3. Declarations and scope rules (section 4)

+ +

Standard identifiers are considered to be predeclared, +and valid in all parts of a program. They are called +pervasive. Unfortunately, the Report does not state +how this pervasiveness is accomplished. However, page 87 of +[1] states: "Standard identifiers are automatically +imported into all modules". Our implementation +therefore allows redeclarations of standard identifiers +within procedures, but not within modules.

+ +

2.4. Constant expressions (section 5)

+ +

Each operand of a constant expression must be a +constant: a string, a number, a set, an enumeration literal, +a qualifier denoting a constant expression, a type transfer +with a constant argument, or one of the standard procedures +ABS, CAP, CHR, LONG, +MAX, MIN, ODD, ORD, +SIZE, SHORT, TSIZE, or +VAL, with constant argument(s); TSIZE and +SIZE may also have a variable as argument.

+ +

Floating point expressions are never evaluated compile +time, because the compiler basically functions as a +cross-compiler, and thus cannot use the floating point +instructions of the machine on which it runs. Also, +MAX(REAL) and MIN(REAL) are not +allowed.

+ +

2.5. Type declarations (section 6)

+ +

2.5.1. Basic types (section 6.1)

+ +

The type CHAR includes the ASCII character set +as a subset. Values range from 0C to 377C, +not from 0C to 177C.

+ +

2.5.2. Enumerations (section 6.2)

+ +

The maximum number of enumeration literals in any one +enumeration type is MAX(INTEGER).

+ +

2.5.3. Record types (section 6.5)

+ +

The syntax of variant sections in [1] is different from +the one in [2]. Our implementation recognizes both, giving a +warning for the older one. However, see section 3.

+ +

2.5.4. Set types (section 6.6)

+ +

The only limitation imposed by the compiler is that the +base type of the set must be a subrange type, an enumeration +type, CHAR, or BOOLEAN. So, the lower +bound may be negative. However, if a negative lower bound is +used, the compiler gives a warning of the restricted +class (see the manual page of the compiler).

+ +

The standard type BITSET is defined as

+
     TYPE BITSET = SET OF [0 .. 8*SIZE(INTEGER)-1];
+
+ +

2.6. Expressions (section 8)

+ +

2.6.1. Operators (section 8.2)

+ + +

2.6.1.1. Arithmetic operators (section 8.2.1)

+ +

The Report does not specify the priority of the unary +operators + or -: It does not specify +whether

+
     - 1 + 1
+
+ +

means

+
     - (1 + 1)
+
+ +

or

+
     (-1) + 1
+
+ +

I have seen some compilers that implement the first +alternative, and others that implement the second. Our +compiler implements the second, which is suggested by the +fact that their priority is not specified, which might +indicate that it is the same as that of their binary +counterparts. And then the rule about left to right decides +for the second. On the other hand one might argue that, +since the grammar only allows for one unary operator in a +simple expression, it must apply to the whole simple +expression, not just the first term.

+ +

2.7. Statements (section 9)

+ +

2.7.1. Assignments (section 9.1)

+ +

The Report does not define the evaluation order in an +assignment. Our compiler certainly chooses an evaluation +order, but it is explicitly left undefined. Therefore, +programs that depend on it may cease to work later.

+ +

The types INTEGER and CARDINAL are +assignment-compatible with LONGINT, and +REAL is assignment-compatible with +LONGREAL.

+ +

2.7.2. Case statements (section 9.5)

+ +

The size of the type of the case-expression must be less +than or equal to the word-size.

+ +

The Report does not specify what happens if the value of +the case-expression does not occur as a label of any case, +and there is no ELSE-part. In our implementation, +this results in a runtime error.

+ +

2.7.3. For statements (section 9.8)

+ +

The Report does not specify the legal types for a +control variable. Our implementation allows the basic types +(except REAL), enumeration types, and subranges. A +runtime warning is generated when the value of the control +variable is changed by the statement sequence that forms the +body of the loop, unless runtime checking is disabled.

+ +

2.7.4. Return and exit statements (section 9.11)

+ +

The Report does not specify which result-types are +legal. Our implementation allows any result type.

+ +

2.8. Procedure declarations (section 10)

+ +

Function procedures must exit through a RETURN +statement, or a runtime error occurs.

+ +

2.8.1. Standard procedures (section 10.2)

+ +

Our implementation supports NEW and +DISPOSE for backwards compatibility, but issues +warnings for their use. However, see section 3.

+ +

Also, some new standard procedures were added, similar +to the new standard procedures in Wirth’s newest +compiler:

+ + + + + + +
+ +

+
+ +

LONG converts an argument of type +INTEGER or REAL to the types +LONGINT or LONGREAL.

+
+ + + + + + +
+ +

+
+ +

SHORT performs the inverse transformation, +without range checks.

+
+ + + + + + +
+ +

+
+ +

FLOATD is analogous to FLOAT, but +yields a result of type LONGREAL.

+
+ + + + + + +
+ +

+
+ +

TRUNCD is analogous to TRUNC, but +yields a result of type LONGINT.

+
+ +

2.9. System-dependent facilities (section 12)

+ +

The type BYTE is added to the SYSTEM +module. It occupies a storage unit of 8 bits. ARRAY OF +BYTE has a similar effect to ARRAY OF WORD, +but is safer. In some obscure cases the ARRAY OF +WORD mechanism does not quite work properly.

+ +

The procedure IOTRANSFER is not +implemented.

+ +

3. Backwards compatibility

+ +

Besides recognizing the language as described in [1], +the compiler recognizes most of the language described in +[2], for backwards compatibility. It warns the user for +old-fashioned constructions (constructions that [1] does not +allow). If the -Rm2-3 option (see [6]) is passed to +ack, this backwards compatibility feature is +disabled. Also, it may not be present on some smaller +machines, like the PDP-11.

+ +

4. Compile time errors

+ +

The compile time error messages are intended to be +self-explanatory, and not listed here. The compiler also +sometimes issues warnings, recognizable by a +warning-classification between parentheses. Currently, there +are 3 classifications:

+ +

(old-fashioned use)

+ + + + + +
+

These warnings are given on constructions that are not +allowed by [1], but are allowed by [2].

+
+ +

(strict)

+ + + + + +
+

These warnings are given on constructions that are +supported by the ACK Modula-2 compiler, but might not be +supported by others. Examples: functions returning +structured types, SET types of subranges with negative lower +bound.

+
+ +

(warning)

+ + + + + +
+

The other warnings, such as warnings about variables that +are never assigned, never used, etc.

+ +

5. Runtime errors

+ +

The ACK Modula-2 compiler produces code for an EM +machine as defined in [3]. Therefore, it depends on the +implementation of the EM machine for detection some of the +runtime errors that could occur.

+ +

The Traps module enables the user to install his +own runtime error handler. The default one just displays +what happened and exits. Basically, a trap handler is just a +procedure that takes an INTEGER as parameter. The INTEGER is +the trap number. This INTEGER can be one of the EM trap +numbers, listed in [3], or one of the numbers listed in the +Traps definition module.

+ +

The following runtime errors may occur:

+ +

array bound error

+ + + + + +
+

The detection of this error depends on the EM +implementation.

+
+ +

range bound error

+ + + + + +
+

Range bound errors are always detected, unless runtime +checks are disabled.

+
+ +

set bound error

+ + + + + +
+

The detection of this error depends on the EM +implementation. The current implementations detect this +error.

+
+ +

integer overflow

+ + + + + +
+

The detection of this error depends on the EM +implementation.

+
+ +

cardinal overflow

+ + + + + +
+

This error is detected, unless runtime checks are +disabled.

+
+ +

cardinal underflow

+ + + + + +
+

This error is detected, unless runtime checks are +disabled.

+
+ +

real overflow

+ + + + + +
+

The detection of this error depends on the EM +implementation.

+
+ +

real underflow

+ + + + + +
+

The detection of this error depends on the EM +implementation.

+
+ +

divide by 0

+ + + + + +
+

The detection of this error depends on the EM +implementation.

+
+ +

divide by 0.0

+ + + + + +
+

The detection of this error depends on the EM +implementation.

+
+ +

undefined integer

+ + + + + +
+

The detection of this error depends on the EM +implementation.

+
+ +

undefined real

+ + + + + +
+

The detection of this error depends on the EM +implementation.

+
+ +

conversion error

+ + + + + +
+

This error occurs when assigning a negative value of type +INTEGER to a variable of type CARDINAL, or when assigning a +value of CARDINAL that is > MAX(INTEGER), to a variable +of type INTEGER. It is detected, unless runtime checking is +disabled.

+
+ +

stack overflow

+ + + + + +
+

The detection of this error depends on the EM +implementation.

+
+ +

heap overflow

+ + + + + +
+

The detection of this error depends on the EM +implementation. Might happen when ALLOCATE fails.

+
+ +

case error

+ + + + + +
+

This error occurs when non of the cases in a CASE +statement are selected, and the CASE statement has no ELSE +part. The detection of this error depends on the EM +implementation. All current EM implementations detect this +error.

+
+ +

stack size of process too large

+ + + + + +
+

This is most likely to happen if the reserved space for a +coroutine stack is too small. In this case, increase the +size of the area given to NEWPROCESS. It can also +happen if the stack needed for the main process is too large +and there are coroutines. In this case, the only fix is to +reduce the stack size needed by the main process, f.i. by +avoiding local arrays.

+
+ +

too many nested traps + handlers

+ + + + + +
+

This error can only occur when the user has installed his +own trap handler. It means that during execution of the trap +handler another trap has occurred, and that several times. +In some cases, this is an error because of overflow of some +internal tables.

+
+ +

no RETURN from function procedure

+ + + + + +
+

This error occurs when a function procedure does not +return properly ("falls" through).

+
+ +

illegal instruction

+ + + + + +
+

This error might occur when floating point operations are +used on an implementation that does not have floating +point.

+
+ +

In addition, some of the library modules may give error +messages. The Traps-module has a suitable mechanism +for this.

+ +

6. Calling the compiler

+ +

See [4,5,6] for a detailed explanation.

+ +

The compiler itself has no version checking mechanism. A +special linker would be needed to do that. Therefore, a +makefile generator is included [7].

+ +

7. The procedure call interface

+ +

Parameters are pushed on the stack in reversed order, so +that the EM AB (argument base) register indicates the first +parameter. For VAR parameters, its address is passed, for +value parameters its value. The only exception to this rule +is with conformant arrays. For conformant arrays, the +address is passed, and an array descriptor is passed. The +descriptor is an EM array descriptor. It consists of three +fields: the lower bound (always 0), upper bound - lower +bound, and the size of the elements. The descriptor is +pushed first. If the parameter is a value parameter, the +called routine must make sure that its value is never +changed, for instance by making its own copy of the array. +The Modula-2 compiler does exactly this.

+ +

When the size of the return value of a function +procedure is larger than the maximum of +SIZE(LONGREAL) and twice the pointer-size, the +caller reserves this space on the stack, above the +parameters. Callee then stores its result there, and returns +no other value.

+ +

8. References

+ + + + + + +
+ +

[1]

+
+ +

Niklaus Wirth, Programming in Modula-2, third, +corrected edition, Springer-Verlag, Berlin (1985)

+
+ + + + + + +
+ +

[2]

+
+ +

Niklaus Wirth, Programming in Modula-2, +Stringer-Verlag, Berlin (1983)

+
+ + + + + + +
+ +

[3]

+
+ +

A.S.Tanenbaum, J.W.Stevenson, Hans van Staveren, +E.G.Keizer, Description of a machine architecture for use +with block structured languages, Informatica rapport +IR-81, Vrije Universiteit, Amsterdam

+
+ + + + + + + +
+ +

[4]

+
+ +

UNIX manual ack(1)

+
+
+ + + + + + + +
+ +

[5]

+
+ +

UNIX manual modula-2(1)

+
+
+ + + + + + + +
+ +

[6]

+
+ +

UNIX manual em_m2(6)

+
+
+ + + + + + + +
+ +

[7]

+
+ +

UNIX manual m2mm(1)

+
+
+
+ + diff --git a/src/olddocs/m2ref.pdf b/src/olddocs/m2ref.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7514bd0e446819ee2d512e259c3ec019f3f79f8c GIT binary patch literal 44119 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 + + + + + +A back end table for the Motorola MC68000, MC68010 and MC68020 microprocessors + + + +

A back end table for the Motorola MC68000, MC68010 and MC68020 microprocessors

+1. Introduction
+2. The MC68000 and MC68020 micro processors
+2.1. Registers
+2.2. Addressing modes
+2.2.1. General addressing modes
+2.2.1.1. Register Direct Addressing
+2.2.1.2. Address Register Indirect
+2.2.1.3. Address Register Indirect With Postincrement
+2.2.1.4. Address Register Indirect With Predecrement
+2.2.1.5. Address Register Indirect With Displacement
+2.2.1.6. Address Register Indirect With Index
+2.2.1.7. Absolute Data Addressing
+2.2.1.8. Program Counter With Displacement.
+2.2.1.9. Program Counter With Index
+2.2.1.10. Immediate Data
+2.2.2. Extra MC68020 addressing modes
+2.2.2.1. Address Register Indirect With Index (Base Displacement)
+2.2.2.2. Memory Indirect Post-Indexed
+2.2.2.3. Memory Indirect Pre-Indexed
+2.2.3. Addressing modes used in the table
+3. The M68000 and MC68020 back end table
+3.1. Constant Definitions
+3.2. Properties
+3.3. Registers
+3.4. Tokens
+3.4.1. Token names
+3.4.2. Special tokens for the MC68000
+3.5. Sets
+3.6. Instructions
+3.7. Moves
+3.8. Tests
+3.9. Stackingrules
+3.10. Coercions
+3.11. Patterns
+3.11.1. Group 0: rules for register variables
+3.11.2. Groups 1 and 2: load and store instructions
+3.11.3. Groups 3 and 4: integer and unsigned arithmetic
+3.11.4. Group 5: floating point arithmetic
+3.11.5. Group 6: pointer arithmetic
+3.11.6. Group 9: logical instructions
+3.11.7. Group 11: arrays
+3.11.8. Group 14: procedure calls instructions
+3.11.9. Group 15: miscellaneous instructions
+3.11.10. Extra group: optimalization
+4. The library routines
+5. Testing the table
+6. Performance of the back end
+7. Some timing results
+8. Some final remarks
+References
+ +
+ +

ABSTRACT

+ +

Frank Doodeman

+ +

A back end table is part of the Amsterdam +Compiler Kit (ACK). It is used to produce the actual back +end, a program that translates the intermediate language +family EM to assembly language for some target machine. The +table discussed here can be used for two back ends, suitable +for in total three machines: the MC68000 and MC68010 (the +difference between these two is so small that one back end +table can be used for either one), or for the +MC68020.

+ +

1. Introduction

+ +

To simplify the task of producing portable +(cross) compilers and interpreters the Vrije Universiteit +designed an integrated collection of programs, the Amsterdam +Compiler Kit (ACK) [2]. It is based on the old UNCOL idea +[1] which attempts to solve the problem of how to make a +compiler for each of N languages on M different machines +without having to write N×M programs.

+ +

The UNCOL approach is to write N front +ends, which translate the source language into a common +intermediate language UNCOL (Universal Computer Oriented +Language), and M back ends, each of which translates +programs in UNCOL into a specific machine language. Under +these conditions only M+N programs must be written to +provide all N languages on all M machines, instead of +M×N programs.

+ +

The intermediate language for the Amsterdam +Compiler Kit is the machine language for a simple stack +machine called EM (Encoding Machine) [3]. So a back end for +the MC68020 translates EM code into MC68020 assembly +language. Writing such a table [4] suffices to get the back +end.

+ +

The back end is a single program that is driven +by a machine dependent driving table. This table, the back +end table, defines the mapping of EM code to the MC68000, +MC68010 or MC68020 assembly language.

+ +

2. The MC68000 and MC68020 micro processors

+ +

In this document the name MC68000 will be used +for both the MC68000 and the MC68010 micro processors, +because as far as the back end table is concerned there is +no difference between them. For a complete and detailed +description of the MC68020 one is referred to [5]; for the +MC68000 one might also use [6]. In this section some +relevant parts will be handled.

+ +

2.1. Registers

+ +

Both the MC68000 and the MC68020 have eight +32-bit data registers (D 0 -D +7 ) that can be used for byte +(8-bit), word (16-bit) and long word (32-bit) data +operations. They also have seven 32-bit address registers (A +0 -A +6 ) that may be used as +software stack pointers and base address registers; address +register A 7 is used as the +system stack pointer. Address registers may also be used for +word and long word address operations.

+ +

2.2. Addressing modes

+ +

First the MC68000 addressing modes will be +discussed. Since the MC68020’s set of addressing modes +is an extension of the MC68000’s set, of course this +section also applies to the MC68020.

+ +

In the description we use:

+ + + + + + + +
+ +

A n

+
+ +

for address register;

+
+
+ + + + + + + +
+ +

D n

+
+ +

for data register;

+
+
+ + + + + + + +
+ +

R n

+
+ +

for address or data register;

+
+
+ + + + + + +
+ +

X n

+
+ +

for index register (either data or address +register);

+
+ + + + + + + +
+ +

PC

+
+ +

for program counter;

+
+
+ + + + + + + +
+ +

d 8

+
+ +

for 8 bit displacement integer;

+
+
+ + + + + + + +
+ +

d 16

+
+ +

for 16 bit displacement integer;

+
+
+ + + + + + +
+ +

bd

+
+ +

for base displacement (may be null, word or +long);

+
+ + + + + + +
+ +

od

+
+ +

for outer displacement (may be null, word or +long).

+
+ +

2.2.1. General addressing modes

+ +

2.2.1.1. Register Direct Addressing

+ + + + + + + +
+ +

Syntax:

+
+ +

R n

+
+
+ +

This addressing mode (it can be used with either +a data register or an address register) specifies that the +operand is in one of the 16 multifunction +registers.

+ +

2.2.1.2. Address Register Indirect

+ + + + + + + +
+ +

Syntax:

+
+ +

(A n )

+
+
+ +

The address of the operand is in the address +register specified.

+ +

2.2.1.3. Address Register Indirect With Postincrement

+ + + + + + + +
+ +

Syntax:

+
+ +

(A n )+

+
+
+ +

The address of the operand is in the address +register specified. After the operand address is used, the +address register is incremented by one, two or four +depending upon whether the size of the operand is byte, word +or long. If the address register is the stack pointer and +the operand size is byte, the address register is +incremented by two rather than one to keep the stack pointer +on a word boundary.

+ +

2.2.1.4. Address Register Indirect With Predecrement

+ + + + + + + +
+ +

Syntax:

+
+ +

−(A n +)

+
+
+ +

The address of the operand is in the address +register specified. Before the operand address is used, the +address register is decremented by one, two or four +depending upon whether the size of the operand is byte, word +or long. If the address register is the stack pointer and +the operand size is byte, the address register is +decremented by two rather than one to keep the stack pointer +on a word boundary.

+ +

2.2.1.5. Address Register Indirect With Displacement

+ + + + + + +
+ +

Syntax:

+
+ +

d 16 (A +n ) for the MC68000, (d +16 ,A +n ) for the +MC68020

+
+ +

This address mode requires one word of extension. +The address of the operand is the sum of the contents of the +address register and the sign extended 16-bit integer in the +extension word.

+ +

2.2.1.6. Address Register Indirect With Index

+ + + + + + +
+ +

Syntax:

+
+ +

d 8 (A +n ,X +n .size) for the MC68000, (d +8 ,A +n ,X +n .size) for the +MC68020

+
+ +

This address mode requires one word of extension +according to a certain format, which specifies

+ + + + + + + +
+ +

1.

+
+ +

which register to use as index +register;

+
+
+ + + + + + +
+ +

2.

+
+ +

a flag that indicates whether the index register +is a data register or an address register;

+
+ + + + + + +
+ +

3.

+
+ +

a flag that indicates the index size; this is +word when the low order part of the index register is +to be used, and long when the whole long value in the +register is to be used as index;

+
+ + + + + + +
+ +

4.

+
+ +

an 8-bit displacement integer (the low order byte +of the extension word).

+
+ +

The address of the operand is the sum of the +contents of the address register, the possibly sign extended +contents of index register and the sign extended 8-bit +displacement.

+ +

2.2.1.7. Absolute Data Addressing

+ + + + + + +
+ +

Syntax:

+
+ +

address for the MC68000, (address) for the +MC68020

+
+ +

Two different kinds of this mode are +available:

+ + + + + + +
+ +

1.

+
+ +

Absolute Short Address; this mode requires one +word of extension. The address of the operand is the sign +extended 16-bit extension word.

+
+ + + + + + +
+ +

2.

+
+ +

Absolute Long Address; this mode requires two +words of extension. The address of the operand is developed +by concatenation of the two extension words; the high order +part of the address is the first extension word, the low +order part is the second.

+
+ +

2.2.1.8. Program Counter With Displacement.

+ + + + + + +
+ +

Syntax:

+
+ +

d 16 (PC) for the +MC68000, (d 16 ,PC) for the +MC68020

+
+ +

This mode requires one word of extension. The +address of the operand is the sum of the address in the +program counter and the sign extended 16-bit displacement +integer in the extension word. The value in the program +counter is the address of the extension word.

+ +

2.2.1.9. Program Counter With Index

+ + + + + + +
+ +

Syntax:

+
+ +

d 8 (PC,X +n .size) for the MC68000, (d +8 ,PC,X +n .size) for the +MC68020

+
+ +

This mode requires one word of extension as +described under Address Register Indirect With Index. +The address of the operand is the sum of the value in the +program counter, the possibly sign extended index register +and the sign extended 8-bit displacement integer in the +extension word. The value in the program counter is the +address of the extension word.

+ +

2.2.1.10. Immediate Data

+ + + + + + + +
+ +

Syntax:

+
+ +

.if !r0x .nr 0x 0

+
+
+ +

This addressing mode requires either one or two +words of extension, depending on the size of the +operation;

+ + + + + +
+

byte operation - the operand is in the low order +byte of extension word;

+ +

word operation - the operand is in the extension +word;

+ +

long operation - the operand is in the two +extension words, the high order 16-bits are in the first +extension word, the low order 16-bits in the +second.

+ +

2.2.2. Extra MC68020 addressing modes

+ +

The MC68020 has three more addressing modes. +These modes all use a displacement (some even two), an +address register and an index register. Instead of the +address register one may also use the program counter. Any +of these may be omitted. If all addends are omitted the +processor creates an effective address of zero. All of these +three modes require at least one extension word, the Full +Format Extension Word, which specifies:

+ + + + + + + +
+ +

1.

+
+ +

the index register number (0-7);

+
+
+ + + + + + +
+ +

2.

+
+ +

the index register type (address or data +register);

+
+ + + + + + +
+ +

3.

+
+ +

the size of the index (only low order part or the +whole register)

+
+ + + + + + +
+ +

4.

+
+ +

a scale factor. This is a number from 0 to 3 +which specifies how many bits the contents of the index +register is to be shifted to the left before being used as +an index;

+
+ + + + + + +
+ +

5.

+
+ +

a flag that specifies whether the base (address) +register is to be added or to be suppressed;

+
+ + + + + + +
+ +

6.

+
+ +

a flag that specifies whether to add or suppress +the index operand;

+
+ + + + + + +
+ +

7.

+
+ +

two bits that specify the size of the base +displacement (null, word or long);

+
+ + + + + + +
+ +

8.

+
+ +

three bits that in combination with (6) above +specify which of the three addressing modes (described +below) to use and, if used, the size of the outer +displacement (null, word or long).

+
+ + + + + + +
+ +

N.B.

+
+ +

All modes mentioned above for the MC68000 that +use an index register may have this register scaled (only +when using the MC68020).

+
+ +

The three extra addressing modes are:

+ +

2.2.2.1. Address Register Indirect With Index (Base Displacement)

+ + + + + + + +
+ +

Syntax:

+
+ +

(bd,A n ,X +n .size*scale) (MC68020 +only)

+
+
+ +

The address of the operand is the sum of the +contents of the address register, the scaled contents of the +possibly scaled index register and the possibly sign +extended base displacement. When the program counter is used +instead of the address register, the value in the program +counter is the address of the full format extension word. +This mode requires one or two more extension words when the +size of the base displacement is word or long +respectively.

+ +

Note that without the index operand, this mode is +an extension of the Address Register Indirect With +Displacement mode; when using the MC68020 one is no +longer limited to a 16-bit displacement. Also note that with +the index operand added, this mode is an extension of the +Address Register Indirect With Index mode; when using +the MC68020 one is no longer limited to an 8-bit +displacement.

+ +

2.2.2.2. Memory Indirect Post-Indexed

+ + + + + + + +
+ +

Syntax:

+
+ +

([bd,A n ],X +n .size*scale,od) (MC68020 +only)

+
+
+ +

This mode may use an outer displacement. First an +intermediate memory address is calculated by adding the +contents of the address register and the possibly sign +extended base displacement. This address is used for in +indirect memory access of a long word, followed by adding +the index operand (scaled and possibly signed extended). +Finally the outer displacement is added to yield the address +of the operand. When the program counter is used, the value +in the program counter is the address of the full format +extension word.

+ +

2.2.2.3. Memory Indirect Pre-Indexed

+ + + + + + + +
+ +

Syntax:

+
+ +

([bd,A n ,X +n .size*scale],od) (MC68020 +only)

+
+
+ +

This mode may use an outer displacement. First an +intermediate memory address is calculated by adding the +contents of the address register, the scaled contents of the +possibly sign extended index register and the possibly sign +extended base displacement. This address is used for an +indirect memory access of a long word, followed by adding +the outer displacement to yield the address of the operand. +When the program counter is used, the value in the program +counter is the address of the full format extension +word.

+ +

2.2.3. Addressing modes used in the table

+ +

Not all addressing modes mentioned above are used +in code generation. It is clear that none of the modes that +use the program counter PC can be used, since at code +generation time nothing is known about the value in PC. Also +some of the possibilities of the three MC68020 addressing +modes are not used; e.g. it is possible to use a Data +Register Indirect mode, which actually is the Address +Register Indirect With Index mode, with the address +register and the displacement left out. However such a mode +would require two extra bytes for the full format extension +word, and it would also be much slower than using Address +Register Indirect. For this kind of reasons several +possible addressing modes are not used in the generation of +code. In the table address registers are only used for +holding addresses, and for index registers only data +registers are used.

+ +

3. The M68000 and MC68020 back end table

+ +

The table itself has to be run through the C +preprocessor before it can be used to generate the back end +(called code generator or cg for short). When +no flags are given to the preprocessor an MC68020 code +generator is produced; for the MC68000 code generator one +has to run the table through the preprocessor using the +-Dm68k4 flag.

+ +

The table is designed as described in [4]. For +the overall design of a back end table one is referred to +this document. This section only deals with problems +encountered in writing the table and other things worth +noting.

+ +

3.1. Constant Definitions

+ +

Wordsize and pointersize (EM_WSIZE and EM_PSIZE +respectively) are defined as four (bytes). EM_BSIZE, the +hole between AB (the parameter base) and LB (the local +base), is eight bytes: only the return address and the +localbase are saved.

+ +

3.2. Properties

+ +

Since Hans van Staveren in his document [4] +clearly states that cg execution time is negatively +influenced by the number of properties, only four different +properties have been defined. Besides, since the registers +really are multifunctional, these four are really all that +are needed.

+ +

3.3. Registers

+ +

The table uses register variables: D +3 - D +7 are used as general register +variables, and address registers A +2 - A +5 are used as pointer register +variables. A 6 is reserved for +the localbase.

+ +

3.4. Tokens

+ +

At first glance one might wonder about the amount +of tokens, especially for the MC68020, considering the small +amount of different addressing modes. However, the last +three addressing modes mentioned for the MC68020 may omit +any of the addends, and this leads to a large amount of +different tokens. I did consider the possibility of +enlarging the number of tokens and sets even further, +because there might be assemblers that don’t handle +displacements of zero optimally (they might generate a 2 +byte extension word holding zero). The small profit in bytes +in the generated code however does not justify the increase +in size of the token section, the set section and the +patterns section, so this idea was not developed any +further.

+ +

The timing cost of the tokens may be incorrect +for some MC68000 tokens. This is because the MC68000 uses a +16-bit data bus which causes the need of two separate memory +accesses for getting 32-bit operands.

+ +

3.4.1. Token names

+ +

The amount of tokens and the limited capability +of the authors imagination might have caused the names of +some tokens not to be very clarifying. Some information +about the names may be in place here.

+ +

Whenever part of a token name is in capitals that +part is memory indirected (i.e. in square brackets). In +token names OFF and off mean an offsetted +address register, so an address register with a displacement +(either base displacement or outer displacement). IND, +ind and index stand for indexed, or index +register. ABS and abs stand for absolute, +which actually is just a displacement (base or outer). These +‘rules’ only apply to names of tokens that +represent actual operands. There are also tokens that +represent addresses of operands. These (with a few +exceptions) contain regA, regX and con as +parts of there names, which stand for address register, +index register and displacement (always base displacement) +respectively. If the address to which the token refers uses +memory indirection, that part of the name comes first (in +small letters), followed by an underscore. The memory +indirection part follows the ‘rules’ for operand +token names.

+ +

Of course there are exceptions to these +‘rules’ but in those cases the names are self +explanatory.

+ +

Two special cases: ext_regX is the name of +the token that represents the address of an absolute indexed +operand, syntax (bd,X n +.size*scale); regX does not represent any real mode, +but is used with EM array instructions and pointer +arithmetic.

+ +

3.4.2. Special tokens for the MC68000

+ +

The MC68000 requires two extra tokens, which are +called t_regAcon and t_regAregXcon. They are +necessary because regAcon can only have a 16-bit +displacement on the MC68000, and regAregXcon uses +only 8 bits for its displacement. To prevent these +addressing modes to be used with displacements that are too +large, the extra tokens are needed. Whenever the +displacements become too large and they need to be used in +the generation of assembly code, these tokens are +transformed into other tokens. To prevent the table from +becoming too messy I defined t_regAcon and +t_regAregXcon to be identical to regAcon and +regAregXcon respectively for the MC68020.

+ +

3.5. Sets

+ +

Most set names used in the table are self +explanatory, especially to the reader who is familiar with +the four addressing categories as mentioned in [5]: data, +memory, alterable and control. In the sets +definition part some sets are defined that are not used +elsewhere in the table, but are only used to be part of the +definition of some other set. This keeps the set definition +part from getting too unreadable.

+ +

The sets called imm_cmp consist of all +tokens that can be used to compare with a +constant.

+ +

3.6. Instructions

+ +

Only the instructions that are used in code +generation are listed here. The first few instructions are +meant especially for the use with register variables. The +operand LOCAL used here refers to a register variable. The +reader may not conclude that these operations are also +allowed on ordinary locals. The space and timing cost of +these instructions have been adapted, but the use of the +word LOCAL for register variables causes these cost to be +inaccurate anyway.

+ +

The killreg instruction, which generates a +comment in the assembly language output and which is meant +to let cg know that the data register operand has its +contents destroyed, needs some explaining but this +explanation is better in place in the discussion of groups 3 +and 4 of the section about patterns.

+ +

The timing cost of the instructions are probably +not very accurate for the MC68020 because the MC68020 uses +an instruction cache and prefetch. The cost used in the +table are the ‘worst case cost’ as mentioned in +section 9 of [5].

+ +

3.7. Moves

+ +

These are all pretty straightforward, except +perhaps when t_regAcon and t_regAregXcon are +used. In these cases the size of the displacement has to be +checked before moving. This also applies to the stacking +rules and the coercions.

+ +

3.8. Tests

+ +

These three tests (one fore each operation size) +could not be more straightforward than they are +now.

+ +

3.9. Stackingrules

+ +

The only peculiar stackingrule is the one for +regX. This token is only used with EM array +instructions and with pointer arithmetic. Whenever it is put +on the fake stack, some EM instructions are left in the +instruction stream to remove this token. Consequently it +should never have to be stacked. However the code +generator generator (or cgg for short) complained +about not having a stackingrule for this token, so it had to +be added nevertheless.

+ +

3.10. Coercions

+ +

These are all straightforward. There are no +splitting coercions since the fake stack never contains any +tokens that can be split. There are only two unstacking +coercions. The rest are all transforming coercions. Almost +all coercions transform tokens into either a data register +or an address register, except in the MC68000 part of the +table the t_regAcon and t_regAregXcon tokens +are transformed into real regAcon and +regAregXcon tokens with displacements that are +properly sized.

+ +

3.11. Patterns

+ +

This is the largest part of the table. It is +subdivided into 17 groups. We will take a closer look at the +more interesting groups.

+ +

3.11.1. Group 0: rules for register variables

+ +

This group makes sure that EM instructions using +register variables are handled efficiently. This group +includes: local loads and stores; arithmetic, shifts and +logical operations on locals and indirect locals and pointer +handling, where C expressions like *cp++ are handled. +For such an expression there are several EM instruction +sequences the front end might generate. For an integer +pointer e.g.:

+
     lol lol adp stl loi $1==$2 && $1==$4 && $3==4 && $5==4
+
+ +

or

+
     lol loi lol adp stl $1==$3 && $3==$5 && $2==4 && $5==4
+
+ +

or perhaps even

+
     lil lol adp stl $1==$2 && $2==$4 && $3==4
+
+ +

Each of these is included, since which one is +generated is is up to the front end. If the front end is +consistent this will mean that some of these patterns will +never be used in code generation. This might seem a waist, +but anyone who thinks that will certainly change his mind +when his new C front end generates a different EM +instruction sequence.

+ +

3.11.2. Groups 1 and 2: load and store instructions

+ +

In these groups lof and stf , +loi and sti , ldf and sdf are +the important instructions. These are the large parts in +this group, especially the loi and sti +instructions, because they come in three basic sizes (byte, +word and long). Note that with these instructions in the +MC68000 part the exact is omitted in front of +regAcon and regAregXcon. This makes sure that +t_regAcon and t_regAregXcon are transformed +into proper tokens before they are used as +addresses.

+ +

Also note that the regAregXcon token is +completely left out from the lof, stf, +ldf and sdf instruction handling. This is +because the sum of the token displacement and the offset +provided in the instruction cannot be checked and is likely +to exceed 8 bits. Unfortunately cgg does not allow +the inspection of subregisters of tokens that are on the +fake stack. This same problem might also occur with the +regAcon token, but this is less likely because it +uses 16-bit displacements. Besides if it would have been +left out the lof, stf, ldf and +sdf instructions would have been handled considerably +less efficient.

+ +

3.11.3. Groups 3 and 4: integer and unsigned arithmetic

+ +

EM instruction sbi also works with address +registers, because the cmp instruction in group 12 is +replaced by sbi 4.

+ +

For the MC68000 mli, mlu, +dvi, dvu, rmi and rmu are +handled by library routines. This is because the MC68000 has +only 16-bit multiplications and divisions.

+ +

The MC68020 does have 32-bit multiplications and +divisions, but for the rmi and rmu EM +instructions peculiar things happen anyway: they generate +the killreg instruction. This is necessary because +the data register that first held the dividend now holds the +quotient; the original contents are destroyed without +cg knowing about it (the destruction of the two +registers that make up the DREG_pair token +couldn’t be noted in the instructions part of the +table). To let cg know that these contents are +destroyed, we have to use this ‘pseudo +instruction’ from lack of a better +solution.

+ +

3.11.4. Group 5: floating point arithmetic

+ +

Since floating point arithmetic is not +implemented traps will be generated here.

+ +

3.11.5. Group 6: pointer arithmetic

+ +

This also is a very important group, along with +groups 1 and 2. The MC68020 has many different addressing +modes and if possible they should be used in the generation +of assembly language.

+ +

The regX token is generated here too. It +is meant to make efficient use of the MC68020 possibility of +scaling index registers.

+ +

Note that I would have liked one extra pattern to +handle C-statements like

+
     pointer += expr ? constant1 : constant2;
+
+ +

efficiently. This pattern would have looked +like:

+
     pat ads
+     with const
+     leaving adp %1.num
+
+ +

but when cg is coming to the EM +replacement part, the constant has already been removed from +the fake stack, causing %1.num to have a wrong +value.

+ +

3.11.6. Group 9: logical instructions

+ +

The EM instructions and, ior and +xor are so much alike that procedures can be used +here, except for the xor $1==4 instruction, because +the MC68000 eor instruction does not allow as many +kinds of operands as and and or.

+ +

3.11.7. Group 11: arrays

+ +

This group also tries to make efficient use of +the available addressing modes, but it leaves the actual +work to group 6 mentioned above.

+ +

The regX token is also generated here. In +this group this token is very useful for handling array +instructions for arrays with one, two, four or eight byte +elements; the array index goes into the index register, +which can then be scaled appropriately. An offset is used +when the first array element has an index other than +zero.

+ +

I would have liked some extra patterns here too +but they won’t work for the same reasons as explained +in the discussion of group 6.

+ +

3.11.8. Group 14: procedure calls instructions

+ +

The function return area consists of registers D +0 and D +1 .

+ +

3.11.9. Group 15: miscellaneous instructions

+ +

In many cases here library routines are called. +These will be discussed later.

+ +

Two special EM instructions are included here: +dch, and lpb. I don’t know when they are +generated by a front end, but these instructions were also +in the back end table for the PDP. In the PDP table these +instructions were replaced by loi 4 and adp 8 +respectively. I included them both, since they +couldn’t do any harm.

+ +

3.11.10. Extra group: optimalization

+ +

This group is handling EM patterns with more than +one instruction. This group is not absolutely necessary but +it makes the generation of code more efficient. Among the +things that are handled here are: arithmetic and logical +operations on locals, externals and indirect locals; +shifting of locals, externals and indirect locals by one; +some pointer arithmetic; tests in combination with logical +and’s and or’s or with branches. Finally there +are sixteen patterns about divisions that could be handled +more efficiently by right shifts and which I think should be +handled by the peephole optimizer (since it also handles the +same patterns with multiplication).

+ +

4. The library routines

+ +

The table is supplied with two separate +libraries: one for the MC68000 and one for the MC68020. The +MC68000 uses a couple more routines than the MC68020 because +it doesn’t have 32-bit division and +multiplication.

+ +

The routines that need to pop their operands +first store their return address. Routines that need other +register besides D 0 -D +2 and A +0 -A +1 first store the original +contents of those registers. D +0 -D +2 and A +0 -A +1 do not have to be saved +because if they contain anything useful, their contents are +pushed on the stack before the routine is +called.

+ +

The .trp routine just prints a message +stating the trap number and exits (except of course when +that particular trap number is masked). Usually higher level +languages use their own trap handling routines.

+ +

The .mon routine doesn’t do anything +useful at all. It just prints a message stating that the +specified system call is not implemented and then exits. +Front ends usually generate calls to special routines rather +than the EM instruction mon. These routines have to +be supplied in another library. They may be system dependent +(e.g. the MC68000 machine this table was tested on first +moves the parameters to registers, then moves the system +call number to D 0 and then +executes trap #0, whereas the MC68020 machine this +table was tested on required the parameters to be on the +stack rather than in registers). Therefor this library is +not discussed here.

+ +

The .printf routine is included for EM +diagnostic messages. It can print strings using %s, 16-bit +decimal numbers using %d and 32-bit hexadecimal numbers +using %x.

+ +

The .strhp routine stores a new EM heap +pointer, and sometimes it needs to allocate more heap space. +This is done by calling the system call routine _brk. +Chunks of 1K bytes are allocated, but this can easily be +changed into larger or smaller chunks.

+ +

The MC68000 library also contains a routine to +handle the EM instruction rck. The MC68020 has an +instruction cmp2 that is specially meant for range +checking so the MC68020 library can do without that +routine.

+ +

The MC68000 library has two multiplication +routines, one for unsigned and the other for signed +multiplication. The one for signed multiplication first +tests the sizes of the operands, to see if it can perform +the 16 bit machine instruction instead of the routine. If +not, it considers it’s two operands being two digit +numbers in a 65535-radix system. It uses the 16-bit unsigned +multiply instruction mulu three times (it does not +calculate the high order result), and adds up the +intermediary results the proper way. The signed +multiplication routine calculates the sign of the result, +calculates the result as it it were an unsigned +multiplication, and adjusts the sign of the result. Here +testing the operands for there sizes would be less simple, +because the operands are signeds; so that is not done +here.

+ +

The MC68000 library also has two division +routines. The routine for unsigned division uses the popular +algorithm, where the divisor is shifted out and the quotient +shifted in. The signed division routine calculates the sign +of both the quotient and the remainder, calls the unsigned +division routine and adjusts the signs for the quotient and +the remainder.

+ +

The .nop routine is included for testing +purposes. This routine prints the line number and the value +in the stack pointer. Calls to this routine are generated by +the EM instruction nop, which is ordinarily left out +by the peephole optimizer.

+ +

5. Testing the table

+ +

There are special test programs available for +testing back end tables. First there is the EM test set, +which tests most EM instructions, making good use of the +nop instruction. Then there are the Pascal and C test +programs. The Pascal test programs report errors, which +makes it relatively easy to find out what was wrong in the +table. The C test programs just generate some output, which +then has to be compared to the expected output. Differences +are not only caused by errors but also e.g. by the use of +four byte integers and unsigneds (which this table does), +the use of signed characters instead of unsigned characters +(the C front end I used generated signed characters) or +because the back end does not support floating point. These +differences have to be ‘filtered out’ to reveal +the differences caused by actual errors in the back end +table. These errors then have to be found out by examining +the assembly code, for no proper diagnostic messages are +generated.

+ +

After these three basic tests there still remain +a number of patterns that haven’t been tested yet. +Fortunately cgg offers the possibility of generating +a special cg that can print a list of patterns that +haven’t been used in code generation yet. For these +patterns the table writer has to write his own test +programs. This may complicate things a bit because errors +may now be caused by errors in the back end table as well as +errors in the test programs. The latter happened quite often +to me, because I found EM to be an uncomfortable programming +language (of course it isn’t meant to be a programming +language, but an intermediary language).

+ +

There still remain a couple of patterns in this +table that haven’t been tested yet. However these +patterns all have very similar cases that have been tested +(an example of this is mentioned in the section on group 0 +of the patterns section of the table). Some patterns have to +do with floating point numbers. These EM instructions all +generate traps, so they didn’t all have to be tested. +The two instructions dch and lpb haven’t +been tested in this table, but since they only use EM +replacement and they have been tested in the PDP back end +table, these two should be all right.

+ +

6. Performance of the back end

+ +

To test the performance of the back end I +gathered a couple of C programs and compiled them on the +machines I used to test the back ends on. I compiled them +using the C compiler that was available there and I also +compiled them using the back end. I then compared the sizes +of the text segments in the object files. The final results +of these comparisons are in fig. 1 and fig. 2.

+ + +

+ +

fig 1.

+ + +

+ +

fig 2.

+ +

Fig. 1 also includes results of an old m68k4 back +end (a back end for the MC68000 with four byte word and +pointersize). The table for this back end was given to me as +an example, but I thought it didn’t make good use of +the MC68000’s addressing capabilities, it hardly did +any optimalization, and it sometimes even generated code +that the assembler would not swallow. This was sufficient +reason for me to write a completely new table.

+ +

The results from the table may not be taken too +seriously. The sizes measured are the sizes of the text +segments of the user programs, i.e. without the inclusion of +library routines. Of course these segments do contain calls +to these routines. Another thing is that the rom +segment may be included in the text segment (this is why the +results for the MC68000 for compute.c look so +bad).

+ +

Some other things must be said about these +results. The quality of EM code generated by the C front end +is certainly not optimal. The front end uses temporary +locals (extra locals that are used to evaluate expressions) +far too quickly: for a simple C expression like

+
     *(pointer) += constant
+
+ +

where pointer is a register variable, the +C front end generates (for obscure reasons) a temporary +local that holds the contents of pointer. This way +the pattern for

+
     loc lil adi sil $2==$4 && $3==4
+
+ +

for register variables is not used and longer, +less efficient code is generated. But even in spite of this, +the back end seems to generate rather compact +code.

+ +

7. Some timing results

+ +

In order to measure the performance of the code +generated by the back end some timing tests were done. The +reason I chose these particular tests is that they were also +done for many other back ends; the reader can compare the +results if he so wishes (of course comparing the results +only show a global difference in speed of the various +machines; it doesn’t show whether some back end +generates relatively better code than another).

+ +

On the MC68000 machine the statements were +executed one million times. On the MC68020 machine the +statements had to be executed four million times because +this machine was so fast that timing results would be very +unreliable if the statements were executed only one million +times.

+ +

For testing I used the following C test +program:

+
     main()
+     {
+         int i, j, ...
+         ...
+         for (i=0; i<1000; i++)
+             for (j=0; j<1000; j++)
+
+ + + + + +

STATEMENT;

+
+ +

}

+ +

where STATEMENT is any of the test +statements or the empty statement. For the MC68020 tests I +used 2000 instead of 1000. The results of the test with the +empty statement were used to calculate the execution times +of the other test statements.

+ +

Figures 3 and 4 show many results. For each +machine actually two tests were done: one with register +variables, and the other without them. I noticed that the +original C compilers on both machines did not generate the +use of register variables, unless specifically requested. +The back end uses register variables when and where they are +profitable, even if the user did not ask for +them.

+ + +

+ +

Fig. 3

+ + +

+ +

Fig. 4

+ +

The reader may have noticed that on both machines +the back end seems to generate considerably slower code for +tests where a ‘condition’ is used in the rhs of +an assignment statement. This is in fact not true: it is the +front end that generates bad code. Two examples: for the C +statement

+
     int1 = (int2 < 0);
+
+ +

the front end generates the following code for +the rhs (I used arbitrary labels):

+
     lol -16
+     zlt *10
+     loc 0
+     bra *11
+     10
+     loc 1
+     11
+
+ +

while in this case (to my opinion) it should have +generated

+
     lol -16
+     tlt
+
+ +

which is much shorter. Another example: for the C +statement

+
     int1 = (int2 < 3);
+
+ +

the front end generates for the rhs

+
     lol -16
+     loc 3
+     blt *10
+     loc 0
+     bra *11
+     10
+     loc 1
+     11
+
+ +

while a much better translation would +be

+
     lol -16
+     loc 3
+     cmi 4
+     tlt
+
+ +

Another statement that the back end seems to +generate slower code for is the C switch statement. This is +true, but it is also caused by the way these things are done +in EM. EM uses the csa or csb instruction, and +for these two I had to use library routines. On larger +switch statements the .csa routine will perform +relatively better.

+ +

The back end generates considerably faster code +for procedure and function calls, especially in the MC68020 +case, and also for the C statement

+
     int1 = int1 + 1;
+
+ +

The original C compilers use the same method for +this instruction as for

+
     int1 = int2 - 1;
+
+ +

they perform the addition in a scratch register, +and then store the result. For the former C statement this +is not necessary, because the MC68000 and MC68020 have an +instruction that can add constants to almost anything (in +this case: to locals). The MC68000 and MC68020 back ends do +use this instruction.

+ +

8. Some final remarks

+ +

As mentioned a few times before, the C front end +compiler does not generate optimal code and as a consequence +of this the back end does not always generate optimal code. +This is especially the case with temporary locals, which the +front end generates much too quickly, and also with +conditional expressions that are used in the rhs of an +assignment statement (fortunately this is not needed so +much).

+ +

If cgg would have been able to accept +operands separated by any character instead of just by +commas (in the instruction definitions part), I +wouldn’t have had the need of the killreg +pseudo instruction. It would also be handy to have +cgg accept all normal C operators. At the moment +cgg does not accept binary ands, ors and exors, even +though in [4] it is stated that cgg does accept all +normal C operators. As it happens I did not need the binary +operators, but at some time in developing the table I +thought I did.

+ +

I would also like cg to do more with the +condition codes information that is supplied with each +instruction in the instruction definitions section of the +table. Sometimes cg generates test instructions which +actually were not necessary. This of course causes the +generated programs to be slightly larger and slightly +slower.

+ +

In spite of the few minor shortcomings mentioned +above I found cgg a very comfortable tool to +use.

+ +

References

+ + + + + + +
+ +

[1]

+
+ +

T. B. Steel Jr., UNCOL: The myth and the +Fact, in Ann. Rev. Auto. Prog., R. Goodman (ed.), Vol. 2 +(1969), pp 325 - 344

+
+ + + + + + +
+ +

[2]

+
+ +

A. S. Tanenbaum, H. van Staveren, E. G. Keizer, +J. W. Stevenson, A practical toolkit for making portable +compilers, Informatica Report 74, Vrije Universiteit, +Amsterdam, 1983

+
+ + + + + + +
+ +

[3]

+
+ +

A. S. Tanenbaum, H. van Staveren, E. G. Keizer, +J. W. Stevenson, Description of an experimental machine +architecture for use with block structured languages, +Informatica Report 81, Vrije Universiteit, Amsterdam, +1983

+
+ + + + + + +
+ +

[4]

+
+ +

H. van Staveren The table driven code +generator from the Amsterdam Compiler Kit, Second Revised +Edition, Vrije Universiteit, Amsterdam

+
+ + + + + + +
+ +

[5]

+
+ +

MC68020 32-bit Microprocessor User’s +Manual, Second Edition, Motorola Inc., 1985, +1984

+
+ + + + + + +
+ +

[6]

+
+ +

MC68000 16-bit Microprocessor User’s +Manual, Preliminary, Motorola Inc., 1979

+
+
+ + diff --git a/src/olddocs/m68020.pdf b/src/olddocs/m68020.pdf new file mode 100644 index 0000000000000000000000000000000000000000..428f911b116c0e3a7a2020f198092094d53265a3 GIT binary patch literal 76403 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 Oyn-NQn&;c|K79eiu<-N% literal 0 HcmV?d00001 diff --git a/src/olddocs/ncg.html b/src/olddocs/ncg.html new file mode 100644 index 000000000..017b62e07 --- /dev/null +++ b/src/olddocs/ncg.html @@ -0,0 +1,6654 @@ + + + + + + +The table driven code generator + + + +

The table driven code generator

+1. Introduction
+2. What has changed since version 1 ?
+3. Global overview of the workings of the code generator.
+4. Register variables
+5. Description of the machine table
+5.1. Constant section
+5.2. Property definition
+5.3. Register definition
+5.4. Stack token definition
+5.5. Sets
+5.6. Instruction definitions
+5.7. Expressions
+5.8. Token descriptions
+5.9. Code rules
+5.9.1. The EM pattern
+5.9.2. The stack pattern
+5.9.3. The kills part
+5.9.4. The allocates part
+5.9.5. The generates part
+5.9.6. Stack replacement
+5.9.7. EM replacement
+5.9.8. Examples
+5.10. Code rules using procedures
+5.11. Move definitions
+5.12. Test definitions
+5.13. Some explanation about the rules behind coercions
+5.14. Stack definitions
+5.15. Coercions
+6. The files mach.h and mach.c
+6.1. Types in the code generator
+6.2. Global variables to work with
+6.3. Macros in mach.h
+6.3.1. Example mach.h for the PDP-11
+6.4. Functions in mach.c
+6.4.1. Example mach.c for the PDP-11
+7. Internal workings of the code generator.
+7.1. Description of tables.c and tables.h contents
+7.1.1. Tables.c
+7.1.2. tables.h
+7.2. Other important data structures
+7.3. A tour through the sources
+7.3.1. codegen.c
+7.3.1.1. DO_DLINE
+7.3.1.2. DO_NEXTEM
+7.3.1.3. DO_COERC
+7.3.1.4. DO_XMATCH
+7.3.1.5. DO_MATCH
+7.3.1.6. DO_REMOVE
+7.3.1.7. DO_DEALLOCATE
+7.3.1.8. DO_REALLOCATE
+7.3.1.9. DO_ALLOCATE
+7.3.1.10. DO_INSTR
+7.3.1.11. DO_MOVE
+7.3.1.12. DO_TEST
+7.3.1.13. DO_ERASE
+7.3.1.14. DO_TOKREPLACE
+7.3.1.15. DO_EMREPLACE
+7.3.1.16. DO_COST
+7.3.1.17. DO_RETURN
+7.3.1.18. DO_LABDEF
+7.3.2. compute.c
+7.3.3. equiv.c
+7.3.4. fillem.c
+7.3.5. gencode.c
+7.3.6. glosym.c
+7.3.7. label.c
+7.3.8. main.c
+7.3.9. move.c
+7.3.10. nextem.c
+7.3.11. reg.c
+7.3.12. salloc.c
+7.3.13. state.c
+7.3.14. subr.c
+7.3.14.1. match
+7.3.14.2. instance,cinstance
+7.3.14.3. eqtoken
+7.3.14.4. distance
+7.3.14.5. split
+7.3.14.6. docoerc
+7.3.14.7. stackupto
+7.3.14.8. findcoerc
+7.3.15. var.c
+ +
+ +

from the
+Amsterdam Compiler Kit
+Second Revised Edition

+ +

ABSTRACT

+ +

Hans van +Staveren
+Dept. of Mathematics and Computer Science
+Vrije Universiteit
+Amsterdam, The Netherlands

+ +

The Amsterdam Compiler Kit is a collection of +tools designed to help automate the process of compiler +building. Part of it is a table driven code generator, +called cg, and a program to check and translate +machine description tables called cgg. This document +provides a description of the internal workings of +cg, and a description of syntax and semantics of the +driving table. This is required reading for those wishing to +write a new table.

+ +

1. Introduction

+ +

Part of the Amsterdam Compiler Kit is a code +generator system consisting of a code generator generator +(cgg for short) and some machine independent C code. +Cgg reads a machine description table and creates two +files, tables.h and tables.c. These are then used together +with other C code to produce a code generator for the +machine at hand.

+ +

This in turn reads compact EM code and produces +assembly code. The remainder of this document will first +broadly describe the working of the code generator, then the +machine table will be described after which some light is +shed onto the internal workings of the code +generator.

+ +

The reader is assumed to have at least a vague +notion about the semantics of the intermediary EM code. +Someone wishing to write a table for a new machine should be +thoroughly acquainted with EM code and the assembly code of +the machine at hand.

+ +

2. What has changed since version 1 ?

+ +

This section can be skipped by anyone not +familiar with the first version. It is not needed to +understand the current version.

+ +

This paper describes the second version of the +code generator system. Although the code generator itself is +for the main part unchanged, the table format has been +drastically redesigned and the opportunities to make faulty +tables are reduced. The format is now aesthaticly more +pleasing (according to me that is), mainly because +the previous version was designed for one line code rules, +which did not work out that way.

+ +

The ‘SCRATCH’ property is now +automatically generated by cgg, erase and +setcc calls and their ilk are now no longer needed +(read: can no longer be forgotten) and all this because the +table now knows what the machine instructions look +like and what arguments they destroy.

+ +

Checks are now made for register types, so it is +no longer possible to generate a ‘regind2’ token +with a floating point register as a base. In general, if the +instructions of the machine are correctly defined, it is no +longer possible to generate code that does not assemble, +which of course does not mean that it is not possible to +generate assembly code that does not do what was +intended!

+ +

Checks are made now for missing moves, tests, +coercions, etc. There is a form of procedure call now to +reduce table size: it is no longer necessary to write the +code for conditional instructions six times.

+ +

The inreg() pseudo-function returns other +results!!

+ +

3. Global overview of the workings of the code generator.

+ +

The code generator or cg tries to generate +good code by simulating the stack of the compiled program +and delaying emission of code as long as possible. It also +keeps track of register contents, which enables it to +eliminate redundant moves, and tries to eliminate redundant +tests by keeping information about condition code status, if +applicable for the machine.

+ +

Cg maintains a ‘fake stack’ +containing ‘tokens’ that are built by executing +the pseudo code contained in the code rules given by the +table writer. One can think of the fake stack as a logical +extension of the real stack the compiled program will have +when run. Alternatively one can think of the real stack as +an infinite extension at the bottom of the fake stack. Both +ways, the concatenation of the real stack and the fake stack +will be the stack as it would have been on a real EM machine +(see figure).

+ + +

+ +

During code generation tokens will be kept on the +fake stack as long as possible but when they are moved to +the real stack, by generating code for the push, all tokens +above†

+ + +

+ +

the pushed tokens will be pushed also, so the +fake stack will not contain holes.

+ +

The information about the machine that cg +needs has to be given in a machine description table, with +as a major part a list of code rules telling cg what +to do when certain EM-instructions occur with certain tokens +on the fake stack. Not all possible fake stack possibilities +have to be given of course, there is a possibility for +providing rewriting rules, or coercions as they are +called in this document.

+ +

The main loop of cg is:

+ + + + + + +
+ +

1)

+
+ +

find a pattern of EM instructions starting at the +current one to generate code for. This pattern will usually +be of length one but longer patterns can be used. Process +any pseudo-instructions found.

+
+ + + + + + +
+ +

2)

+
+ +

Select one of the possibly many stack patterns +that go with this EM pattern on the basis of heuristics, +look ahead or both. The cost fields provided in the token +definitions and instruction definitions are used to compute +costs during look ahead.

+
+ + + + + + +
+ +

3)

+
+ +

Force the current fake stack contents to match +the pattern. This may involve copying tokens to registers, +making dummy transformations, e.g. to transform a +‘local’ into an ‘indexed from +register’ or might even cause the move of the complete +fake stack contents to the real stack and then back into +registers if no suitable coercions were provided by the +table writer.

+
+ + + + + + +
+ +

4)

+
+ +

Execute the pseudocode associated with the code +rule just selected, this may cause registers to be +allocated, code to be emitted etc..

+
+ + + + + + +
+ +

5)

+
+ +

Put tokens onto the fake stack to reflect the +result of the operation.

+
+ + + + + + +
+ +

6)

+
+ +

Insert some EM instructions into the stream; this +is possible but not common.

+
+ + + + + + +
+ +

7)

+
+ +

Account for the cost. The cost is kept in a +(space, time) vector and look ahead decisions are based on a +linear combination of these. The code generator calls on +itself recursively during look ahead, and the recursive +incarnations return the costs they made. The costs the +top-level code generator makes is of course +irrelevant.

+
+ +

The table that drives cg is not read in +every time, but instead is used at compile time of cg +to set parameters and to load pseudocode tables. A program +called cgg reads the table and produces large lists +of numbers that are compiled together with machine +independent code to produce a code generator for the machine +at hand.

+ +

Part of the information needed is not easily +expressed in this table format and must be supplied in two +separate files, mach.h and mach.c. Their contents are +described later in this document.

+ +

4. Register variables

+ +

If the machine has more than enough registers to +generate code with, it is possible to reserve some of them +for use as register variables. If it has not, this section +may be skipped and any references to register variables in +the rest of this document may be ignored.

+ +

The front ends generate messages to the back ends +telling them which local variables could go into registers. +The information given is the offset of the local, its size +and type and a scoring number, roughly the number of times +it occurs.

+ +

The decision which variable to put in which +register is taken by the machine independent part of +cg with the help of a scoring function provided by +the table writer in mach.c. The types of variables known +are

+ + + + + + +
+ +

reg_any

+
+ +

Just a variable of some integer type. Nothing +special known about it.

+
+ + + + + + + +
+ +

reg_float

+
+ +

A floating point variable.

+
+
+ + + + + + + +
+ +

reg_loop

+
+ +

A loop control variable.

+
+
+ + + + + + +
+ +

reg_pointer

+
+ +

A pointer variable. Usually they are better +candidates to put in registers.

+
+ +

If register variables are used, more functions +must be supplied in mach.c. These functions are explained +later.

+ +

5. Description of the machine table

+ +

The machine description table consists of the +concatenation of the following sections:

+ + + + + + + +
+ +

1)

+
+ +

Constant definitions

+
+
+ + + + + + + +
+ +

2)

+
+ +

Property definitions

+
+
+ + + + + + + +
+ +

3)

+
+ +

Register definitions

+
+
+ + + + + + + +
+ +

4)

+
+ +

Token definitions

+
+
+ + + + + + + +
+ +

5)

+
+ +

Set definitions

+
+
+ + + + + + + +
+ +

6)

+
+ +

Instruction definitions

+
+
+ + + + + + + +
+ +

7)

+
+ +

Move definitions

+
+
+ + + + + + + +
+ +

8)

+
+ +

Test definitions

+
+
+ + + + + + + +
+ +

9)

+
+ +

Stack definitions

+
+
+ + + + + + + +
+ +

10)

+
+ +

Coercions

+
+
+ + + + + + + +
+ +

11)

+
+ +

Code rules

+
+
+ +

This is the order in the table but the +descriptions in this document will use a slightly different +order. All sections except the first start with an uppercase +header word. Examples may be given in early stages that use +knowledge that is explained in a later stage. If something +is not clear the first time, please read on. All will clear +up in a couple of pages.

+ +

Input is in free format, white space and newlines +may be used at will to improve legibility. Identifiers used +in the table have the same syntax as C identifiers, upper +and lower case considered different, all characters +significant. Here is a list of reserved words; all of these +are unavailable as identifiers.

+ + +

+ +

C style comments are accepted.

+
     /* this is a comment */
+
+ +

If the standard constant facility is not enough +the C-preprocessor can be used to enhance the table +format.

+ +

Integers in the table have the normal C-style +syntax. Decimal by default, octal when preceded by a 0 and +hexadecimal when preceded by 0x.

+ +

5.1. Constant section

+ +

In the first part of the table some constants can +be defined, most with the syntax

+
     NAME=value
+
+ +

value being an integer or string. Three constants +must be defined here:

+ + + + + + +
+ +

EM_WSIZE

+
+ +

Number of bytes in a machine word. This is the +number of bytes a loc instruction will put on the +stack.

+
+ + + + + + +
+ +

EM_PSIZE

+
+ +

Number of bytes in a pointer. This is the number +of bytes a lal instruction will put on the +stack.

+
+ + + + + + +
+ +

EM_BSIZE

+
+ +

Number of bytes in the hole between AB and LB. If +the calling sequence just saves PC and LB this size will be +twice the pointersize.

+
+ +

EM_WSIZE and EM_PSIZE are checked when a program +is compiled with the resulting code generator. EM_BSIZE is +used by cg to add to the offset of instructions +dealing with locals having positive offsets, i.e. +parameters.

+ +

Other constants can be defined here to be used as +mnemonics later in the table.

+ +

Optional is the definition of a printformat for +integers in the code file. This is given as

+
     FORMAT = string
+
+ +

The string must be a valid printf(III) format, +and defaults to "%ld". For example on the PDP-11 +one can use

+
     FORMAT= "0%lo"
+
+ +

to satisfy the old UNIX assembler that reads +octal unless followed by a period, and the ACK assembler +that follows C conventions.

+ +

Tables under control of source code control +systems like sccs or rcs can put their +id-string here, for example

+
     rcsid="$Header$"
+
+ +

These strings, like all strings in the table, +will eventually end up in the binary code generator +produced.

+ +

Optionally one can give the factors with which +the size and time parts of the cost vector have to be +multiplied to ensure they have the same order of magnitude. +This can be done as

+
     SIZEFACTOR = C3/C4
+
+
+     TIMEFACTOR = C1/C2
+
+ +

Above numbers must be read as rational numbers. +Defaults are 1/1 for both of them. These constants set the +default size/time tradeoff in the code generator, so if +TIMEFACTOR and SIZEFACTOR are both 1 the code generator will +choose at random between two code sequences where one has +cost (10,4) and the other has cost (8,6). See also the +description of the cost field below.

+ +

5.2. Property definition

+ +

This part of the table defines the list of +properties that can be used to differentiate between +register classes. It consists of a list of user-defined +identifiers optionally followed by the size of the property +in parentheses, default EM_WSIZE. Example for the +PDP-11:

+ + +

+ +

Registers are allocated by asking for a property, +so if for some reason in later parts of the table one +particular register must be allocated it has to have a +unique property.

+ +

5.3. Register definition

+ +

The next part of the tables describes the various +registers of the machine and defines identifiers to be used +in later parts of the tables. Syntax:

+
     <register definitions> : REGISTERS <list of definitions>
+     <definition> : <registerlist> ’:’ <propertylist> <optional regvar> ’.’
+     <register> : ident [ ’(’ string ’)’ ] [ ’=’ ident [ ’+’ ident ] ]
+
+ +

Example for the PDP-11:

+ + +

+ +

The names in the left hand lists are names of +registers as used in the table. They can optionally be +followed by a string in parentheses, their name as far as +the assembler is concerned. The default assembler name is +the same as the table name. A name can also be followed +by

+
     = othername
+
+ +

or

+
     = othername + othername
+
+ +

which says that the register is composed of the +parts after the ’=’ sign. The identifiers at the +right hand side of the lists are names of properties. The +end of each register definition is a period.

+ +

It might seem wise to list every property of a +register, so one might give r0 the extra property MFPTREG +named after the not too well known MFPT instruction on newer +PDP-11 types, but this is not a good idea, especially since +no use can be made of that instruction anyway. Every extra +property means the register set is more unorthogonal and +cg execution time is influenced by that, because it +has to take into account a larger set of registers that are +not equivalent. So try to keep the number of different +register classes to a minimum. When faced with the choice +between two possible code rules for a nonfrequent EM +sequence, one being elegant but requiring an extra property, +and the other less elegant, elegance should probably +loose.

+ +

Tables that implement register variables must +mark registers to be used for variable storage here by +following the list of properties by one of the +following:

+
     regvar or regvar(reg_any)
+     regvar(reg_loop)
+     regvar(reg_pointer)
+     regvar(reg_float)
+
+ +

meaning they are candidates for that type of +variable. All register variables of one type must be of the +same size, and they may have no subregisters. Such registers +are not available for normal code generation.

+ +

5.4. Stack token definition

+ +

The next part describes all possible tokens that +can reside on the fake stack during code generation. +Attributes of a token are described as a C struct +declaration; this is followed by the size of the token in +bytes, optionally followed by the cost of the token when +used as an addressing mode and the format to be used on +output.

+ +

In general, when writing a table, it is not wise +to try to think of all necessary tokens in advance. While +writing the necessity or advisability for some token will be +seen and it can then be added together with the stacking +rules and coercions needed.

+ +

Tokens should usually be declared for every +addressing mode of the machine at hand and for every size +directly usable in a machine instruction. Example for the +PDP-11 (incomplete):

+ + +

+ +

Types allowed in the struct are ADDR, INT and all +register properties. The type ADDR means a string and an +integer, which is output as string+integer, and arithmetic +on mixed ADDR and INT is possible. This is the right mode +for anything that can be an assembler address expression. +The type of the register in the token is strict. At any +assignment of an expression of type register to a token +attribute of type register cgg will check if the set +of possible results from the expression is a subset of the +set of permissible values for the token +attribute.

+ +

The cost-field is made up by the word cost +followed by two numbers in parentheses, the size and +timecosts of this token when output in the code file. If +omitted, zero cost is assumed. While generating code, +cg keeps track of a linear combination of these costs +together with the costs of the instructions itself which we +will see later. The coefficients of this linear combination +are influenced by two things:

+ + + + + + +
+ +

1)

+
+ +

The SIZEFACTOR and TIMEFACTOR constants, as +mentioned above.

+
+ + + + + + +
+ +

2)

+
+ +

A run time option to cg that can adjust +the time/space tradeoff to all positions from 100% time to +100% space.

+
+ +

By supplying different code rules in certain +situations it is possible to get a code generator that can +adjust its code to the need of the moment. This is probably +most useful with small machines, experience has shown that +on the larger micro’s and mini’s the difference +between time-optimal and space-optimal code is often +small.

+ +

The printformat consists of a list of strings +intermixed with attributes from the token. Strings are +output literally, attributes are printed according to their +type and value. Tokens without a printformat should never be +output, and cgg checks for this.

+ +

Notice that tokens need not correspond to +addressing modes; the regconst2 token listed above, meaning +the sum of the contents of the register and the constant, +has no corresponding addressing mode on the PDP-11, but is +included so that a sequence of add constant, load indirect, +can be handled efficiently. This regconst2 token is needed +as part of the path

+
     REG -> regconst2 -> regind2
+
+ +

of which the first and the last "exist" +and the middle is needed only as an intermediate +step.

+ +

Tokens with name ‘LOCAL’ or +‘DLOCAL’ are a special case when register +variables are used, this is explained further in the section +on token descriptions.

+ +

5.5. Sets

+ +

Usually machines have certain collections of +addressing modes that can be used with certain instructions. +The stack patterns in the table are lists of these +collections and since it is cumbersome to write out these +long lists every time, there is a section here to give names +to these collections. Please note that it is not forbidden +to write out a set in the remainder of the table, but for +clarity it is usually better not to.

+ +

Example for the PDP-11 (incomplete):

+ + +

+ +

Permissible in the set construction are all the +usual set operators, i.e.

+ + + + + + + +
+ +

+

+
+ +

set union

+
+
+ + + + + + + +
+ +

-

+
+ +

set difference

+
+
+ + + + + + + +
+ +

*

+
+ +

set intersection

+
+
+ +

Normal operator priorities apply, and parentheses +can be used. Every token identifier is also a set identifier +denoting the singleton collection of tokens containing just +itself. Every register property as defined above is also a +set matching all registers with that property. The standard +set identifier ALL denotes the collection of all +tokens.

+ +

5.6. Instruction definitions

+ +

In the next part of the table the instructions +for the machine are declared together with information about +their operands. Example for the PDP-11(very +incomplete):

+
     INSTRUCTIONS
+     /* default cost */
+
+
+     cost(2,600)
+
+
+     /* Normal instructions */
+
+
+     adc dst2:rw:cc .
+     add src2:ro,dst2:rw:cc cost(2,450).
+     ash src2:ro,REG:rw:cc .
+     ashc src2:ro,REGPAIR+ODDREG:rw .
+     asl dst2:rw:cc .
+     asr dst2:rw:cc .
+     bhis "bcc" label .
+
+
+     /* floating point instructions */
+
+
+     movf "ldf" fsrc,freg .
+     movf "stf" freg,fdst .
+
+ +

As the examples show an instruction definition +consists of the name of the instruction, optionally followed +by an assembler mnemonic in quotes-default is the name +itself-and then a list of operands, optionally followed by +the cost and then a period. If the cost is omitted the cost +just after the word INSTRUCTIONS is assumed, if that is also +omitted the cost is zero. The cost must be known by +cg of course if it has multiple code generation paths +to choose from.

+ +

For each operand we have the set of possible +token values, followed by a qualifier that can +be

+ + + + + + +
+ +

:ro

+
+ +

signifies that this operand is read only, so it +can be replaced by a register with the same contents if +available.

+
+ + + + + + + +
+ +

:rw

+
+ +

signifies that the operand is +read-write

+
+
+ + + + + + + +
+ +

:wo

+
+ +

signifies that the operand is write +only.

+
+
+ + + + + + +
+ +

:cc

+
+ +

says that after the instruction is finished, the +condition codes are set to this operand. If none of the +operands have the :cc qualifier set, cg will assume +that condition codes were unaffected (but see +below).

+
+ +

The first three qualifiers are of course mutually +exclusive. The :ro qualifier does not cause any special +action in the current implementation, and the :wo and :rw +qualifiers are treated equal. It must be recommended however +to be precise in the specifications, since later +enhancements to the code generator might use +them.

+ +

As the last examples show it is not necessary to +give one definition for an instruction. There are machines +that have very unorthogonal instruction sets, in fact most +of them do, and it is possible to declare each possible +combination of operands. The cgg program will check +all uses of the instruction to find out which one was +meant.

+ +

Although not in the PDP-11 example above there is +a possibility to describe instructions that have side +effects to registers not in the operand list. The only thing +possible is to say that the instruction is destructive to +some registers or the condition codes, by following the +operand list with the word kills and a list of the +things destroyed. Example for some hypothetic accumulator +machine:

+
     add source2:ro kills ACCU :cc .
+
+ +

The cost fields in the definitions for tokens and +instructions are added together when generating code. It +depends on the machine at hand whether the costs are +orthogonal enough to make use of both these costs, in +extreme cases every combination of instructions and operands +can be given in this section, all with their own +costs.

+ +

5.7. Expressions

+ +

Throughout the rest of the table expressions can +be used in some places. This section will give the syntax +and semantics of expressions. There are four types of +expressions: integer, address, register and undefined. +Really the type register is nonexistent as such, for each +register expression cgg keeps a set of possible +values, and this set can be seen as the real +type.

+ +

Type checking is performed by cgg. An +operator with at least one undefined operand returns +undefined except for the defined() function mentioned below. +An undefined expression is interpreted as FALSE when it is +needed as a truth value. It is the responsibility of the +table writer to ensure no undefined expressions are ever +used as initialisers for token attributes. This is +unfortunately almost impossible to check for cgg so +be careful.

+ +

Basic terms in an expression are

+ + + + + + +
+ +

number

+
+ +

A number is a constant of type integer. Also +usable is an identifier defined to a number in the constant +definition section.

+
+ + + + + + +
+ +

"string"

+
+ +

A string within double quotes is a constant of +type address. All the normal C style escapes may be used +within the string. Also usable is an identifier defined to a +string in the constant definition section.

+
+ + + + + + +
+ +

[0-9][bf]

+
+ +

This must be read as a grep-pattern. It evaluates +to a string that is the label name for the temporary label +meant. More about this in the section on code +rules.

+
+ + + + + + +
+ +

REGIDENT

+
+ +

The name of a register is a constant of type +register.

+
+ + + + + + +
+ +

$i

+
+ +

A dollarsign followed by a number is the +representation of the argument of EM instruction . The type +of the operand is dependent on the instruction, sometimes it +is integer, sometimes it is address. It is undefined when +the instruction has no operand. Instructions with +type-letter w can occur without an operand. This can be +checked in the code rule with the defined() pseudo +function.

+
+ + + + + +
+

If it is unimaginable for the operand of the +instruction ever to be something different from a plain +integer, the type is integer, otherwise it is address.
+Those who want to know it exactly, the integer instruction +types are the instructions marked with the type-letters +c,f,l,n,o,s,r,w,z in the EM manual.
+Cg
makes all necessary conversions, like adding EM_BSIZE +to positive arguments of instructions dealing with locals, +prepending underlines to global names, converting code +labels into a unique representation etc. Details about this +can be found in the section about machine dependent C +code.

+
+ + + + + + +
+ +

%1

+
+ +

This in general means the token mentioned first +in the stack pattern. When used inside an expression the +token must be a simple register. Type of this is +register.

+
+ + + + + + +
+ +

%1.off

+
+ +

This means attribute "off" of the first +stack pattern token. Type is the same as that of attribute +"off". To use this expression implies a check that +all tokens in the set used have the same attribute in the +same place.

+
+ + + + + + +
+ +

%off

+
+ +

This means attribute "off" in the +‘current’ token. This can only be used when no +confusion is possible about which token was meant, eg. in +the optional boolean expressions following token sets in the +move and test rules, in coercions or in the kills section +inside the code rules. Same check as above.

+
+ + + + + + +
+ +

%1.1

+
+ +

This is the first subregister of the first token. +Previous comments apply.

+
+ + + + + + +
+ +

%b

+
+ +

A percent sign followed by a lowercase letter +stands for an allocated register. This is the second +allocated register.

+
+ + + + + + +
+ +

%a.2

+
+ +

The second subregister of the first allocated +register.

+
+ +

All normal C operators apply to integers, the + +operator on addresses behaves as one would expect and the +only operators allowed on register expressions are == and != +. Furthermore there are some special +‘functions’:

+ + + + + + +
+ +

defined(e)

+
+ +

Returns 1 if expression e is defined, 0 +otherwise.

+
+ + + + + + +
+ +

samesign(e1,e2)

+
+ +

Returns 1 if integer expression e1 and +e2 have the same sign.

+
+ + + + + + +
+ +

sfit(e1,e2)

+
+ +

Returns 1 if integer expression e1 fits as +a signed integer into a field of e2 bits, 0 +otherwise.

+
+ + + + + + +
+ +

ufit(e1,e2)

+
+ +

Same as above but now for unsigned +e1.

+
+ + + + + + +
+ +

rom($a,n)

+
+ +

Integer expression giving word n from the +rom descriptor pointed at by EM instruction number +a in the EM-pattern. Undefined if that descriptor +does not exist.

+
+ + + + + + +
+ +

is_rom($a)

+
+ +

Integer expression indicating whether EM +instruction number a in the EM-pattern refers to ROM. +This may be useful for generating position-independent code +with the ROM in read-only memory. Is_rom enables one +to see the difference between ROM references and other data +references.

+
+ + + + + + +
+ +

loww($a)

+
+ +

Returns the lower half of the argument of EM +instruction number a. This is used to split the +arguments of a ldc instruction.

+
+ + + + + + + +
+ +

highw($a)

+
+ +

Same for upper half.

+
+
+ +

The next two ‘functions’ are only +needed in a table that implements register +variables.

+ + + + + + +
+ +

inreg(e)

+
+ +

Returns the status of the local variable with +offset e from the localbase. Value is an integer, +negative if the local was not allowed as a register +variable, zero if it was allowed but not assigned to a +register, and the type of the register if it was assigned to +a register. This makes it possible to write

+
+ + + + + +
+
     inreg($1)==reg_pointer
+
+ +

and similar things.

+
+ + + + + + +
+ +

regvar(e,t)

+
+ +

Type of this is register. It returns the register +the local with offset e is assigned to. The table +writer guarantees the register is one of type t, with +t one of reg_any, reg_loop, reg_pointer or reg_float. +If t is omitted reg_any is assumed. Undefined if +inreg(e)<=0 .

+
+ +

The next two ‘functions’ are only +needed in a table that uses the top element size +information.

+ + + + + + +
+ +

topeltsize($a)

+
+ +

Returns the size of the element on top of the +EM-stack at the label identified by $a. This can be used to +put the top of the stack in a register at the moment of an +unconditional jump. At an unconditional jump, the size of +the top-element will always look 0.

+
+ + + + + + +
+ +

fallthrough($a)

+
+ +

Returns 1 if the label identified by $a can be +reached via fallthrough, 0 otherwise.

+
+ +

5.8. Token descriptions

+ +

Throughout the rest of the table tokens must be +described, be it as operands of instructions or as +stack-replacements. In all those cases we will speak about a +token description. The possibilities for these will be +described here.

+ +

All expressions of type register are token +descriptions. The construct %1 means the token matched first +in the stack pattern. All other token descriptions are those +that are built on the spot. They look like this:

+
     { <tokenname> , <list of token attribute initializing expressions> }
+
+ +

All expressions are type-checked by cgg, +and the number of initializers is also checked.

+ +

A special case of the last token descriptions +occurs when the token name is ‘LOCAL’ or +‘DLOCAL’ and the table uses register variables. +The first token attribute then must be of type integer and +the token description is automagically replaced by the +register chosen if the LOCAL (wordsize) or DLOCAL (twice the +wordsize) was assigned to a register.

+ +

5.9. Code rules

+ +

The largest section of the tables consists of the +code generation rules. They specify EM patterns, stack +patterns, code to be generated etc. Broadly the syntax +is

+
code rule : EM-part code-part
+EM-part : EM-pattern | procedure-heading
+code-part : code-description | procedure-call
+code-description : stackpattern kills allocates generates yields leaving
+
+ +

Ignoring the "procedure"-part for now, +the description for the EM-pattern and the code-description +follows. Almost everything here is optional, the minimum +code rule is:

+
     pat nop
+
+ +

that will simply throw away nop +instructions.

+ +

5.9.1. The EM pattern

+ +

The EM pattern consists of a list of EM mnemonics +preceded by the word pat optionally followed by a +boolean expression. Examples:

+
     pat loe
+
+ +

will match a single loe +instruction,

+
     pat loc loc cif $1==2 && $2==8
+
+ +

is a pattern that will match

+
     loc 2
+     loc 8
+     cif
+
+ +

and

+
     pat lol inc stl $1==$3
+
+ +

will match for example

+ + + + +

lol 6

+ + + + + + + + + + + + + + + + + + + + +
+ +

lol -2

+
+ + +

lol 4
+inc

+
+
+ +

inc

+
+ +

but not

+
+ +

inc
+stl
6

+
+
+ +

stl -2

+
+ + +

stl -4

+
+
+ +

A missing boolean expression evaluates to +TRUE.

+ +

The code generator will match the longest EM +pattern on every occasion, if two patterns of the same +length match the first in the table will be chosen, while +all patterns of length greater than or equal to three are +considered to be of the same length. This rule of three is +an unfortunate implementation dependent restriction, but +patterns longer than three EM instructions are luckily not +needed too often.

+ +

The EM mnemonic may also be the +pseudo-instruction lab, which matches a label. Its +argument can be used in testing on topeltsize and +fallthrough. When this pattern is specified, the label +should be defined explicitly with a labeldef +statement.

+ +

Following the EM-pattern there may be more than +one code rule, cg will choose using heuristics and +the cost information provided with the instruction and token +definitions. Owing to parsing reasons of the table, the word +with (see below) is mandatory when there are more +code rules attached to one EM-pattern. The stack pattern may +be empty however.

+ +

5.9.2. The stack pattern

+ +

The optional stack pattern is a list of token +sets preceded by the word with. The token sets are +usually represented by set identifiers for clarity. No +boolean expression is allowed here. The first expression is +the one that matches the top of the stack.

+ +

If the pattern is followed by the word STACK it +only matches if there is nothing else on the fake stack, and +the code generator will stack everything not matched at the +start of the rule.

+ +

The pattern can be preceded with the word +exact following the with that tells the code +generator not to try to coerce to the pattern but only to +use it when it is already present on the fake stack. There +are two reasons for this construction, correctness and +speed. It is needed for correctness when the pattern +contains a register that is not transparent when data is +moved through it.

+ +

Example: on the PDP-11 the shortest code +for

+
     lae a
+     loi 8
+     lae b
+     sti 8
+
+ +

is

+
     movf _a,fr0
+     movf fr0,_b
+
+ +

if the floating point processor is in double +precision mode and fr0 is free. Unfortunately this is not +correct since a trap can occur on certain kinds of data. +This could happen if there was a stack pattern for +sti 8 like this:

+
     with DBLREG
+
+ +

The code generator would then find that coercing +the 8-byte global _a to a floating point register and then +storing it to _b was the cheapest, if the space/time knob +was turned far enough to space. This can be prevented by +changing the stack pattern to

+
     with exact DBLREG
+
+ +

It is unfortunate that the type information is no +longer present, since if _a really is a floating point +number the move could be made without error.

+ +

The second reason for the exact construct +is speed. When the code generator has a long list of +possible stack patterns for one EM pattern it can waste much +time trying to find coercions to all of them, while the mere +presence of such a long list indicates that the table writer +has given many special cases. Prepending all the special +cases by exact will stop the code generator from +trying to find things that either cannot be done, or are too +expensive anyway.

+ +

So in general it is wise to prepend all stack +patterns that cannot be made by coercions with +exact.

+ +

Using both exact and STACK in the stack +pattern has the effect that the rule will only be taken if +there is nothing else on the fake stack.

+ +

5.9.3. The kills part

+ +

The optional kills part describes certain tokens +that should neither remain on the fake stack, nor remembered +as contents of registers. This is usually only required with +store operations. The entire fake stack, except for the part +matched in the stack pattern, is searched for tokens +matching the expression and they are copied to the real +stack. Every register that contains the token is marked as +empty.

+ +

Syntax is

+
     kills <list of things to kill separated by commas>
+     thing to kill : token set optionally followed by boolean expression
+
+ +

Example:

+
     kills regind2 %reg != lb || %off == $1
+
+ +

is a kills part used for example in the +inl or stl code rule. It removes all register +offsetted tokens where the register is not the localbase +plus the local in which the store is done. The necessity for +this can be seen from the following example:

+
     lol 4
+     inl 4
+     stl 6
+
+ +

Without a proper kills part in the rule for +inl code would be generated as here

+
     inc 4(r5)
+     mov 4(r5),6(r5)
+
+ +

so local 6 would be given the new value of local +4 instead of the old as the EM code prescribed.

+ +

When generating code for an EM-instruction like +sti it is necessary to write a line in the table +like

+
     kills all_except_constant_or_register
+
+ +

where the long identifier is a set containing all +tokens that can be the destination of some random indirect +store. These indirect stores are the main reason to prevent +this kills line to be deduced automatically by +cgg.

+ +

When generating something like a branch +instruction it might be needed to empty the fake stack +completely. This can of course be done with

+
     kills ALL
+
+ +

or by ending the stack pattern with the word +STACK, if the stack pattern does not start with +exact. The latter does not erase the contents of +registers.

+ +

It is unfortunate that this part is still present +in the table but it is too much for now to let the +cgg program discover what rules ruin what kind of +tokens. Maybe some day .....

+ +

5.9.4. The allocates part

+ +

The optional register allocation part describes +the registers needed. Syntax is

+
     uses <list of use elements separated by commas>
+
+ +

where itemlist is a list of three kinds of +things:

+ + + + + + +
+ +

1)

+
+ +

reusing < a token description >, for +example %1.

+
+ + + + + +
+

This will instruct the code generator that all +registers contained in this token can be reused if they are +not used in another token on the fakestack, so that they are +available for allocation in this uses line if they +were only used in that token. See example below.

+
+ + + + + + + +
+ +

2)

+
+ +

a register property.

+
+
+ + + + + +
+

This will allocate a register with that property, +that is marked as empty at this point. Look ahead can be +performed if there is more than one register +available.

+
+ + + + + + + +
+ +

3)

+
+ +

a register property with +initialization.

+
+
+ + + + + +
+

This will allocate the register as in 2) but will +also initialize it. This eases the task of the code +generator because it can find a register already filled with +the right value if it exists.

+
+ +

Examples:

+
     uses ODDREG
+
+ +

will allocate an odd register, while

+
     uses REG={regind2,lb,$1}
+
+ +

will allocate a register while simultaneously +filling it with the asked value.
+Inside the coercion from xsrc2 to REG in the PDP-11 table +the following line can be found.

+
     uses reusing %1, REG=%1
+
+ +

This tells the code generator that registers +contained in %1 can be used again and asks to fill the +register allocated with %1. So if +%1={regind2,r3,"4"} and r3 is not in use elsewhere +on the fake stack the following code might be +generated.

+
     mov 4(r3),r3
+
+ +

In the rest of the line the registers allocated +can be named by %a and %b.1,%b.2, i.e. with lower case +letters in order of allocation.

+ +

5.9.5. The generates part

+ +

Code to be generated, also optionally, is +specified as the word gen followed by a list of items +of the following kind:

+ + + + + + +
+ +

1)

+
+ +

An instruction name followed by a comma-separated +list of token descriptions. Cgg will search the +instruction definitions for the machine to find a suitable +instruction. At code generation time the assembler name of +the instruction will be output followed by a space, followed +by a comma separated list of tokens.

+
+ + + + + +
+

In the table an instruction without operands must +be followed by a period. The author of cgg could not +get yacc to accept his syntax without it. Sorry about +this.

+
+ + + + + + + +
+ +

2)

+
+ +

a move call. This has the following +syntax:

+
+
+ + + + + +
+
     move <token description>,<token description>
+
+ +

Moves are handled specially since that enables the +code generator to keep track of register contents. +Example:

+ +
     move r3,{regind2,lb,$1}
+
+ +

will generate code to move r3 to $1(r5) except +when r3 already was a copy of $1(r5). Then the code will be +omitted. The rules describing how to move things to each +other can be found in the move definitions section described +below.

+
+ + + + + + +
+ +

3)

+
+ +

For machines that have condition codes, which +alas most of them do, there are provisions to remember +condition code settings and prevent needless testing. To set +the condition code to a token put in the code the following +call:

+
+ + + + + +
+
     test <token description>
+
+ +

This will generate a test if the condition codes +were not already set to that token. The rules describing how +to test things can be found in the test definitions section +described below. See also the :cc qualifier that can be used +at instruction definition time.

+
+ + + + + + +
+ +

4)

+
+ +

The return statement. Only used when +register variables are in use. This statement causes a call +to the machine dependent C-routine regreturn. +Explanation of this must wait for the description of the +file mach.c below.

+
+ + + + + + +
+ +

5)

+
+ +

The labeldef statement. Its only argument +should be that of the lab pseudo-instruction. This is +needed to generate local labels when the top element size +information is used. It takes the form

+
+ + + + +

labeldef $i

+
+ + + + + + +
+ +

6)

+
+ +

A temporary label of the form <digit>: may +be placed here. Expressions of the form [0-9][bf] in this +code rule generate the same string as is used for this +label. The code generator system could probably easily be +changed to make this work for assemblers that do not support +this type of label by generating unique labels itself. +Implementation of this is not contemplated at the +moment.

+
+ +

5.9.6. Stack replacement

+ +

The optional stack replacement is a possibly +empty list of tokens to be pushed onto the fake stack. It +start with the word yields, and is followed by a list +of token descriptions.

+ +

All tokens matched by the stack pattern at the +beginning of the code rule are first removed and their +registers deallocated. Items are pushed in the order of +appearance. This means that the last item will be on the top +of the stack after the push. So if the stack pattern +contained two sets and they must be pushed back unchanged, +they have to be specified as stack replacement

+
     yields %2 %1
+
+ +

and not the other way around. This is known to +cause errors in tables so watch out for this!

+ +

5.9.7. EM replacement

+ +

In exceptional cases it might be useful to leave +part of an EM-pattern undone. For example, a sdl +instruction might be split into two stl instructions +when there is no 4-byte quantity on the stack. The EM +replacement part allows one to express this. It is activated +by the word leaving.

+ +

Example:

+
     leaving stl $1 stl $1+2
+
+ +

The instructions are inserted in the stream so +that they can match the first part of a pattern in the next +step. Note that since the code generator traverses the EM +instructions in a strict linear fashion, it is impossible to +let the EM replacement match later parts of a pattern. So if +there is a pattern

+
     loc stl $1==0
+
+ +

and the input is

+
     loc 0 sdl 4
+
+ +

the loc 0 will be processed first, then +the sdl might be split into two stl’s +but the pattern cannot match now.

+ +

5.9.8. Examples

+ +

A list of examples for the PDP-11 is given here. +Far from being complete it gives examples of most kinds of +instructions.

+ + + + +

pat loc

+ + + + + + + +
+ +

yields {const2, $1}

+ +

pat ldc

+
+
+ +

yields {const2, loww($1)} {const2, +highw($1)}

+
+
+ +

These simple patterns just push one or more +tokens onto the fake stack.

+
     pat lof
+
+ + + + + +

with REG

+ + + + + + + + + + + + + + + +
+ +

yields {regind2,%1,$1}
+with exact regconst2

+
+
+ +

yields {regind2,%1.reg,$1+%1.off}
+with exact addr_external

+
+
+ +

yields {relative2,$1+%1.off}
+with exact addr_local

+
+
+ +

yields {LOCAL, %1.ind + $1,2}

+
+
+ +

This pattern shows the possibility to do +different things depending on the fake stack contents, there +are some rules for some specific cases plus a general rule, +not preceded by exact that can always be taken after +a coercion, if necessary.

+
     pat lxl $1>3
+     uses REG={LOCAL, SL, 2}, REG={const2,$1-1}
+     gen 1:
+         move {regind2,%a, SL},%a
+
+ + + + + +

sob %b,{label,1b}

+ + + +
+ +

yields %a

+
+
+ +

This rule shows register allocation with +initialisation, and the use of a temporary label. The +constant SL used here is defined to be the offset from lb of +the static link, that is pushed by the Pascal compiler as +the last argument of a function.

+
     pat stf
+     with regconst2 xsrc2
+       kills allexeptcon
+       gen move %2,{regind2,%1.reg,$1+%1.off}
+     with addr_external xsrc2
+       kills allexeptcon
+       gen move %2,{relative2,$1+%1.off}
+
+ +

This rule shows the use of a kills part in +a store instruction. The set allexeptcon contains all tokens +that can be the destination of an indirect +store.

+
     pat sde
+     with exact FLTREG
+       kills posextern
+       gen move %1,{relative4,$1}
+     with exact ftolong
+       kills posextern
+       gen setl.
+           movfi %1.reg,{relative4,$1}
+           seti.
+     with src2 src2
+       kills posextern
+       gen move %1, {relative2, $1 }
+           move %2, {relative2, $1+2}
+
+ +

The rule for sde shows the use of the +exact clause in both qualities, the first is for +correctness, the second for efficiency. The third rule is +taken by default, resulting in two separate stores, nothing +better exists on the PDP-11.

+
     pat sbi $1==2
+     with src2 REG
+
+ + + + + +

gen sub %1,%2

+ + + +
+ +

yields %2

+
+
+ +

with exact REG src2-REG
+gen sub %2,%1

+ + + + +

neg %1

+ + + +
+ +

yields %1

+
+
+ +

This rule for sbi has a normal first part, +and a hand optimized special case as its second +part.

+
     pat mli $1==2
+     with ODDREG src2
+
+ + + + + +

gen mul %2,%1

+ + + +
+ +

yields %1

+
+
+ +

with src2 ODDREG

+ + + + +

gen mul %1,%2

+ + + +
+ +

yields %2

+
+
+ +

This shows the general property for rules with +commutative operators, heuristics or look ahead will have to +decide which rule is the best.

+
     pat loc sli $1==1 && $2==2
+     with REG
+
+ + + + + +

gen asl %1

+ + + +
+ +

yields %1

+
+
+ +

A simple rule involving a longer EM-pattern, to +make use of a specialized instruction available.

+
     pat loc loc cii $1==1 && $2==2
+     with src1or2
+     uses reusing %1,REG
+
+ + + + + +

gen movb %1,%a

+ + + +
+ +

yields %a

+
+
+ +

A somewhat more complicated example of the same. +Note the reusing clause.

+
     pat loc loc loc cii $1>=0 && $2==2 && $3==4
+
+ + + + + +

leaving loc $1 loc 0

+
+ +

Shows a trivial example of EM-replacement. This +is a rule that could be done by the peephole optimizer, if +word order in longs was defined in EM. On a +‘big-endian’ machine the two replacement +instructions would be the other way around.

+
     pat and $1==2
+     with const2 REG
+       gen bic {const2,~%1.num},%2yields %2
+     with REG const2
+       gen bic {const2,~%2.num},%1yields %1
+     with REG REG
+       gen com %1
+
+ + + + + +

bic %1,%2

+ + + +
+ +

yields %2

+
+
+ +

Shows the way to handle the absence of an +and-instruction.

+
     pat set $1==2
+     with REG
+     uses REG={const2,1}
+
+ + + + + +

gen ash %1,%a

+ + + +
+ +

yields %a

+
+
+ +

Shows the building of a word-size +set.

+
     pat lae aar $2==2 && rom($1,3)==1 && rom($1,1)==0
+
+ + + + + +

leaving adi 2

+
+ +

pat lae aar $2==2 && rom($1,3)==1 +&& rom($1,1)!=0

+ + + + +

leaving adi 2 adp 0-rom($1,1)

+
+ +

Two rules showing the use of the rom pseudo +function, and some array optimalisation.

+
     pat bra
+     with STACK
+     gen jbr {label, $1}
+
+ +

A simple jump. The stack pattern guarantees that +everything will be stacked before the jump is +taken.

+ + + + +

pat lab

+ + + + + + + + + + + + + + + + + + + + + + + +
+ +

topeltsize($1)==2 && !fallthrough($1)
+gen labeldef $1

+
+ + + + + +

yields r0

+ +

pat lab

+
+
+ +

topeltsize($1)==2 && +fallthrough($1)

+
+
+ +

with src2
+gen move %1,r0

+ + + + +

labeldef $1

+ + + + + + + + + +
+ + + + + +

yields r0

+
+
+ +

pat lab topeltsize($1)!=2
+with STACK
+kills all
+gen labeldef $1

+ +

pat bra topeltsize($1)==2
+with src2 STACK
+gen move %1,d0

+ + + + +

jbr {label, $1}

+
+ +

pat bra topeltsize($1)!=2
+with STACK
+gen jbr {label, $1}

+ +

The combination of these patterns make sure that +the top of the EM-stack will be in register r0 whenever +necessary. The top element size mechanism will also show a +size of 0 whenever a conditional branch to a label occurs. +This saves a lot of patterns and hardly decreases +performance. When the same register is used to return +function results, this can save many moves to and from the +stack.

+
     pat cal
+     with STACK
+     gen jsr pc,{label, $1}
+
+ +

A simple call. Same comments as previous +rule.

+ + + + +

pat lfr $1==2

+ + + + + + + +
+ +

yields r0
+pat lfr $1==4

+
+
+ +

yields r1 r0

+
+
+ +

Shows the return area conventions of the PDP-11 +table. At this point a reminder: the asp instruction, +and some other instructions must leave the function return +area intact. See the defining document for EM for exact +information.

+
     pat ret $1==0
+     with STACK
+     gen mov lb,sp
+         rts pc
+
+ +

This shows a rule for ret in a table not +using register variables. In a table with register variables +the gen part would just contain +return.

+
     pat blm
+     with REG REG
+     uses REG={const2,$1/2}
+     gen 1:
+         mov {autoinc,%2},{autoinc,%1}
+         sob %a,{label,1b}
+
+ +

This rule for blm already uses three +registers of the same type. Cgg contains code to +check all rules to see if they can be applied from an empty +fakestack. It uses the marriage thesis from Hall, a thesis +from combinatorial mathematics, to accomplish +this.

+
     pat exg $1==2
+
+ + + + + +

with src2 src2

+ + + +
+ +

yields %1 %2

+
+
+ +

This rule shows the exchanging of two elements on +the fake stack.

+ +

5.10. Code rules using procedures

+ +

To start this section it must be admitted at once +that the word procedure is chosen here mainly for its +advertising value. It more resembles a glorified goto but +this of course can not be admitted in the glossy brochures. +This document will continue to use the word +procedure.

+ +

The need for procedures was felt after the first +version of the code generator system was made, mainly +because of conditional instructions. Often the code +sequences for tlt, tle, teq, +tne, tge and tgt were identical apart +from one opcode in the code rule. The code sequence had to +be written out six times however. Not only did this increase +the table size and bore the table writer, it also led to +errors when changing the table since it happened now and +then that five out of six rules were changed.

+ +

In general the procedures in this table format +are used to keep one copy instead of six of the code rules +for all sorts of conditionals and one out of two for things +like increment/decrement.

+ +

And now the syntax, first the procedure +definition, which must indeed be defined before the call +because cgg is one-pass. The procedure heading +replaces the EM-pattern in a code rule and looks like +this:

+
     proc <identifier> <optional example>
+
+ +

The identifier is used in later calls and the +example must be used if expressions like $1 are used in the +code rule.

+
     <optional example> : example <list of EM-instructions>
+
+ +

so an example looks just like an EM-pattern, but +without the optional boolean expression. The example is +needed to know the types of $1 expressions. The current +version of cgg does not check correctness of the +example, so be careful.

+ +

A procedure is called with string-parameters, +that are assembler opcodes. They can be accessed by +appending the string ‘[<number>]’ to a +table opcode, where <number> is the parameter number. +The string ‘*’ can be used as an equivalent for +‘[1]’. Just in case this is not clear, here is +an example for a procedure to increment/decrement a +register.

+ + + + +

incop REG:rw:cc .

+ + + +
+ +

/* in the INSTRUCTIONS part of course +*/

+
+
+ +

proc incdec
+with REG

+ + + + +

gen incop* %1

+ + + +
+ +

yields %1

+
+
+ +

The procedure is called with parameter +"inc" or "dec".

+ +

The procedure call is given instead of the +code-part of the code rule and looks like this

+
     call <identifier> ’(’ <comma-separated list of strings> ’)’
+
+ +

which leads to the following large +example:

+
     proc bxx example beq
+     with src2 src2 STACK
+     gen cmp %2,%1
+         jxx* {label, $1}
+
+
+
+ + + + + +

pat blt

+ + + + + + + + + + + + + + + + + + + + + + + +
+ +

call bxx("jlt")
+pat ble

+
+
+ +

call bxx("jle")
+pat beq

+
+
+ +

call bxx("jeq")
+pat bne

+
+
+ +

call bxx("jne")
+pat bgt

+
+
+ +

call bxx("jgt")
+pat bge

+
+
+ +

call bxx("jge")

+
+
+ +

5.11. Move definitions

+ +

We now jump back to near the beginning of the +table where the move definitions are found. The move +definitions directly follow the instruction +definitions.

+ +

In certain cases a move is called for, either +explicitly when a move instruction is used in a code +rule, or implicitly in a register initialization. The +different code rules possible to move data from one spot to +another are described here. Example for the +PDP-11:

+
     MOVES
+
+
+     from const2 %num==0 to dst2
+     gen clr %2
+
+
+     from src2 to dst2
+     gen mov %1,%2
+
+
+     from FLTREG to longf4-FLTREG
+     gen movfo %1,%2
+
+
+     from longf4-FLTREG to FLTREG
+     gen movof %1,%2
+
+ +

The example shows that the syntax is +just

+
     from <source> to <destination> gen <list of instructions>
+
+ +

Source and destination are a token set, +optionally followed by a boolean expression. The code +generator will take the first move that matches, whenever a +move is necessary. Cgg checks whether all moves +called for in the table are present.

+ +

5.12. Test definitions

+ +

This part describes the instructions necessary to +set the condition codes to a certain token. These rules are +needed when the test instruction is used in code +rules. Example for the PDP-11:

+
     TESTS
+
+
+     to test src2
+     gen tst %1
+
+ +

So syntax is just

+
     to test <source> gen <instruction list>
+
+ +

Source is the same thing as in the move +definition. Cgg checks whether all tests called for +in the table are present.

+ +

5.13. Some explanation about the rules behind coercions

+ +

A central part in code generation is taken by the +coercions. It is the responsibility of the table +writer to provide all necessary coercions so that code +generation can continue. The minimal set of coercions are +the coercions to unstack every token expression, in +combination with the rules to stack every token. It should +not be possible to smuggle a table through cgg +without these basic set available.

+ +

If these are present the code generator can +always make the necessary transformations by stacking and +unstacking. Of course for code quality it is usually best to +provide extra coercions to prevent this stacking to take +place. Cg discriminates three types of +coercions:

+ + + + + + +
+ +

1)

+
+ +

Unstacking coercions. This category can use the +uses clause in its code.

+
+ + + + + + +
+ +

2)

+
+ +

Splitting coercions, these are the coercions that +split larger tokens into smaller ones.

+
+ + + + + + +
+ +

3)

+
+ +

Transforming coercions, these are the coercions +that transform a token into another of the same size. This +category can use the uses clause in its +code.

+
+ +

When a stack configuration does not match the +stack pattern coercions are searched for in the +following order:

+ + + + + + +
+ +

1)

+
+ +

First tokens are split if necessary to get their +sizes right.

+
+ + + + + + +
+ +

2)

+
+ +

Then transforming coercions are found that will +make the pattern match.

+
+ + + + + + +
+ +

3)

+
+ +

Finally if the stack pattern is longer than the +fake stack contents unstacking coercions will be used to +fill up the pattern.

+
+ +

At any point, when coercions are missing so code +generation could not continue, the offending tokens are +stacked.

+ +

5.14. Stack definitions

+ +

The next part of the table defines the stacking +rules for the machine. Each token that may reside on the +fake stack must have a rule attached to put it on the real +stack. Example for the PDP-11:

+
     STACKINGRULES
+
+
+     from const2 %num==0 to STACK
+     gen clr {autodec,sp}
+
+
+     from src2 to STACK
+     gen mov %1,{autodec,sp}
+
+
+     from regconst2 to STACK
+     gen mov %1.reg,{autodec,sp}
+         add {addr_external, %1.off},{regdef2,sp}
+
+
+     from DBLREG to STACK
+     gen movf %1,{autodec,sp}
+
+
+     from FLTREG  to STACK
+     gen movfo %1,{autodec,sp}
+
+
+     from regind8 to STACK
+     uses REG
+     gen move %1.reg,%a
+         add {addr_external, 8+%1.off},%a
+         mov {autodec, %a},{autodec,sp}
+         mov {autodec, %a},{autodec,sp}
+         mov {autodec, %a},{autodec,sp}
+         mov {autodec, %a},{autodec,sp}
+
+ +

These examples should be self-explanatory, except +maybe for the last one. It is possible inside a +stacking-rule to use a register. Since however the stacking +might also take place at a moment when no registers are +free, it is mandatory that for each token there is one +stackingrule that does not use a register. The code +generator uses the first rule possible.

+ +

5.15. Coercions

+ +

The next part of the table defines the coercions +that are possible on the defined tokens. Example for the +PDP-11:

+
     COERCIONS
+
+
+     from STACK
+     uses REG
+
+ + + + + +

gen mov {autoinc,sp},%a

+ + + +
+ +

yields %a

+
+
+ +

from STACK
+uses DBLREG

+ + + + +

gen movf {autoinc,sp},%a

+ + + +
+ +

yields %a

+
+
+ +

from STACK
+uses REGPAIR
+gen mov {autoinc,sp},%a.1

+ + + + +

mov {autoinc,sp},%a.2

+ + + +
+ +

yields %a

+
+
+ +

These three coercions just deliver a certain type +of register by popping it from the real stack.

+ + + + +

from LOCAL

+ + + + + + + + + + + +
+ +

yields {regind2,lb,%1.ind}

+ +

from DLOCAL

+
+
+ +

yields {regind4,lb,%1.ind}

+ +

from REG

+
+
+ +

yields {regconst2, %1, 0}

+
+
+ +

These three are zero-cost rewriting +rules.

+
     from regconst2 %1.off==1
+     uses reusing %1,REG=%1.reg
+
+ + + + + +

gen inc %a

+ + + +
+ +

yields %a

+
+
+ +

from regconst2
+uses reusing %1,REG=%1.reg
+gen add {addr_external, %1.off},%ayields %a

+ +

from addr_local
+uses REG
+gen mov lb,%a

+ + + + +

add {const2, %1.ind},%a

+ + + +
+ +

yields %a

+
+
+ +

The last three are three different cases of the +coercion register+constant to register. Only in the last +case is it always necessary to allocate an extra register, +since arithmetic on the localbase is +unthinkable.

+
     from xsrc2
+
+ + + + + +

uses reusing %1, REG=%1

+ + + +
+ +

yields %a

+
+
+ +

from longf4

+ + + + +

uses FLTREG=%1

+ + + +
+ +

yields %a

+
+
+ +

from double8

+ + + + +

uses DBLREG=%1

+ + + +
+ +

yields %a

+
+
+ +

from src1
+uses REG={const2,0}

+ + + + +

gen bisb %1,%a

+ + + +
+ +

yields %a

+
+
+ +

These examples show the coercion of different +tokens to a register of the needed type. The last one shows +the trouble needed on a PDP-11 to ensure bytes are not +sign-extended. In EM it is defined that the result of a +loi 1 instruction is an integer in the range +0..255.

+ + + + +

from REGPAIR

+ + + + + + + +
+ +

yields %1.2 %1.1

+ +

from regind4

+
+
+ +

yields {regind2,%1.reg,2+%1.off}

+
+
+ +

{regind2,%1.reg,%1.off}

+ + + + +

from relative4

+ + + +
+ +

yields {relative2,2+%1.off}

+
+
+ +

{relative2,%1.off}

+ +

The last examples are splitting +rules.

+ +

The examples show that all coercions change one +token on the fake stack into one or more others, possibly +generating code. The STACK token is supposed to be on the +fake stack when it is really empty, and can only be changed +into one other token.

+ +

6. The files mach.h and mach.c

+ +

The table writer must also supply two files +containing machine dependent declarations and C code. These +files are mach.h and mach.c.

+ +

6.1. Types in the code generator

+ +

Three different types of integer coexist in the +code generator and their range depends on the machine at +hand. They are defined depending on the Target EM_WSIZE, or +TEM_WSIZE, and TEM_PSIZE. The type ’int’ is used +for things like counters that won’t require more than +16 bits precision. The type ’word’ is used among +others to assemble datawords and is of type +’long’. The type ’full’ is used for +addresses and is of type ’long’ if +TEM_WSIZE>2 or TEM_PSIZE>2.

+ +

In macro and function definitions in later +paragraphs implicit typing will be used for parameters, that +is parameters starting with an ’s’ will be of +type string, and the letters +’i’,’w’,’f’ will stand +for int, word and full respectively.

+ +

6.2. Global variables to work with

+ +

Some global variables are present in the code +generator that can be manipulated by the routines in mach.h +and mach.c.

+ +

The declarations are:

+ + + + + + + + + + + + + + + + + +
+ +

FILE *codefile;

+
+ +

/* code is emitted on this stream */

+
+ +

word part_word;

+
+ +

/* words to be output are put together here +*/

+
+ +

int part_size;

+
+ +

/* number of bytes already put in part_word +*/

+
+ +

char str[];

+
+ +

/* Last string read in */

+
+ +

long argval;

+
+ +

/* Last int read and kept */

+
+ +

6.3. Macros in mach.h

+ +

In the file mach.h a collection of macros is +defined that have to do with formatting of assembly code for +the machine at hand. Some of these macros can of course be +left undefined in which case the macro calls are left in the +source and will be treated as function calls. These +functions can then be defined in mach.c.

+ +

The macros to be defined are:

+ + + + + + +
+ +

ex_ap(s)

+
+ +

Must print the magic incantations that will mark +the symbol to be exported to other modules. This is the +translation of the EM exa and exp +instructions.

+
+ + + + + + +
+ +

in_ap(s)

+
+ +

Same to import the symbol. Translation of +ina and inp.

+
+ + + + + + +
+ +

newplb(s)

+
+ +

Must print the definition of procedure label +s. If left undefined the newilb() macro is used +instead.

+
+ + + + + + +
+ +

newilb(s)

+
+ +

Must print the definition of instruction label +s.

+
+ + + + + + +
+ +

newdlb(s)

+
+ +

Must print the definition of data label +s.

+
+ + + + + + +
+ +

dlbdlb(s1,s2)

+
+ +

Must define data label s1 to be equal to +s2.

+
+ + + + + + +
+ +

newlbss(s,f)

+
+ +

Must declare a piece of memory initialized to +BSS_INIT(see below) of length f and with label +s.

+
+ + + + + + +
+ +

cst_fmt

+
+ +

Format to be used when converting constant +arguments of EM instructions to string. Argument to be +formatted will be ’full’.

+
+ + + + + + +
+ +

off_fmt

+
+ +

Format to be used for integer part of +label+constant, argument will be +’full’.

+
+ +

fmt_ilb(ip,il,s)

+ + + + + +
+

Must use the numbers ip and il that +are a procedure number and a label number respectively and +copy a string to s that must be unique for that +combination. This procedure is optional, if it is not given +ilb_fmt must be defined as below.

+
+ + + + + + +
+ +

ilb_fmt

+
+ +

Format to be used for creation of unique +instruction labels. Arguments will be a unique procedure +number (int) and the label number (int).

+
+ + + + + + +
+ +

dlb_fmt

+
+ +

Format to be used for printing numeric data +labels. Argument will be ’int’.

+
+ + + + + + +
+ +

hol_fmt

+
+ +

Format to be used for generation of labels for +space generated by a hol pseudo. Argument will be +’int’.

+
+ + + + + + +
+ +

hol_off

+
+ +

Format to be used for printing of the address of +an element in hol space. Arguments will be the offset +in the hol block (word) and the number of the +hol (int).

+
+ + + + + + +
+ +

con_cst(w)

+
+ +

Must generate output that will assemble into one +machine word.

+
+ + + + + + +
+ +

con_ilb(s)

+
+ +

Must generate output that will put the address of +the instruction label into the datastream.

+
+ + + + + + +
+ +

con_dlb(s)

+
+ +

Must generate output that will put the address of +the data label into the datastream.

+
+ + + + + + +
+ +

fmt_id(sf,st)

+
+ +

Must take the string in sf that is a +nonnumeric global label, and transform it into a copy made +to st that will not collide with reserved assembler +words and system labels. This procedure is optional, if it +is not given the id_first macro is used as defined +below.

+
+ + + + + + +
+ +

id_first

+
+ +

Must be a character. This is prepended to all +nonnumeric global labels if their length is shorter than the +maximum allowed(currently 8) or if they already start with +that character. This is to avoid conflicts of user labels +with system labels.

+
+ + + + + + +
+ +

BSS_INIT

+
+ +

Must be a constant. This is the value filled in +all the words not initialized explicitly. This is loader and +system dependent. If omitted no initialization is +assumed.

+
+ +

6.3.1. Example mach.h for the PDP-11

+
#define ex_ap(y)fprintf(codefile,"\t.globl %s\n",y)
+#define in_ap(y)/* nothing */
+
+
+#define newplb(x)fprintf(codefile,"%s:\n",x)
+#define newilb(x)fprintf(codefile,"%s:\n",x)
+#define newdlb(x)fprintf(codefile,"%s:\n",x)
+#define dlbdlb(x,y)fprintf(codefile,"%s=%s\n",x,y)
+#define newlbss(l,x)fprintf(codefile,"%s:.=.+%d.\n",l,x);
+
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+ +

#define cst_fmt

+
+ +

"$%d."

+
+ +

#define off_fmt

+
+ +

"%d."

+
+ +

#define ilb_fmt

+
+ +

"I%x_%x"

+
+ +

#define dlb_fmt

+
+ +

"_%d"

+
+ +

#define hol_fmt

+
+ +

"hol%d"

+
+ +

#define hol_off

+
+ +

"%ld.+hol%d"

+
+ +

#define +con_cst(x)fprintf(codefile,"%ld.\n",x)
+#define con_ilb(x)fprintf(codefile,"%s\n",x)
+#define +con_dlb(x)fprintf(codefile,"%s\n",x)

+ +

#define id_first’_’
+#define BSS_INIT0

+ +

6.4. Functions in mach.c

+ +

In mach.c some functions must be supplied, mostly +manipulating data resulting from pseudoinstructions. The +specifications are given here, implicit typing of parameters +as above.

+ + + + + + + +
+ +

-

+
+ +

con_part(isz,word)

+
+
+ + + + + +
+

This function must manipulate the globals +part_word and part_size to append the isz bytes contained in +word to the output stream. If part_word is full, i.e. +part_size==TEM_WSIZE the function part_flush() may be called +to empty the buffer. This is the function that must go +through the trouble of doing byte order in words +correct.

+
+ + + + + + + +
+ +

-

+
+ +

con_mult(w_size)

+
+
+ + + + + +
+

This function must take the string str[] and +create an integer from the string of size w_size and +generate code to assemble global data for that integer. Only +the sizes for which arithmetic is implemented need be +handled, so if 200-byte integer division is not implemented, +200-byte integer global data don’t have to be +implemented. Here one must take care of word order in long +integers.

+
+ + + + + + + +
+ +

-

+
+ +

con_float()

+
+
+ + + + + +
+

This function must generate code to assemble a +floating point number of which the size is contained in +argval and the ASCII representation in str[].

+
+ + + + + + + +
+ +

-

+
+ +

prolog(f_nlocals)

+
+
+ + + + + +
+

This function is called at the start of every +procedure. Function prolog code must be generated, and room +made for local variables for a total of f_nlocals +bytes.

+
+ + + + + + + +
+ +

-

+
+ +

mes(w_mesno)

+
+
+ + + + + +
+

This function is called when a mes pseudo +is seen that is not handled by the machine independent part. +The example below shows all one probably have to know about +that.

+
+ + + + + + + +
+ +

-

+
+ +

segname[]

+
+
+ + + + + +
+

This is not a function, but an array of four +strings. These strings are put out whenever the code +generator switches segments. Segments are SEGTXT, SEGCON, +SEGROM and SEGBSS in that order.

+
+ +

If register variables are used in a table, the +program cgg will define the word REGVARS during +compilation of the sources. So the following functions +described here should be bracketed by #ifdef REGVARS and +#endif.

+ + + + + + + +
+ +

-

+
+ +

regscore(off,size,typ,freq,totyp) long +off;

+
+
+ + + + + +
+

This function should assign a score to a register +variable, the score should preferably be the estimated +number of bytes gained when it is put in a register. Off and +size are the offset and size of the variable, typ is the +type, that is reg_any, reg_pointer, reg_loop or reg_float. +Freq is the count of static occurrences, and totyp is the +type of the register it is planned to go into.
+Keep in mind that the gain should be net, that is the cost +for register save/restore sequences and the cost of +initialisation in the case of parameters should already be +included.

+
+ + + + + + + +
+ +

-

+
+ +

i_regsave()

+
+
+ + + + + +
+

This function is called at the start of a +procedure, just before register saves are done. It can be +used to initialise some variables if needed.

+
+ + + + + + + +
+ +

-

+
+ +

f_regsave()

+
+
+ + + + + +
+

This function is called at end of the register +save sequence. It can be used to do the real saving if +multiple register move instructions are +available.

+
+ + + + + + +
+ +

-

+
+ +

regsave(regstr,off,size) char *regstr; long +off;

+
+ + + + + +
+

Should either do the real saving or set up a table +to have it done by f_regsave. Note that initialisation of +parameters should also be done, or planned here.

+
+ + + + + + + +
+ +

-

+
+ +

regreturn()

+
+
+ + + + + +
+

Should restore saved registers and return. The +function result is already in the function return area by +now.

+ +

6.4.1. Example mach.c for the PDP-11

+ +

As an example of the sort of code expected, the +mach.c for the PDP-11 is presented here.

+
/*
+ * machine dependent back end routines for the PDP-11
+ */
+
+
+con_part(sz,w) register sz; word w; {
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

while (part_size % sz)

+
+
+ + +

part_size++;

+
+
+ +

if (part_size == 2)

+
+
+ + +

part_flush();

+
+
+ +

if (sz == 1) {

+
+
+ + +

w &= 0xFF;

+
+
+ + +

if (part_size)

+
+
+ + + +

w <<= 8;

+
+
+ + +

part_word |= w;

+
+
+ +

} else {

+
+
+ + +

assert(sz == 2);

+
+
+ + +

part_word = w;

+
+
+ +

}

+
+
+ +

part_size += sz;

+
+
+ +

}

+ +

con_mult(sz) word sz; {

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

long l;

+
+
+ +

if (sz != 4)

+
+
+ + +

fatal("bad icon/ucon +size");

+
+
+ +

l = atol(str);

+
+
+ + +

fprintf(codefile,"\t%o;%o\n",(int)(l>>16),(int)l);

+
+
+ +

}

+ +

con_float() {

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

double f;

+
+
+ +

register short *p,i;

+
+
+ +

/*

+
+
+ +

* This code is correct only when the code +generator is

+
+
+ +

* run on a PDP-11 or VAX-11 since it assumes +native

+
+
+ +

* floating point format is PDP-11 +format.

+
+
+ +

*/

+
+
+ +

if (argval != 4 && argval != +8)

+
+
+ + +

fatal("bad fcon size");

+
+
+ +

f = atof(str);

+
+
+ +

p = (short *) &f;

+
+
+ +

i = *p++;

+
+
+ +

if (argval == 8) {

+
+
+ + + +

fprintf(codefile,"\t%o;%o;",i,*p++);

+
+
+ + +

i = *p++;

+
+
+ +

}

+
+
+ + +

fprintf(codefile,"\t%o;%o\n",i,*p++);

+
+
+ +

}

+ +

#ifdef REGVARS

+ +

char Rstring[10];
+full lbytes;
+struct regadm {

+ + + + + + + + +
+ +

char *ra_str;

+
+ +

long ra_off;

+
+ +

} regadm[2];
+int n_regvars;

+ +

regscore(off,size,typ,score,totyp) long off; +{

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

/*

+
+
+ +

* This function is full of magic +constants.

+
+
+ +

* They are a result of +experimentation.

+
+
+ +

*/

+
+
+ +

if (size != 2)

+
+
+ + +

return(-1);

+
+
+ +

score -= 1;

+
+ +

/* allow for save/restore */

+
+
+ +

if (off>=0)

+
+
+ + +

score -= 2;

+
+
+ +

if (typ==reg_pointer)

+
+
+ + +

score *= 17;

+
+
+ +

else if (typ==reg_loop)

+
+
+ + +

score = 10*score+50;

+
+ +

/* Guestimate */

+
+
+ +

else

+
+
+ + +

score *= 10;

+
+
+ +

return(score);

+
+ +

/* 10 * estimated # of words of profit +*/

+
+
+ +

}

+ +

i_regsave() {

+ + + + + + + + +
+ +

Rstring[0] = 0;

+
+ +

n_regvars=0;

+
+ +

}

+ +

f_regsave() {

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

register i;

+
+
+ +

if (n_regvars==0 || lbytes==0) {

+
+
+ + +

fprintf(codefile,"mov r5,-(sp)\nmov +sp,r5\n");

+
+
+ + +

if (lbytes == 2)

+
+
+ + + +

fprintf(codefile,"tst +-(sp)\n");

+
+
+ + +

else if (lbytes!=0)

+
+
+ + + +

fprintf(codefile,"sub +$0%o,sp\n",lbytes);

+
+
+ + +

for (i=0;i<n_regvars;i++)

+
+
+ + + +

fprintf(codefile,"mov +%s,-(sp)\n",regadm[i].ra_str);

+
+
+ +

} else {

+
+
+ + +

if (lbytes>6) {

+
+
+ + + +

fprintf(codefile,"mov +$0%o,r0\n",lbytes);

+
+
+ + + +

fprintf(codefile,"jsr +r5,PR%s\n",Rstring);

+
+
+ + +

} else {

+
+
+ + + +

fprintf(codefile,"jsr +r5,PR%d%s\n",lbytes,Rstring);

+
+
+ + +

}

+
+
+ +

}

+
+
+ +

for (i=0;i<n_regvars;i++)

+
+
+ + +

if (regadm[i].ra_off>=0)

+
+
+ + + +

fprintf(codefile,"mov +0%lo(r5),%s\n",regadm[i].ra_off,

+
+
+ + + + + + +

regadm[i].ra_str);

+
+
+ +

}

+ +

regsave(regstr,off,size) char *regstr; long off; +{

+ + + + + + + + + + + + + + + + + +
+ +

fprintf(codefile,"/ Local %ld into +%s\n",off,regstr);

+
+ +

strcat(Rstring,regstr);

+
+ +

regadm[n_regvars].ra_str = regstr;

+
+ +

regadm[n_regvars].ra_off = off;

+
+ +

n_regvars++;

+
+ +

}

+ +

regreturn() {

+ + + + + +
+ +

fprintf(codefile,"jmp +RT%s\n",Rstring);

+
+ +

}

+ +

#endif

+ +

prolog(nlocals) full nlocals; {

+ +

#ifndef REGVARS

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

fprintf(codefile,"mov r5,-(sp)\nmov +sp,r5\n");

+
+
+ +

if (nlocals == 0)

+
+
+ + +

return;

+
+
+ +

if (nlocals == 2)

+
+
+ + +

fprintf(codefile,"tst +-(sp)\n");

+
+
+ +

else

+
+
+ + +

fprintf(codefile,"sub +$0%o,sp\n",nlocals);

+
+
+ +

#else

+ + + + + +
+ +

lbytes = nlocals;

+
+ +

#endif
+}

+ +

mes(type) word type; {

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

int argt ;

+
+
+ +

switch ( (int)type ) {

+
+
+ +

case ms_ext :

+
+
+ + +

for (;;) {

+
+
+ + + +

switch ( argt=getarg(

+
+
+ + + +

ptyp(sp_cend)|ptyp(sp_pnam)|sym_ptyp) ) +{

+
+
+ + + +

case sp_cend :

+
+
+ + + + +

return ;

+
+
+ + + +

default:

+
+
+ + + + +

strarg(argt) ;

+
+
+ + + + +

fprintf(codefile,".globl %s\n",argstr) +;

+
+
+ + + + +

break ;

+
+
+ + + +

}

+
+
+ + +

}

+
+
+ +

default :

+
+
+ + +

while ( getarg(any_ptyp) != sp_cend ) +;

+
+
+ + +

break ;

+
+
+ +

}

+
+
+ +

}

+ +

char *segname[] = {

+ + + + + + + + + + + + + + +
+ +

".text", /* SEGTXT */

+
+ +

".data", /* SEGCON */

+
+ +

".data", /* SEGROM */

+
+ +

".bss" /* SEGBSS */

+
+ +

};

+ +

7. Internal workings of the code generator.

+ +

7.1. Description of tables.c and tables.h contents

+ +

In this section the intermediate files will be +described that are produced by cgg and compiled with +machine independent code to produce a code +generator.

+ +

7.1.1. Tables.c

+ +

Tables.c contains a large number of initialized +array’s of all sorts. Description of each +follows:

+ + + + + +
+

byte coderules[]

+ + + + + +
+

Pseudo code interpreted by the code generator. +Always starts with some opcode followed by operands +depending on the opcode. Some of the opcodes have an +argument encoded in the upper three bits of the opcode byte. +Integers in this table are between 0 and 32767 and have a +one byte encoding if between 0 and 127.

+ + + + + +
+

char wrd_fmt[]

+ + + + + +
+

The format used for output of +words.

+ + + + + +
+

char stregclass[]

+ + + + + +
+

Number of computed static register class per +register. Two registers are in the same class if they have +the same properties and don’t share a common +subregister.

+ + + + + +
+

struct reginfo machregs[]

+ + + + + +
+

Info per register. Initialized with representation +string, size, members of the register and set of registers +affected when this one is changed. Also contains room for +run time information, like contents and reference +count.

+ + + + + +
+

tkdef_t tokens[]

+ + + + + +
+

Information per tokentype. Initialized with size, +cost, type of operands and formatstring.

+ + + + + +
+

node_t enodes[]

+ + + + + +
+

List of triples representing expressions for the +code generator.

+ + + + + +
+

string codestrings[]

+ + + + + +
+

List of strings. All strings are put in a list and +checked for duplication, so only one copy per string will +reside here.

+ + + + + +
+

set_t machsets[]

+ + + + + +
+

List of token expression sets. Bit 0 of the set is +used for the SCRATCH property of registers, bit 1 upto NREG +are for the corresponding registers and bit NREG+1 upto the +end are for corresponding tokens.

+ + + + + +
+

inst_t tokeninstances[]

+ + + + + +
+

List of descriptions for building tokens. Contains +type of rule for building one, plus operands depending on +the type.

+ + + + + +
+

move_t moves[]

+ + + + + +
+

List of move rules. Contains token expressions for +source and destination plus index for code +rule.

+ + + + + +
+

test_t tests[]

+ + + + + +
+

List of test rules. Contains token expressions for +source plus index for code rule.

+ + + + + +
+

byte pattern[]

+ + + + + +
+

EM patterns. This is structured internally as +chains of patterns, each chain pointed at by pathash[]. +After each pattern the list of possible code rules is +given.

+ + + + + +
+

int pathash[256]

+ + + + + +
+

Indices into pattern[] for all patterns with a +certain low order byte of the hashing +function.

+ + + + + +
+

c1_t c1coercs[]

+ + + + + +
+

List of rules to stack tokens. Contains token +expressions, register needed, cost and code +rule.

+ + + + + +
+

c2_t c2coercs[]

+ + + + + +
+

List of splitting coercions. Token expressions, +split factor, replacements and code rule.

+ + + + + +
+

c3_t c3coercs[]

+ + + + + +
+

List of one to one coercions. Token expressions, +register needed, replacement and code rule.

+ + + + + +
+

struct reginfo **reglist[]

+ + + + + +
+

List of lists of pointers to register information. +For every property the list is here to find the registers +corresponding to it.

+ +

7.1.2. tables.h

+ +

In tables.h various derived constants for the +tables are given. They are then used to determine array +sizes in the actual code generator, plus loop termination in +some cases.

+ +

7.2. Other important data structures

+ +

During code generation some other data structures +are used and here is a short description of some of the +important ones.

+ +

Tokens are kept in the code generator as a struct +consisting of one integer t_token which is -1 if the +token is a register, and the number of the token otherwise, +plus an array of TOKENSIZE unions t_att of +which the first is the register number in case of a +register.

+ +

The fakestack is an array of these tokens, there +is a global variable stackheight.

+ +

The results of expressions are kept in a struct +result with elements e_typ, giving the type of +the expression: EV_INT, EV_REG or +EV_ADDR, and a union e_v which contains the +real result.

+ +

7.3. A tour through the sources

+ +

7.3.1. codegen.c

+ +

The file codegen.c contains one large function +consisting of one giant switch statement. It is the +interpreter for the code generator pseudo code as contained +in code rules[]. This function can call itself recursively +when doing look ahead. Arguments are:

+ + + + + + +
+ +

codep

+
+ +

Pointer into code rules, pseudo program +counter.

+
+ + + + + + + +
+ +

ply

+
+ +

Number of EM pattern look ahead +allowed.

+
+
+ + + + + + +
+ +

toplevel

+
+ +

Boolean telling whether this is the toplevel +codegen() or a deeper incarnation.

+
+ + + + + + +
+ +

costlimit

+
+ +

A cutoff value to limit searches. If the cost +crosses costlimit the incarnation can terminate.

+
+ + + + + + +
+ +

forced

+
+ +

A register number if nonzero. This is used inside +coercions to force the allocate() call to allocate a +register determined by earlier look ahead.

+
+ +

The instructions inplemented in the +switch:

+ +

7.3.1.1. DO_DLINE

+ +

Prints debugging information if the code +generator runs in debug mode. This information is only +generated if cgg was called with the -d +flag.

+ +

7.3.1.2. DO_NEXTEM

+ +

Matches the next EM pattern and does look ahead +if necessary to find the best code rule associated with this +pattern. Heuristics are used to determine best code rule +when possible. This is done by calling the distance() +function. It can also handle the procedure +mechanism.

+ +

7.3.1.3. DO_COERC

+ +

This sets the code generator in the state to do a +from stack coercion.

+ +

7.3.1.4. DO_XMATCH

+ +

This is done when a match no longer has to be +checked. Used when the nocoercions: trick is used in the +table.

+ +

7.3.1.5. DO_MATCH

+ +

This is the big one inside this function. It has +the task to transform the contents of the current fake stack +to match the pattern given after it.

+ +

Since the code generator does not know combining +coercions, i.e. there is no way to make a big token out of +two smaller ones, the first thing done is to stack every +token that is too small. After that all tokens too big are +split if possible to the right size.

+ +

Next the coercions are sought that would +transform tokens in place to the right one, plus the +coercions that would pop tokens of the stack. Each of those +might need a register, so a list of registers is generated +and at the end of looking for coercions the function +tuples() is called to generate the list of all +possible n-tuples, where n equals the number +of registers needed.

+ +

Look ahead is now performed if the number of +tuples is greater than one. If no possibility is found +within the costlimit, the fake stack is made smaller by +pushing the bottom token, and this process is repeated until +either a way is found or the fake stack is completely empty +and there is still no way to make the match.

+ +

If there is a way the corresponding coercions are +executed and the code is finished.

+ +

7.3.1.6. DO_REMOVE

+ +

Here the kills clause is executed, all tokens +matched by the token expression plus boolean expression are +pushed. In the current implementation there is no attempt to +move those tokens to registers, but that is a possible +future extension.

+ +

7.3.1.7. DO_DEALLOCATE

+ +

This one temporarily decrements by one the +reference count of all registers contained in the token +given as argument.

+ +

7.3.1.8. DO_REALLOCATE

+ +

Here all temporary deallocates are made +undone.

+ +

7.3.1.9. DO_ALLOCATE

+ +

This is the part that allocates a register and +decides which one to use. If the forced argument was +given its task is simple, otherwise some work must be done. +First the list of possible registers is scanned, all free +registers noted and it is noted whether any of those +registers is already containing the initialization. If no +registers are available some fakestack token is stacked and +the process is repeated.

+ +

After that if an exact match was found, the list +of registers is reduced to one register matching exactly out +of every register class. Now look ahead is performed if +necessary and the register chosen. If an initialization was +given the corresponding move is performed, otherwise the +register is marked empty.

+ +

7.3.1.10. DO_INSTR

+ +

This prints an instruction and its operands. Only +done on toplevel.

+ +

7.3.1.11. DO_MOVE

+ +

Calls the move() function in the code generator +to implement the move instruction in the table.

+ +

7.3.1.12. DO_TEST

+ +

Calls the test() function in the code generator +to implement the test instruction in the table.

+ +

7.3.1.13. DO_ERASE

+ +

Marks the register that is its argument as +empty.

+ +

7.3.1.14. DO_TOKREPLACE

+ +

This is the token replacement part. It is also +called if there is no token replacement because it has some +other functions as well.

+ +

First the tokens that will be pushed on the fake +stack are computed and stored in a temporary array. Then the +tokens that were matched in this rule are popped and their +embedded registers have their reference count decremented. +After that the replacement tokens are pushed.

+ +

Finally all registers allocated in this rule have +their reference count decremented. If they were not pushed +on the fake stack they will be available again in the next +code rule.

+ +

7.3.1.15. DO_EMREPLACE

+ +

Places replacement EM instructions back into the +instruction stream.

+ +

7.3.1.16. DO_COST

+ +

Accounts for cost as given in the code +rule.

+ +

7.3.1.17. DO_RETURN

+ +

Returns from this level of codegen(). Is used at +the end of coercions, move rules etc..

+ +

7.3.1.18. DO_LABDEF

+ +

This prints a label when the top element size +mechanism is used. Only done on toplevel.

+ +

7.3.2. compute.c

+ +

This module computes the various expressions as +given in the enodes[] array. Nothing very special happens +here, it is just a recursive function computing leaves of +expressions and applying the operator.

+ +

7.3.3. equiv.c

+ +

In this module the tuples() function is +implemented. It is given the number of registers needed and +a list of register lists and it constructs a list of tuples +where the n’th register comes from the +n’th list. Before the list is constructed +however the dynamic register classes are computed. Two +registers are in the same dynamic class if they are in the +same static class and their contents is the +same.

+ +

After that the permute() recursive function is +called to generate the list of tuples. After construction a +generated tuple is added to the list if it is not already +pairwise in the same class or if the register relations are +not the same, i.e. if the first and second register share a +common subregister in one tuple and not in the other they +are considered different.

+ +

7.3.4. fillem.c

+ +

This is the routine that does the reading of EM +instructions and the handling of pseudos. The mach.c module +provided by the table writer is included at the end of this +module. The routine fillemlines() is called by nextem() at +toplevel to make sure there are enough instruction to match. +It fills the EM instruction buffer up to 5 places from the +end to keep room for EM replacement instructions, or up to a +pseudo.

+ +

The dopseudo() function performs the function of +the pseudo last encountered. If the pseudo is a rom +the corresponding label is saved with the contents of the +rom to be available to the code generator later. The +rest of the routines are small service routines for either +input or data output.

+ +

7.3.5. gencode.c

+ +

This module contains routines called by codegen() +to generate the real code to the codefile. The function +genstr() gets a string as argument and copies it to +codefile. The prtoken() function interprets the tokenformat +as given in the tokens[] array.

+ +

7.3.6. glosym.c

+ +

This module maintains a list of global symbols +that have a rom pseudo associated. There are +functions to enter a symbol and to find a +symbol.

+ +

7.3.7. label.c

+ +

This module contains routines to handle the top +element size messages.

+ +

7.3.8. main.c

+ +

Main routine of the code generator. Processes +arguments and flags. Flags available are:

+ + + + + + +
+ +

-d

+
+ +

Sets debug mode if the code generator was not +compiled with the NDEBUG macro defined. The flag can be +followed by a digit specifying the amount of debugging +wanted, and by @labelname giving the start of debugging. +Debug mode gives very long output on stderr indicating all +steps of the code generation process including nesting of +the codegen() function.

+
+ + + + + + +
+ +

-pn

+
+ +

Sets the look ahead depth to n, the +p stands for ply, a well known word in chess playing +programs.

+
+ + + + + + +
+ +

-wn

+
+ +

Sets the weight percentage for size in the cost +function to n percent. Uses Euclides algorithm to +simplify rationals.

+
+ +

7.3.9. move.c

+ +

Function to implement the move instruction in the +tables, register initialization and the test instruction and +associated bookkeeping. First tests are made to try to +prevent the move from really happening. After that, if there +is an after that, the move rule is found and the code +executed.

+ +

7.3.10. nextem.c

+ +

The entry point of this module is nextem(). It +hashes the next three EM instructions, and uses the low +order byte of the hash as an index into the array pathash[], +to find a chain of patterns in the array pattern[], that are +all tried for a match.

+ +

The function trypat() does most of the work +checking patterns. When a pattern is found to match all +instructions the operands of the instruction are placed into +the dollar[] array. Then the boolean expression is tried. If +it matches the function can return, leaving the operands +still in the dollar[] array, so later in the code rule they +can still be used.

+ +

7.3.11. reg.c

+ +

Collection of routines to handle registers. +Reference count routines are here, chrefcount() and +getrefcount(), plus routines to erase a single register or +all of them, erasereg() and cleanregs().

+ +

If NDEBUG hasn’t been defined, here is also +the routine that checks if the reference count kept with the +register information is in agreement with the number of +times it occurs on the fake stack.

+ +

7.3.12. salloc.c

+ +

Module for string allocation and garbage +collection. Contains entry points myalloc(), a routine +calling malloc() and checking whether room is left, +myfree(), just free(), popstr() a function called from +state.c to free all strings made since the last saved +status. Furthermore there is salloc() which has the size of +the string as parameter and returns a pointer to the +allocated space, while keeping a copy of the pointer for +garbage allocation purposes.

+ +

The function garbage_collect is called from +codegen() at toplevel every now and then, and checks all +places where strings may reside to mark strings as being in +use. Strings not in use are returned to the pool of free +space.

+ +

7.3.13. state.c

+ +

Set of routines called to save current status and +restore a previous saved state.

+ +

7.3.14. subr.c

+ +

Random set of leftover routines.

+ +

7.3.14.1. match

+ +

Computes whether a certain token matches a +certain token expression. Just computes a bitnumber +according to the algorithm explained with machsets[], and +tests the bit and the boolean expression if it is +there.

+ +

7.3.14.2. instance,cinstance

+ +

These two functions compute a token from a +description. They differ very slight, cinstance() is used to +compute the result of a coercion in a certain context and +therefore has more arguments, which it uses instead of the +global information instance() works on.

+ +

7.3.14.3. eqtoken

+ +

eqtoken computes whether two tokens can be +considered identical. Used to check register contents during +moves mainly.

+ +

7.3.14.4. distance

+ +

This is the heuristic function that computes a +distance from the current fake stack contents to the token +pattern in the table. It likes exact matches most, then +matches where at least the sizes are correct and if the +sizes are not correct it likes too large sizes more than too +small, since splitting a token is easier than combining +one.

+ +

7.3.14.5. split

+ +

This function tries to find a splitting coercion +and executes it immediately when found. The fake stack is +shuffled thoroughly when this happens, so pieces below the +token that must be split are saved first.

+ +

7.3.14.6. docoerc

+ +

This function executes a coercion that was found. +The same shuffling is done, so the top of the stack is again +saved.

+ +

7.3.14.7. stackupto

+ +

This function gets a pointer into the fake stack +and must stack every token including the one pointed at up +to the bottom of the fake stack. The first stacking rule +possible is used, so rules using registers must come +first.

+ +

7.3.14.8. findcoerc

+ +

Looks for a one to one coercion, if found it +returns a pointer to it and leaves a list of possible +registers to use in the global variable curreglist. This is +used by codegen().

+ +

7.3.15. var.c

+ +

Global variables used by more than one module. +External definitions are in extern.h.

+
+ + diff --git a/src/olddocs/ncg.pdf b/src/olddocs/ncg.pdf new file mode 100644 index 0000000000000000000000000000000000000000..826a80545539fbaa79b3968fb32cb9c2a04d440e GIT binary patch literal 120172 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%0AlN`i<>e$_U zAh@4k_I;^|fvXkmO}Dr5F2!)yJ)|!uMQr(k61Igx0zJmiotZIctQe0B=rd#}rq zo3d9&Ddqn-@3iRLB$j9g>yLS3Z`M*7^5%4dg+D5}YitwJdnBT=yCb~7Ii5)zoxsh~ zZK`17ibEJ*DT<5vLa@~0rSdI^SL6i{jPZT{;Y4^?6$!>k#Z!fIi*Ev@bXU6!1_B*c zY@U|g^`F~p1d>7doHnq0srlOj@YgxtXW)zIprb!_CmVji@$6Q_sM`TI7MRFEI>SSc zWa|s=7Jt3Zy#UWm6!rtoACX_}RwNG?6jJ)3zQBL$U6SxA+3a=ci)N;+>dL)JRkBmp zw69o|ktSi07rj9fbFAQL1i42^`|`CvX{PoCN9(g=FnaAM#&kcnB^voItfu={yL6_g z8;$UyWX$BQ#2Mm##^=T2i3d1`xfLmI0=7N&a^ju{)#M+%_O>;|-Orm>Jv!OA$~msQ zZt_&kGSy$7;?=C()MDIf(Q&oz@ov<4)&wPChoTsSe2W{&OcuZo!dErUI8~HYpOlI= zD2EDuI`wATo{0HDZl7lK9I;)Q=vd;Kqn@S4K@A+p!%;uC2WVI69#AHnJ1&YzYV+z=FQ={tR(9frXEg{D15Y|JNL*;Rk3w^Tw zR9yi9?@DJk-RNO3qC?vdvMmX1Y297U^G-^cji0TP|28N&Fy+~4Lb}S?s0EZs=`TH?hHQF0+#SNGjfTd_9i)H z?~w?RNsnAQV~>p>INkhGx?m_Gi+6zcG^y$*&O@U#On(;uEt7A40+1|Oe5#Q1*(bMdQb;A(}6>VJo3tsc%bPFmt=*l zZ+!+`r|)wWS2Mc-A?5q;Q;xLnXQ+C<M8M$l(ARM`s!RvXtWubFq)a^XvW zan9`T!JgMwlVlEp4A(6@fJi2sz|$k{=Q6GgZ|pv-Rc69kgY?xyceP9CU1i<)4BWBE zH3cJ>$|O~!VjUPR;MOnUA8;Mb*MdC&?co%9Lo+)C3}O(k01n63J@}~sK_wHr2LScF z8c-Dw8mDqaS@!Xc81#_6)OL(kwo2|GopBWA>da;Wh2Sl_Wm_gReKFTP_fHa-VEnLN zC1Tg{DI!v){ZsjY%Sqi@j5EmDto^(XX?KQ&^fTOtubMLmkyG-Oa;Z~$qLWN$rd|eS zg9yComnxqlMs~{AA{8Cz zZSj@=yq^awWmE4qffPDmFJOB$qcn5$FgE!%`>Ie2K1`CSyrscnf_ zo@jO9B1T;e9=X+%1T+e4o~HP88@IQsYvRiyZEb+IiOm+rnXBPw1n<$augS!e-*&ZaptH*T*>niZ3gg;*Rlpb7h4(*yFv zs0o{g-?t7q=h?sG2d$l0hbM&WE(V!Mh^zAF#p~~tvIE&7foLJtQ&A?x90JJaV`R7P z-Hp^8w%)rX5g92Cdh!aSmb;gWMYW!_5TB z9PBx=AG#Lr*+RtsD7Ne4pRoipyL<0cW{5}=><_{+7x}%gppV>qXe@1%x8{wLu&RDZ zmt^dX^6SKyfrTB8oZSo8U#oxGeK=V|L}LCVt|~B3`tKt{C*3c~)at#MbH_56i4z@e zWS5pPeBUh`t3W<$o|Y5x=?IlA4d$0uF_*@A%bSV{@!X-p zc|TBu7dLX3suv~YFR#SY)g@I0V0kL7ERc?E0ogcZvA-*V(a;)|nf=zrI(-qRQH487 z8}nif$46!F!zrH0V>ha63MSgkSOCFITv09@X2+=&yX#42!^sobY67Sh@| z3-EpjTX6(J(wb($8*LS^Jle^F+I+2s!Czk?*!HS$Te5)5)m>CQHppQzIy`4`;oF-! zAz|~0rK8IOwd%rIl-keM?#W8}D&X*D@E#8$cjm|3ME$`aS@Ybjo>GpAKHADht0BcU zSA(WEuegO?mgZ13p24dDS@;Vy8;1N#cfvJyu1YpFh%xkKlTmLNDHU zHcX^AAK&bS_37rZ(Ux4E6%f0ndDbre<4{F0r7-C zR-4~}SIr!XO-pv8>aW{QJ%Lo$-dUxncCMomJ|tn>f4;0AM~+T8=5@%!WUXqM@Mwua z&TSazG-nyd{iq#~Wpo>o*B}4(@u-Q3S`94Z{{w#tpeOmCisWCV@vkCbW@P$bMe?8X zF{c01fGk&ID`{KeUqw>R?iFz^M76VTsmTUp570m}lT66Qa*<_c*ixce!Hd^B@Wo8d zTt)Ki0RysMZ(g1B;Pqf)_FYYcTNUy1mOpcRbJ~@!Iz2ZSe^TV<-Tt`}?)-E?&>6T?<{+=t5ErXlY zh0~XkAWrXBeNIs{mKrxzS@|W%Z~a42=K|H?SgPp+LmSG)vwIC^UUl-(Fw}SIr8ZXa zEM=soG~7vZSTJJOoDqvAKDTdifJ^I=cB;BBpPkIFcaU(#0asR|{LN4`u`0guGWoZB z4mp?P*k75yr@W(Q9sF5>z9f^ywmhj4- zysbj@o)+<`ejiz;_CCe?`947Cq4SK_EBTX7mc6}2mNbVsf!IMk9@1=VqQQR zH>ef4Ftfzj#Wo1ripR96LsiV1WEp1xA1K0_a*a9e36=5h4z~*?nQ0e-EWh@=**#o2 zWwrBe2_f1M(FveoG4X&$h^8R+!P8(XbE$U@jy0x0xP+6dCq<^DWP}20p+J@1JhvAz zdPS6RQ;j$9r^GX$R+^{8v5F(uSsjeM0(ww$1MZx-qID1H6>&KM7|4or85~l@I^VZu zud%2_C2%lO+y^CY=L~>DaLJk`Sm7_FJ_a2A=0l0?jU|1gL)89!rf@ZV#;$bBON*?q z)0YXkR`Q2EhXv_~@4|i< zzd_{^Op#o!<7JSh0OJ8r=ma_n1J9B;gsSnbkAixcwrefll8(K3bGFW43&9DAc*(S$ z1*?B?S1bc+9``t%3#W32OXmZlC}$_oQnheHPML!7a_cfv+FHL{I&CjB3#WKG&MWmk zs%Ag@*4kbn5hYM=x2M^}fUNqt;puZRyTS@A7I%<83M%;FNdJW``KjE{>qDP_q+{CwnU~wK;ex;ACwmE@tGFtv-Hl5=9~TlBNS9QT`d7Lo6awuc7#zhi+ZUsN}fYYjSD2V+iPlbCEfJ z8`{}VX9-AF5jM68MSPP9#8Gm#CIM)a6{A72@!N%Ry zkQ6Vm!!ejkUj@^JNPpjTaUEjt6Gg{YG|msZ`Bei|8)vGEjum_RtJDS^zKym}#hjnV z01MJ`QFjwnm}<=l-U_7h#d0c+6T`2V5vqS-8xN_R=8ok1voKrI4!F@QuF$%LVtbZL zP~Bg4;I32PN?vs+md%2em_g2iCEVtV%9WX9(czIGNt}}AZJnoW73n#L;5kCbLI%5) zxg~Y~+`#b8CrSN7gOc$5^b&Uz%;d(JF&c0Gn%VX<)j;d>Y2`50{DB)EK%6-gDP{Sx zY2w|U+mXT7i?Lpr9Vpw*=HsY?>hS=ml)Fo#!S=J;|D)%X?f=H&l8ZutUL!+$vzFb8 zrM8>GX2Zn#v(@u~MnB^^7mW?Y3H5zq!T(Ado$#C)ziPzr_7rZ3am@m)r~c-9Pl;cX zPxkgCera7e+1Bt_??o!0=RNd;k_1OXu{dEH3ST&4W8z41w89=@itvK2X|OaiGDxj` zWZ_CSrhbbsaJ~s5f|5v=+}4*?{Co+d|LfQe=%RFCWSPe_?gK)$$~EVTsP$Xp5Wp$@ z_n~?_gtEtwEDKg2JbTwuSW5IhlkvbYBm;XlZl2aw4SJnOEIT*r?t%^t0FO3J5$4eI z%xr0ep3^&de(Bo9DD501S%ftO}0WXQvH%5tlJyz8|*^Jm5OXhJ{EUm zaSjXvUMePJwq+;Zc5a#$ba z?(El!2&^`Jh7@L4G9$doqKCQAlSA^1%V2G5h9?G-AVr3kFy!vwC^;i#+_s|wHtL~% z))1>;e#(MS=WBc8a6*5y1&Q!nDIdt4IJ9NAPcyo{t#GTr6tX`DgUukz(In}94O!Ow z(lWMfJBQE&#iTbB+v~axOUW>AhC}w;cswHIlH$Z571Oi?YvPvug%L0Yr(~lRb*5!@K*p6Qqx@mUypm(J@J*Hdp+R>6ry^oF`5q9w1O1Fj!!Kj$v zzpztSuhYrNkJspbz#oAaGl;;kZBQ~{8F|XH?i_0~aT=3u=}C~h<>5Tkw)ZZ+Ywg}j zM-0jB`HhXTzcGHi$4T0keYzwd9^GjQ=?qqxvvR+{QTF_XK1^u{^ok>^>;8O)a)T-d zlnVRxdU^hJb2>g}TQIWlcUSQ5E$06P3%AG&`%h^6pDYFwD-*;2*x1ZW|6yY@|Lbi3 z|E8*9HLmTp#!l?&_|D%AIWzc+0UewlJF_Y} zaylBUA0tE~&Bq|6+nB9y=H!>;n?xsn_#QWa&3?jm<=<${6ED~8`imIu&TrjLoXPX} zD$LmVd)-5Pg9UD*{gJ*N8JhI^e7$Gvl%R}m*7>9#HIX(1Bit8(hE7=y=8bPQ{EG1V zwDrEcWQpN1X<1ZJk!5Yty?r?To=v=JrULWJ(hnnX9XTD9YuVweQCWcdhx6c^z8RAl4SdD% zVCvdWK;pk080edg)%opIB-#n~s)QTU(Ag_^YOvuEV#;{sRTHM*qxDM}4$cIf0Eopr zd|*tyC>>p{hgXE#xmaCv;TS(SJWBA_F3RZ!PaaU$;AFopS8Y(ni$U35pA$6Ts{q3} zBwavi&ABfq@PF4#crUYa%Rg$r>J&5#tg8zfARKuMbGo}FGD~C+HWTAG?ykm@i_>q> z`b+-#_syvN#Sw^`22}Z4KzPO&_%L2!;copct=Jb$?x}%CqQYA*EL0I<7pMOLPMK<| zOhOjA`lB9aqwjd*tf{)AoCLGh{?l$f*@;fOl! zt)-LyL;f8rftv{pXRBYBLI z{dTCtjWFkLJQ?dc`mlVG7b{e}Ntuz8jR`!-4ZCfVzWsVDr-a$fo6EKEBn8n9^lB{i zXh_~B#a2|U&Kg%D0uFw>Yr(6C(eIv2J$U&{!%2K#IN+bKPQ^JmmA!z3YbH@odd%ZW z3oI(itRVEw*bh_tDy<5mi}+$%EE&(^Ygsb4nGgIa#yWB%DjLmk_dJNzGMG z#B&IqCt+aH28wm1FAvnHp>AEfCZZHSI1~djY0KI^k^It_TH!&5Zp+!l6Mz zlm$*c)#rV|Fs`Vzf+sV`CPFFnfr4aFK%_Xz7H0<8r9_>t@IamSAF#xRp1)z^xC8ge z>*c(t)hWoiZ;j|A3;7Xex@Ji-=atcZ)2uY@>1BfMNTBjio>g5~jN*=mSxLexlz1JT z?h?qTnT-^cZ>TO3EkA|JX@&M#VyHSl!;Cmq=A>Z4oeN38RpYpivE%&I=)%3k{(o|U zglwDanrIsUN872Xv6!4zqTqz&_Ksu;%d>}35omf3Hwp!fYk`Ec(cr$?8haPIVR$E| z3ZEL$l~bL?NfVF(!#kWpNOm4?6qRR}QiNU4{z(S(@{yG+Mi?r>!t!uXm!K|9WTAqr zXt@eSy@#~oKG7!oBv1&zF}ct%Xr>oDBC8_YX4PIz5r-8(V21#iHlSl(vVxW*S*Ni5 z^p~uZO>=Y7&O`%%h?(}1#j7~M#)`Bl>-i~awfeIzFy~mR6aQ(Tl07os< zx~TtB`OGl7EHpk%5f0xI9{d(&;``1sUQv>@$^B>q%=LcA9?U2{Z&ryGlUDv4Zc!NE zTDaJ5pBejus;LS~kFy3^oCv;xzB^++hq zT9j;>pcgoi#)cnl997da6ml^9?F`uW%pJv_9T&;)tvf4MNooR#C)3agD6`bevj+l=Y ziAel@(t=%W1ybIN8`09_0LN>`Vh>q8RNOTZN2P=&1H)p6(-rG#nnWuEHFc6R8%r2=E5uH$t z#nz>8IIDl)34Xd<4e0@kQ9ZL*Y=`MhC9dV36!}X@su|VmI|inCr6Rn|BgDQX(AaLy z+n+X4+|AjFkBsK~DV}sp^=C7Y&y*m+0H;fz)ou&(urgPc|Lf3RqcBTi$$r8OykS%< z3ZX5%4S967#It(-Qt<2IZ)a|-jwMO6on09-s%Sn~rycLODFHC5zU=MzIW-It*v2gb z$P!E{fU$tUb)d4EVks8;&`Wm;h@Wd^?I=fao;k)@cuG~ngWrcEn{OTCQz_jzCr?)F80C6ornqQLui(L}sxM`++m8%G;~=?GJzN@x&Y+#YyJ#fh`C=euxUG|RU% z#o14djXK@)^W9y6hU$u*&ddqg3r;AkFtHKu8Kw|b6opRt2uwdCyJeWqSC;CSQ}M#C z?iBY1%e?x7Z7^=Ixvm3P*C5_omn>iu!LN*)Xxf@Tm8~A~@)Y|T5`hh1p4e)qbSuzB z!Md^ZMyk=qwkTD8uc;Zw%T2{0xZ5$oMB33V?{9pTtD#fZ=)>{v@}YN(->_+cy=lFU zhT5vZ4VR*HAQ}=_$&R@``xVnC)B6_DKdRRS)oX&Q%{15eRb%W6jM+n|>-QpU^?7D1 z`jXx0PK0ArW@}%{RcBjvW(6a*lj8QZXizeTCmHLK?nVlgq+v^$>P6Z0>GFDJWeg*$ z0B4h~bN;Aki+p#Ej<37tUDs{|z$g#va@gX zp9CgOK>LGGF_a*qQ$hmVnLbLy-C2=zH?-8!uFbH}`Kve!?C_*ai1}a9iKIPDms=uEwX8sFb{!NN>zX28Ux1Z zQVudbbhsAg5>;gBOFEg19vSPB?ajR|f)f=Iue*6LaAXTA^CvI^!5m$|zxs$z#b908 zC}Ia*`%?#>Ero9~!0^I#`BBpbb4?NCq{%>^ucR~v$nU5><~poJkR2jHfO%VTgm z$cH*uNmO->u3=A$3ExBL_2IW*$xq&q-%E(L!A>+~Lud4)sHz}gTtG_pS$&o`6vmRc z{_xVhx4TSWzCc@8^d?qHea7tLtN!DzUQ{!|e>jxO)H|Ld#Ck0EYn&$*y9t1H>2wXA ztjhoSUh;YBY?haDvv|~tjE^whZn#wDrSoDdgjlxFO>J%9&`Vw9Ql7)f@9=WF+Xy^0 z_VD70Ki*3&Z|I&t)S$NA*8_gyuqE7Q$DRUe$>xNW6$NFm-3j!?nPsILut(PF!`Fg2 z)0i1Cc08W9YKH{6>~syP1&CQ1;nBpEHuV21J|~`&Ihy7+ur~%d3~;jq7>s}SK#`I8 zz%N1X%qiy{vPCmr`|5MUAmNq6-6=lw#%G6?-QFqM;+;49jd;U3<315D#<9YTBW8rI z1be*m5DJ|k2%lTZeYQed%J^;@;QtGlt)=zxpK$RnH2fD_FtGf;%_f$A*O>k-{_kcJ z3*-L@F8;}XZjJxD*~9_{IDIdL+vthd0nN{Ge>Et%>evnRVn_x-(MakVhMt+eKq2;H z@S3lzx-&DijYNa99>!R-?#k_Yp)zNF;uPQUHujaD8a)?1H(fk;<*zyMQ?L2;lZ<{q zp1mXFzh+E?wyoXddhp0$nC-M*U9@t1k{_Ll9{y%>EN+ubuhR?X+sa8>n>!=eNJVQp zr82_xR+!Kghr38+9%|K<_9ymRsK+?A`$@Lq~h_z&xIE!^~ozvcn2K1MP8>u{GZ!(^whbbcu3glL23y#y$NMUxu>n*ohQdLa~DR%{$fl4y73^#0`6$W7Q(0baT9Gt3D zdqgq`BYakq>t~Ez=^3$)GwvNkRCQmm?~3nrCnFva4<5XMPHTGa<-_`OPAA#!L;?bj z19A4xe5@<81aiOL%oi-tP4xa&!}|-aikTS(GZD>J`%VP!ULuE|!PVvf&{+<6r1LK8 zImUJTuD{NC+OzLftVcQXE04bL@zM&s%3mL##!9f^WmfKqB7?S6vSI{pu>;c#4n-0eu$qrk|a&umc#{#cjQ_ zsQqlZOdEKnr4d5fpjV)`#IDHN0E#J=bgrKOcV%{ehFOS0iZ;IVxKEK6a!QdfsDHAc zE+2-6FYc;1FMN8zvOF!~b0j|9b*c-oN3YH(~`VGyU34w}` z!J}6u;U3jj=Zk$+*>?*69y$anIQt-%R@#?U!Y`XHoSJ-U$}F8j3$wTCC%-yL`3}KM zdr4W8v0PSNtmz36S}+)H77jB>H;_SLmW_bjENaWvW$<3qMTE1BDak%$h%97?BU;E+ z?M1LmUG!eav<)xQQsWN?;FAu$$wXU@z12Q*{-M);WN_R895uA*w6JfqGzCnVLJnpl zpg=?fQaV1>v&;!{H_HP>h?3pZ<%%4^W;E0Z(|{^4oAoQ|4I0(?Tp;%63V;>yiQY?j zDBo(NZ`&hly}PH#%)cs*q%p?1(x9##J5rj2jlAF*7d5t7jVRH|&G=Y0Dlq=o`} z!A?`q^t&4~SmV`z3mVV%XXUH76Z|#`*A!s4HF8Tro^fF2qMVULf_%&xb@9mshU#O= zt=`pcsTI17Tb-Sh(i4>E!Xkl5DO_Wf1B&@Q6Qf)+8`@W#Vp3#S5WvA>=zVIcpP^5Z zYOWI=Bxw^O6yp+pS{{EjIIRWn5z)p*;VHur5WIut2%qP>vXSxuz%kqb6tuHF99s-O zwsW5mU=(GDBq0@OZ@nZ|0l07{=DDH@!^sTM;O7FQXtNMaP+BQaZDY(cJ2TDa&OCj&z5#Hp&7xUXN_O&~HR2TTT=Tkx3&>-qF0M`C zsR(4UwZ(^m3F4jQi|_~?%SF4R&tLJ1q;n#$xa^d8PY|3UJ(GlxQ62STJKv_KMf}RPkb^kivlPbdpJU@$B0);GqE!%aw^-3og*`ot|#5=l=o{ z&z(H_I9oOg4C?NNy?#|G>=b)~_I;#}oIF43^Q~3}VP)L*JTdilts*DFr23 zBv}u)r^)R#9j`rB2a08i0}-fuZerHX6Je8pqaDVHz(BA?`};mcfX@C!W8o5VFym2y zkCo5>=>Y4IA4I+~xSk*rbmayBY$F;P3uM>N(|V@w7*6Dk+yude6HGUrC&WK8^a{J@ z!agR@?hz#UP%~6px`rl;i>uC0H`lx~1#wIRHmsg`~W9a?35;%_%fWZnDyPtlw zVrE-q;fUTO1^5914*V6CQUB^=uKkXkgcj5OF>Ppw)UiGCL`5J})?a@<{@12=Ee zEN%rrL#V&97~9?hyvwYHp)V@1C84vXsECw%`ilawPI5&t|BuIjn?*$TItDYT85lg= z8`5FmDNlS=kyGmv5Qz?#UHI5~*>4Lqf4ab6+dX~-=v#K5pQXSMui=GlAEypP`ANLw zg~JE_rwG=Modzh2mU8$ROMyy^`RD2-ms2Z9}~*ba`E+kF<7jxaeo z1N?|DYurlqwir^I&<$vz#2j`MwBdv^rER}D z6Nzcut4>|s0`;>B$l;AaTk_U<8v8k2_c}ARzcs4z?#qeOoWOQ@BDgww#$b6NCl%YaZ5wZFTNT^3 zZQHhORBTn8U2CU}Fg zgzthRz!a|grMN3!&yhq0`I)dzb~5#GE)Av1?9}&Y6y&|)ezhm7*tN$AIPbcdA?teG z0p|zcJUUK8%0bBDsREVZ5FSR8ih%{|CwcH=+MG$#ea`+$8J&4O9OANS^I~L-ILV{`UV&t}lZ; z0CGMf;v$pow^<~b1AxQffV|dMEMQY?=;-v5cAqN&&i;xEtNnc17fWRosRI8BU> z?Ho^*$CH`&ASfRykauH0^|2^KOv2#hxvRJfO22hopAT*FCzGbW{TAh5&$B666S3pd zkaawUZr4_QTfZ*NFy?%YOG@;t9kH`hM{;%!%-ssyP_HdY0~>^AK^c|vFsbP4dipyO z{lBYKkW2*0XP1{ll(9SV5x#3tjd~Nqh=GhRH=`mu`o>CJk(D+h>IXHHVM6!~0;xA{ zJva~r>OY&Ge~4v81YoC`Oyp~4I`|ecJFO=ON@gOyNM$ITJ$5|Yl?%6$q&9mf=e|fI zN3=tm=P#d+rWHg!Oo@!$jynm&(^c9w^BTPSKv;!{L=;*;^bw2=G>ZDPDFU8~i2vrs z9+$FjDp;gl2#YgzjC`S+`a1#xpvXnny>$_4;9s2QoI6LEny%p!&yRMz*K@9Oi6i#lECBunxZPV8SUf zS2?epCW`1rmA2x5$V%MNXNr}p@f+g^E6%*(7kPW%qMjHP0cg1wPrbgPuqH~NEg~k% z>jk@$o}u2m$MN1hce$l=J!b*7jXyi(Is8h5m~Yrx8hXP_%scp7@(~j>uWxVdYF~n6 z4%FVor$X>n?SSday$U;bSsc$R^N=YT=ys=3r|P)KY64DmQ3M%5dxY02p186{3z-_? z#aFOOt(qmG{?UrR0ESLuzE~@FGCvL9GRKt)M!3_WO-E8Zwob zyOr|Y_gFbLD>8y$41HFo2pq@_Sr5_sr?pAqPJUo{vpeo_8;)Z0(Pxx>{Jct{9zNh& zWriTXlgQ~gMdIDnUwo%g=40muVB|97IA?MRl9|&A1oS>DW@SGrVhz0TKTk-37Tl5v6>d6*KMTPoP#5L94=~@&lQYr3tDFHM{hZ zUxO$Ztx0fnfptSC#qcx=XIUA{MgML%uo_%4^;n8-Xq*m)-MfU$02YBcQ^#A%I4@vr zK13WQ)h4(yVGuEgE^@N@Wky`aZAT_+DQJ4K3KQ$MN?lgizu7(cywbjFsVyun-Quy~ zjg|Q=Pk4n<`8Qg6D$D$hfsw$e(A--6kD}0y;RzyHV(*KksQUv&gYNw1C!islWF7|` zgDi-6i(lJVU#iDQok@bWD}f`J#4Gddmgum=VYw2YDENX3uH1$=`A96P?6<1g_Ig@h z>_r#pFJA_v{*g-4%-ohfRq2-jRE#o$17b`H`-x`mx9c(rm7p6&Ei|r4=&P|tco#F%Ga3df<&^-&uaLmwm z?M$ba(l9Oehw7`nuE;(>YVH_9j_`30re8K=Rf*M}2glV~OeVL!&7qq|C$<8{bUCYy z9aPXtU>99ju87wkxpJ5z1NrBXj?6|?xCo}_e}6g6zOK#rqg)C&V#yw6*n1A|0YD24q|XS1tUX9^`-DiZT6T}h*Z%9+t0 zv+~=i$`ssfm*`oo{x)JHC=y1#aC6{rKr_cbDa}1G;3HQsvtCg{HEJ-deT6Ande_^2 zdM+mm&xt?3i>TNT>@i;&u;w@4h+48qOwGeDf9I(If0mP~n@&lY!21e5_U_4E1^}JJ zQ?^?wUYTjIoGB;yIs1aE@nE4hfd$o)tB_hGc-P^GtpxX4ZPtp1(U6K-V!T6G&sHu6 zE-bX|Qz*BxTs1S?G?r>efcb~PFb!7@iPnhkC0ME{3e~P1qtm@uibq%h;Ny4_II zm1vE4`{@uU#5lD%Z1)fIur5>(=={`aDAPDLM8OBk#$UiWr0(dUyAS zTXaR=-7W+F}Uh(%X_@=W*GP1+YH9p> z=_J_DKtFlzzYYgh#M#DX&}tkj&teAD14wkb8~|qfc%}25`HPS}ck&=4^5{eI?Iz^^ z4Qu(7lkuN0|6h>)|H1tKdzSxC35xZ9B|-UWP9<)2BJW(%DDDP3iL(mbo#&wPR7lCa zaraJIWrK$XlIkY~%PNy7^bWk8W{(CHn`lf%6-ebT#4VK}KE;UrGDrS$_OEh#wtbFq ze4PEM(0)m~zL+u3UCg@nGhK7Sz;qmUPE8}Gm2S1w7${w@Zu74O&{nBurAs{dk}$XK z)C8`9`m*F52D*u!wBTs%#8eWhvaNO&vEgFTPBxn0=7yTFAbMgnU7Mo&Ec?>nmMT=H z72Rx9)VUhOwcw=l=44`SG7LtmYtYaiGLGE86!UO#0nIg1w%$&#bF_Bh^GxWw9x1`s zYfQxQ{cBuUrZ3LnJy}oTwkFJ->7t~~`5F^^X0TZ{So6RZb3`eRUExWu@-NR_aj3^; zO|nrudf(gfCz_^&d6XoYPKQ%uM?D(vhDG$M?g9-`u;~{m65nZ%=7^cWT=I4OSacUYFWvQ3pBSu%N+$+&P(8YwO#DDC^pI_VlN(%! z-EJ|4o8~1V)vy-m}$4TkV{;wtT-yHM;g@ZzKu4{ znJ63|WOdrlC&Q@Qld#HOFhrJ-cw44?RGo{3vx##nNvkQ|qzqLD?X80FcMpHaziVhq zDevNYeiMbl<`~m2gHPvq{Qf?=-I}``Ci^n*-`V|nxp!}h#PiU!H4uQX*B^T0qedNfW+}9@ zs9Lk1Ce}&#t?vtc*hL%JTdf4Sd3bh7&9EL4=cLiF!#HaHF|}0*__ez+bO-KmLF2RF z9)-T^lQ`&OAqzKVd2ov8Z=gvWcHg4y_uWi?w7>IpD)962-J>@{+gjh);R=5Hp0~?~ zFJx7hTX}(QeVk-9t%J!6_^L|{?Ucs>`-zI5s8H9j0@mTb-Ka8a^B;L}c(9ABW$S>0 zH#pvR*)t1su+-x>M$a8&h1s49NHleYUku|o+x5$zzZt|7%28k*RfS0(= zrlMm&CzdT7c0LxXHO2`P(#SG(8!ai=S1BWnwLc-PuRxE;fxMgF|0qkUd64*ns3h1>Lf|aIwl>_7FG&|S zb`+~KtjhsFt|ZJ7$LAh(fLxkx@dJPryTFj!f>~6^9kDgPv<=@~JqPI;#toUz1C> zie-v&jE_d!sfg2n>pg=vrqDK1NxVhN5UE=$PqP#L?v@@Z_o7srYUrdGpATjM|&!!eU ztoaMhDIAnhCQ5R7%&u7tGvJGRfc2Y<`@b)T#k3S_aW zs-ytGBrohXSOaDTHq0nADvH@Lk-@Z)qPi5jTp+Jwvx$7BrMb|P3%S{l11Wh!^uqOL z`TBxfS=*U72YrC3Nud0MAo+f`yt`i{r#Z<{SQR!!+CfFx`BtjT@8;pX_(_9iUGYCr zsipf=BYZ6gy4}vh$DUP^MzhF=0Zz}Bn&QAlqrR`hd zOT1Kq*m6?tHDSx9HOc?hY`B)6oH*lF8Gu}-h^mPv=l)(m1Pj%#prXwB%uwEX^k7et zOE9FFs=pKc+ha8=;yV+sNW=eb9<;TbD*+XQY1`CoL~2C4_!cTe%3|tKmH?$oAgI`0 z3ZU11-(MxioPYZ6P6NMl{5jY?ma@$@`3(!mwalnbJFE=VPeDj~p;pZC?j&o2E&J2m}6u#Hsu1_(w%|Ar{6vvahZ^))sbd;yO}`lUu?(p^qA`s)Df$%v9d-ZP7^Q z#WhnMt6tn#s@D!Iu#)rC$2P5DLGrUyf42$u)>+_)MsyUyAP|l>OVBNzbA}flO`elr z=C+>a<$Gp21=pt`q2|lh=ahYp*_L<9i?)df7M;~A<&WnmyS-%qLO+&yY;DaCvi+xg#P+|FkF>Vzj{mj8{?&jA0;2)l zi5A^Co#D9zL%o8?+Ccyr?vgZN>(Xh^emG<1o8_36I7N#pUT(yM{+tgLZJ@9ISE2Pf z0V{e2{$%b~^*B?OrJ!G)w~=>o<=fTuHl$!Atl$=gtB>o&oJKs|T^%l}@6q)b(?{3Z z*5$uvGsIiKu|@gp_K~FsCUtX7&+)CtlG}Oi@vv$4bg_!7F!^!cMc8I^M)l5^+z@Wz z{is&Z_pY3qhx;cbE@u~Sl6<$eGlJ#UuQl4(>BG56TuUuMnL*LwM$KDy<(`L&0h*pu zJFJVb&WbTi`>XCAoXTFm;VCz)j|!a2TKs$yF0Zl&=~g&UnbX-1!a+U^=1ua+msE*n#5!ea?`~MTic}FT|B!Qg74m+Jf_4ba5N=a zr0jfXMdRWN7&BG^OSqTen5ICElofw@3>Waf>uLgg|mU&X(!#}KhH}rd2HrzyF@9HV%t-S6|VJ__uSoZ4O&VmLsdEV z({uNefWDo(WW6%X;kyxBPSR9aaVyAi9X@wd6G`{1xsha`B+Of$G*1N?-27cPyr3c5 z`#S^drV8dvaSqnD!UF6o3g2O4TOqfnhWoOF9S2(#SFf z)^Y)5Sy&?8|Ef3>f2UslBO2Oxc70}gZ$y4HMv!YI*`PwWgK0mzN$G(?+e9Iwc8@j( zvTi7i!?Rj|DDiZnMXk+S)(Au5i;F@e6YL6=6y{3AcR{$H<=8_MLZ(p86b2MayswQ~ z{L%5W{ITh`8N0LxPh~|j`;?f8Qc5f025@pXq+vWqFE33Ki=hARAzwC=6G1RjBE4kv zp+w1C>~JVK2?;JimJ>TWk|)Zh#m=qeUJOl*qtOMd)_81mqM~_*qZk;-z%Q1TU|X;$ z0V=Tjs8$%&p#s6&^x)MnMDJQ^EVb=c>kVG7#aR7_q3p^fagh=bE3T2>U?(iCdg2}9 zHt9UK)zp}WoHHuc)~;X=?-G~<$1$epQ=;0W>{ofI7APY^`;504uk-nomDpnsSm-+X zYHg5v_mOkc#`*pmvZ{GhF5(DV3lMMlzwiDSGD85#?xLtK>5e%vn`iZTYvq=a1&)*W zGCH`pDzBifz>EX84&;~@FC0yEHW#_{T@y)yl-BTq&06jd-Egi8>x0h#WV}9Gvs#YO zQ{m7IemS!H|W1NSf{cZ`csK6coNG8^SxBAUm(mMG7W zVCt!at$bttr0Lu;w!mST599ewu)qXQwDYi~$LXe$cPLhnYBWdP-N3~qRRF)R%GUhR z0B6cm`IShHUhNwNVjh$>8|lAB)*3fwh(&Sy1w>=q@7!8i zu^xgk3tDj1?J>YujGgq4UOKfBRUCFE)xJ@~4?Ln%UXa z%W!O2bXGcEsc^Xt8mG`%v}kAy=pw0P);?sx5hrET^#)1Nwvo53HwyK#t77Ej2n?Zc z-aC0FBOKuC#t2+?o=t|YE)^+_A3g})J)yD$X*rY1l?hUf*}P834U!JS&np|V54UKI zm&yCOmkJurJbP1ZX}wV!iIDR0YQf&{jy1WoB#7#aJmHT) zK~RKfd*_oT-4Q}^B2kB(0-U!y4iAp~21FM#qM5)TmG0fAdwv?wo;w`6h1uZp^D2Gw zGYWh_e9JBQ;_K4#uS~xoEiz1NI!$3stS;c+5luXIgo~Zv+eP6%ccJ$oU1Y2<*elR! zMg^>Tu-tEn>7&>=btO9DRGX12q@y7!k^}8G-wKep9~Y^h63XlK)<0b^3o$KmvvLHZNVXww}c z+@te=s$0yi-rIVd&*j)miVV8nMMguRA;+t;KRf&EMzEVZWYfE*& z5=BXwYW4gcD>=HV%IM|ngD)iv^>2+SOn#=%q;gkdW3n!0&4*OSdc*d$O%HbFgSyr% zb(<-sZxD6rC^I45#09Iz)m;IeEb}yMB}$kJ%6!Q=O4J5_N`tHV9t*nvv%GrxpxK7Q zK!@2ZQSmfUUof4Q2Scx?VtNUj*iP>>l?{m?=M5tTW{3l za_0rtS?9_UglI`R1cG>`y0w6(9!sPzvRZIE%Zh6!{i+OEXuXm=L7uCczt)mvchbs( zs-=$B(b8`g41ck=PLp#mxkrl=)6ZKpunO*Chd-rzZj3D9tU_2~=dyMXHC6FQANz?s z4!n}5Z3jopDveY0+Xl9V;n_ABbPn`9t2TR#Pq4Co^RuK{+%9g1JW;&1PA?D#wM!&Y zImn*kd6GnfX{ZPUFi~ZJGu_TCwLnwHv+TUFrRs3sBgu6b^o7B5qwp-ujzYc+d^-S-dviGJrMEhUV(=EBE2>JIvqj<8jP? zTZQy@)moL3f4HF(iu)LmXQapynLBJ@Tvm0n&CG3_Jn?&dJ7waA-?zR-)&M+~aAe3J z0bz2q@Q@Ow@pO+crZH5>nv2>-zY`iaHThF^f7cky3H4a1H*H3m;l^eU@*s=*^{4$u zTIoVHG507VC5GW_!=<%+;Y9ST6|t1yu)sxw7eAwKND&i4N0z*Yw3Agm*c()A~9J93BSZGqmhlh8Kjyp7!NA|)Bn^q`g z;I%Q>y%C!F(JJ=O+AXUj3A%P&ZZxAwrcL?lSnDH4cf8l|@$`7Ro4~aQr&l5@{2d`_ z#n4LJhH>xB918B50g7yttBpP?YfnO`9rQD%6%!5@CueT`v2W%p5u_dT3Yj#rRh&JL zfnav~*%{zr?&7$Qk_r_7ca=ptGvaOlnW3VO!!##Aj%zy+z*bR4C9XoVgLeiU+8TYA zWh`sp-0_L$dbVlJ%DUUMQk7+FDA#<}R$HfJ%VTH{4XQ!4(RU??ZDF8wP|_n*zvclv zu+99iULkt!c^4n~TGLJwjOz?0W+Pe$ItO(MRkY7+^$ClY8ot8eEW2PTp4{~@OPpyu z353w@jW@k!Z5DDe?2>kk<30!x?*Q~}#0)PDB|*;O+9dR_zm-vxCB($4FYoG_IcGN! zzCP$^>~&I4RI@!|Z$=&>!DKLjx(EzM*j1~96Z7<%U`I|HmSxZ0o(KlMAdHE&y>LEA zq)b6wzeeUWaP1=I)1k@J6;NBT0zBL)uOV8cjh_yh=Ex~?0KG~O!v!SNwu-yid!cG@ zUb*$Gj<<)g<>nK5@{#j*4fp+n;oHpB{Xb^P|DF~9>jQv=jpKh>(AfS{`eXZFNq;3; z*Rflp=wE#bOyDTNRvNTndvJ$9mIpxeR>iI>-wm)~G%;@2D#gOe>g-~B{l2HUJnm+k z$!@4F7f_Kbupv z%E8UJr1rAy1Lw$Ow|H4edMJvZ2p`js`TTHMi->mk;g3j1mv-{iIY}Z9S=;SLrQi$q z<``tZAZrR`ml)Y9M~q6rE9lYuv70lc(8TYBC&x+!VjTJp@;jkR3F5AgsOR!~S~=+# z>nY8iA6b*dzj*H9@wLQ^Zdehk%8#Antkw@jnb`m4tpBy$ssj{#Yh4fT6qSoj*`+w5 zl{)bkES}~$3i44eR7OPOmvwH%a9Sd{QdniT)llFKyG`&07**W!euVkWy|!P=(N0{G zGvZ=0WrSul1B+0CNf_t!D>;%IxnI3ScJo!*?p>$C&>l5TX8)ZWhxI`oh4!vRaJ&do z@1`E2)BziYdR+-OuyCO3mOQhd5P*@%XbiXCRCoDuDA&1{SRhe;UPdH;87EzEK_#pR zy;qm{%<-0cy8E`{D0fsXYF9ygZe&fQM67DoMUy}wXYQazO4qJS6b+S1h9D^mM39ay zlylBPERof`l#h6n78mljau+^dTY^(!wucbFUvXPpkTFFguYe^;l%X*F4Y#=Zgn#vP zReHS47H){v%6q3a5=doW)N*Ua6n0WZ@>Y1xgU3pFe;7i<)aUsNN?IBElPb_&0rVIl zjDTVOhw|%U9n?hJVrQ9-XTi#l6|r|Ouk%{e-2c90RdMWLjsw~!+d9eZLZ!^@7UbEE zY`6TJ)#c~{w${g_O?FUM+kOfH9V=mRK;LsWv}87D6fF^4RSvH5U#K3it8|hfrfZSd z9)E#Gz7J@zySG+&$<0z?!kbhM72`55i5}84CrdoYhoUu%>Q-woN9_Gj3(DLe(n2}; zAY&_gRB>D~@LI)iv}i)C)J>-$Yuw@$&1S$Odwi>i^gmEhh4&o7fWH`Y28=V_BX=|c zRSvo{3n8;nIc1!)dZL@@mr3F6N9UEAcWWo7JX>?Ek#V(B4q2VA!q_#q$`O?KL?_g$ zU$&dA__sWl%Y$k{(EK74c=Gs^0;Ycd zG7UD>{$+h+4k{*GQ{q0u+R0mrxkOA0n?)!~mDs$TJg9n|ea-(}WOmMl=khQlBpWmU z8MA6X6Yz_`FE>AE@|9ZV=7e^F3bdO=9`*Mw4H25R3C&w~UZ0FECJfMhS?re=HnoZ1 zyKeCvZO0*hzSIOW3G8e_fj~Dbf0aFt$9{@bDRq;eXu>S#VyoHdC-Ps_mwmb&zIR}; z)_RdoGT_U%Sz15XA@_4nEyAu>s zv<`7w1zgG!d@sp;`)H^Og=uvOJx8qBtamIHfurIjQ*}2k?MJ##)w114s~Y0;RN_nL z?5_{c@0zF`7jTzf-ec`_IEUDZV=7K-MLX_aCdjNcfqC;V@M}acX`Uvao5u~75Vvym zd2np?>@=wbqX*0{hdVA^5TX)eA3{pl`md5$VY;eZ&!O9aV<`&1fwc5D4D~&OAKQTZ zMZ575C}GW(gEoV3kk!13e*J=O%BVxb+rQNh%iM_)`GU$Nl`q=N)0Q*5Rg>5bqUC-u z7GbY8D&eO7gv{28BRMtmx^rSG5!GoT&4RM;HFi@2nre?!2|K9EQUigYtfD@HsN2F6 zbUgBoFgYQr@M>EvKFjY{A~;_b4z0jPZ_nmi1H4O_sA+4}Aswk@f`1K+_IqJp(WfC; zbiE^xV6-O_uf<3w{c5m&f&1M7D!3?XHM4KNVjJLS#Z9x)&=-Zr63h48wHDf7ZeesE z*x;Of_Mw!-9CHBBP-scd(i>rf-GBD-#p90({u*NTBDNuZXj|MLG7w~g!4W@TbqxyQxLAy%p#Ydcu>e})pb9Ed2yTJT;PDFu_e8V z*Szoi-nFu9$pST=d>muY6R8DD+`s_^Ck89ZORtpc_ijt)S9$4_EbS1dmz`$5c>^8Q znypq$*X9h=S=#Y2ip|(!#y(-o?dPlbgn;bh1YCp+*J;-?6gT55;U^|P;p1jZ??_$ZU<00-HZpG*`IA`tVXB& z3KGe+|W^YO{xOhfGlXs6W_`w1ti(K#C^su<7dg zK9%N-aspAs*MO)e=$QM(cVEKP3V_;_Zct7AG$v`jqEG!p*HUo5z9e{J^&?Kggy?lic6 zAgiU2Pgsc3Ppqn>e=FSSVCRonC2zHTFRiIi>R&UMo8=pSN6RqtF=JwaQ2h=w%XHtu zGB$BMAi(Ipo88(+4swhIfd3)1j(d?j-?(G}V{;KF%p?SA_#K_Q zb8V@>pR@?8j6u;1wB)))sK&D(p%4vO9=!;Xy-Z_0HYOQ)uA$B>$xj9F8^ zgj(ifcimy-^iG!L{>I^r6@2>+3Kxb&@$!(D)<*M;_7d>dZ-)S@kK^RG<>7<-I{!Z4 zE_5TrH?0My|GTina9xxaRS3V3e{l`!_qo0d5P0M(n;X&p0vu{j1uyF?>HGGA4ZGku zZH=;O)BY9ug2V`v9tyWj<5%TLd*t=e@;IO40pa!=%6ulTfMAoSFVwX_D%=2|t3MWJ zi!bUb1tR6#!B?BVxx4uO?qd_heQW$zTlwB202c=~8Jasuyh4$6fA!^#O$d8@|ixWthdt4j)O`r}*eNm37nH?m9s#%f?7TfTW!3;0RhrHYrqfB93&jw)B1s1?GjMM@) z_=I7a+Zi;rDuJJ|9xD>R#Lhi)q`ar&wd0TjIDT?-7me?G${#Me{CT(H7s#b*)uN&s zTwZ~EZfQq1Xo;cX!~}aq!3IlW@>L=cfmyYEWTC@PgMGfYzPGpinTmP6g#UUp0OW6m z|L3Ume-&mHW{&^KO0oZ^!p#1^QkY{jZR55^k-z==0LWNOYT2#ZWK>EJp9505L;+Fx z0g-;;u)&3^D7cZyQj?95-(Wvy{48BEwH~p?cnD>vX^-#IEG!@T!^#oqe%pHw|2X@g zNAWY~MI-1QjYjBW<8gnuta%kwo}Gt(v9Hc#esEaf%F}mi-Irl=O&OxbXK*d8G)bOqe>FG5_7PcFTC9 zt?u|8M{6_^l%aOy?N*N#ufL?qxe%T!CTZL@0*q}1yNh8p5Lt`DZfd~}9VKWM-iFYs zmx_}Q{sZ>ErG5b}SZg13GG`c&OX;=yOV#TuyAY)Do$*O9jT8x&Y?!3gcWVBy)JmW_ zn?W*l9Vi`0dppCIeNiloW}T(}CLW~Nm29(S1-D^^pT69da-zZRMFrvQ*wP)EW{!Bi zYb_(at%~RNGm1W7#p}Q+D&-`8d7mf@hJz2fE}&D#3gJ9dV@yBe_<-v}|HJK;{=*WM zsUoTuHRpcZg;#F*$5W*F1D;@u?)tB(x`iZX1~BgnwJ-e@wgtnT)Vq2@-|LYY=I36_ z7OHY~fq3{NZzd;`qR*oOOCH{1NgtNYyBM}7{Q14+dQBt*QrFa?OCj&=0)CRts7jy2+b05svrz$_ zkL_Qt-|!6mx&nF^1icwMJJyQo+IAp`%#|72(Pc^!`JNENQvjJmPr(FSd|^}>g&qQ0>N{ceVy1rY@8Do!m&5PrtYp_)1LCAN7~u( z@R!e%u7}cGYCWhdOl=8qCq!m%lyyJ1L>f&6Dq;RRHWXi5_v`?BlZ_4;anl; zNY-|S+<7J>lub%CFD)-zd;@YE4cX)L2mGb84xAfrrgEpOv7&A*pKuWX)66~zA|YxM zgKbN5pFBcVFV<&!tV1?(jSv=SJo-)sYZ&;`EJIbOu3U%Z7Hwbc2JOuRcIZhJ?hmr# ztrA*G#)NLsQ=&jJwiO(sSp;6oH0!tPNot_q0*V>6GM!3Zq4~uh8M@vtb>1ZggA;aY z=$T@D=oomC%2HtyMDxv{$dE&Z*OI(t8LOl6zQaGCQw##G9407tWI-m+D?-&wQ7LCc z&%EIc(@R9*b11mHrjQNW2zkIb;XT)x{Ycq!H0}dgG(-FN-o4s0(<4AvRR;>Yy0b^M zz27@71kc0#u10fQX2JfE7=HNBmm4TWN9)krdV%_fTS*Eb=2>t>@XwHQV~?sr*Jjih zRjdIph@oYcDqbdc6am@eUs1Qd6fCmLlDd*Y6@Osagy5$iF$ryoP( zHiI+k;q5tG0EaB|d&Gm*@&`kmY6jj{!?UgLM#-bIytx!8ZE2mMQ&)DkYzNWVv5J29 z4nLgR2II~N&Lq!zj*->5P1djjtoD&Cy%n&kUmr0_8+M{`n&vbb;k|ZtSII~4Z_AGW!De=q zbH4xMkbGz$;mrcX_trkm!v+dGgh|2w(#-D1{2}4)3@Rb&Z^Q7Md)Ud5SMRyEa+^4q zZYQ3~M);E-e66glVai6du?CZ(IE~Gp=LJ`_o8|cfF-#v#ki4?9PNJX3oDzhFSEPLAIW&dAlr(1U0|6L&Sq$3_M zZpv{hjzpBj7AVIa(6ma7C~WxTpp7Gr=d^w7!TYoS>3p%cLn_e-isct?nz-Z2^{+hU ztw<6;h4Oji_wW5Vj)O3y*#A)=GwAjH`y|Z3H1@~o$7ASLx?qx+o36< zIMVL+Cx}7juTya%%3kE6@b;~pYIfAe;|zJ+rRK99o`#i9?E@iucr>J!pq(PKB_PcoyY! ziTfS zxyJTtnA=ac*33Q0Ze;LNXDsd_ZzH0#tT~G*sEPtrmmP;H#sTWB?1Ao{2J+sRhvM+Z z&SFu&hWKjCyv9B11jpR+eU7(iE*!7$b$x}y{4z6pap`SVJgUn(4G=L|{y!{%q$Am~ z-x+&4{U?s??Ckr%wh8Hhg=TyAL=X50zjjr$i%4e~#Vezyw#RN1{6{4$bye}!SZA&B zp88taER}@tE@oKg@zIRy1y3e@_e8vUqUbW<+JTHej5gc8k{EZw2Z(qGq1)7OC_GPY z=b@P!rBPS_ zy&Y^n#qwrm&P04Kmq;L7`1Ke})0)C@7gTCMq0-*^>4q5Zr#ikok+!xGY0#WJUE3@= zp0&n$F3&6*TYQw-naRbz2vl=sU4b@)N#T&XqLxl8{W1b2`fX@V{n|p$4I~b=y>!VorUtJ!uURTp3MUwFGe!bd>2A4w zE_F0CRNq?!)~Hf7=(buT0ovr#_}7h-?;4mycNS(-ye0o&W^3-<;c6N;F3nw_ zCrVHSiR22B2m1^v*fD%Bx&?}vRenf>%HzjeXJVr!K=f)PmHzZR%BN)AH|9Dn=z{J?Yf zeAl_DkP$$psY}&vXb<~>a^tIGMPOe!Hw%ELK>~pZ=>$zVZFx?%QZt``S%TSs$5cRD zLf?4g`hV>W-eHKfeXfddm#NeRjMM8{Bc#@f;zit#6)38V@N&2EF{X*b5k`E5m2znX zD;m>cBzV|;?1b-tDaoZuD%O=eg%;b4gEk{qKB_|>-=7G9VJ%695Od%gsX=;zhU8?0S5C);O*E*>+T zUWZkVobLhtI_3Pc4o-o?ahf-xmycKS@uzf%R+nqRp#a3h94J_fscwUEA zCsB zx$Is#{T>o@hOCH?Ld8@kJJu0Gif~5P5ZJK&JoJ25-n@v=U_3LF;elg#;dC3rDIYabk)$Cw-a^sQ zXxJloe!hCdWf`g;7Nly69zcsZ=N=aa|V;bRpynvAHXdO zZ8=bUH82a3JB9){QV2r|fat}!FD>fqpS1#N$3p8{I^Vz`S03E)v{17aUeL^T*TXp$ z4_eiMO8TYWgE~}q`>%en^L17qnJLcwbx>R5790aUvU;)*Kch}79>aQqKenB_AvS5| zj76=J)Y34HV#t$Kk2nZG>VZkU+&yss@_~n}GxHAm5izIvm<3_gad(&g3Ul$nYM3&kSqxFkAe5Yadqa zjmd5CQaGY>GPvj+CR9(5p$Z=eWH>8*1(w2s6F3dcaN=Gxc0Te}>aC@U^(uk~Mn-k? zq`>AM?@63P2|a%D!Vo7M>0pI5st!DF(yd`d8Mwu9p9(-TRgF8YPu7e>qx?-281QTv zlIiOb(&=IAfDVwf?NV5qR+?zZV%}fRngfr(&CJ%i1BC8DIMXGOIxsqfN5*_L*Fy|! z1@~qd4pqUwy`^%Qz#nCzF-`3EB^BI%%HVNNRC(GFx6UHllp#-j9{Lg__!W>vlDSSE zPe=0QAxN--;}U+O6da48l3Ni!0t|dVK`NAK{d+s8Bp8`=szk3=_pz@cLcO^=HlZ-TIP zO!WH;H1?AQ1CFWOR!!Fr;wNt3^FY7^m@!n_yzVq?NHETC7});KbnwouH$xioVWR6x zAqar3&*|mzTl%|RWFTvAH_C5!|F2X^yC3)I-%0czW|EEJpUMQ=znMw4 z|B0DQQP=r92SoMR(_;iR4A!bHJ-Xu#2QH35Y;Rd$L5mM_F;Mt@6{!=cos@iRv*fpr zzvFc49luB=YQ=w5Tb|M3bklK~I~7NioB(m&_tmkZ=hOW`LG(TSwSF^#zozE*#wm54 z^t_YuZcCz~J4u7?fjL!(a`~lNANhOb`2%0AiX!f8fogWRv$qo#FS8YQB)_icZ;_!> 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

}9?{H7Z*dZ^Uq&FG~Lc$t-nT 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 G$^8qV`toJ~ literal 0 HcmV?d00001 diff --git a/src/olddocs/nopt.html b/src/olddocs/nopt.html new file mode 100644 index 000000000..0f2e17236 --- /dev/null +++ b/src/olddocs/nopt.html @@ -0,0 +1,1527 @@ + + + + + + +A Tour of the New Peephole Optimizer + + + +

A Tour of the New Peephole Optimizer

+
1. Introduction
+2. The optimization table
+3. Incompatibilities with Previous Optimizer
+4. The Parser
+5. Structure of the Resulting Library
+6. Miscellaneous Issues
+ +
+ +

1. Introduction

+ +

The peephole optimizer consists of four major parts:

+ + + + + + +
+ +

a)

+
+ +

the table describing the optimization to be +performed

+
+ + + + + + +
+ +

b)

+
+ +

a program to parse these tables and build input and +output routines to interface to the library and a dfa based +routine to recognize patterns and make the requested +replacements.

+
+ + + + + + +
+ +

c)

+
+ +

common routines for the library that are independent of +the table of a)

+
+ + + + + + + +
+ +

d)

+
+ +

a stand alone version of the optimizer.

+
+
+ +

The library conforms to the EM_CODE(3) module +interface but with routine names of the form +C_xxx replaced by names like +O_xxx. Furthermore there is also no routine +O_getid and no variable O_tmpdir in the +module. The library module results in calls to the usual +EM_CODE(3) module. It is possible to write a front +end so that it can call either the normal EM_CODE(3) +module or this new module by adding #define PEEPHOLE +before the line #include <em.h> This will map +all calls to the routine C_xxx into a call to +the routine O_xxx.

+ +

We shall now describe each of these major parts in some +detail.

+ +

2. The optimization table

+ +

The file patterns contains the patterns of EM +instructions to be recognized by the optimizer and the EM +instructions to replace them. Each pattern may have an +optional restriction that must be satisfied before the +replacement is made. The syntax of the table will be +described using extended BNF notation used by LLGen +where:

+ + + + +

[...]

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

- are used to group items
+|

+
+
+ +

- is used to separate alternatives
+;

+
+
+ +

- terminates a rule
+?

+
+
+ +

- indicates item is optional
+*

+
+
+ +

- indicates item is repeated zero or more times
++

+
+
+ +

- indicates item is repeated one or more +times

+
+
+ +

The format of each rule in the table is:

+ + + + +

rule

+ + + + + + + + + +
+ +

: pattern global_restriction? ’:’ +replacement

+
+
+ +

;

+
+
+ +

Each rule must be on a single line except that it may be +broken after the colon if the next line begins with a tab +character. The pattern has the syntax:

+ + + + +

pattern

+ + + + + + + + + + + + + + + + + + + + + + + +
+ +

: [ EM_mnem [ local_restriction ]? ]+

+
+
+ +

;
+EM-mnem : "An EM instruction mnemonic"

+
+
+ +

| ’lab’

+
+
+ +

;

+
+
+ +

and consists of a sequence of one or more EM +instructions or lab which stands for a defined +instruction label. Each EM-mnem may optionally be followed +by a local restriction on the argument of the mnemonic and +take one of the following forms depending on the type of the +EM instruction it follows:

+ + + + +

local_restriction

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

: normal_restriction

+
+
+ + + +

| opt_arg_restriction

+
+
+ + + +

| ext_arg_restriction

+
+
+ + + +

;

+
+
+ +

A normal restriction is used after all types of EM +instruction except for those that allow an optional +argument, (such as adi ) or those involving external +names, (such as lae ) and takes the form:

+ + + + +

normal_restriction

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

: [ rel_op ]? expression

+
+
+ + + +

;
+rel_op

+
+
+ +

: ’==’

+
+
+ +

| ’!=’

+
+
+ +

| ’<=’

+
+
+ +

| ’<’

+
+
+ +

| ’>=’

+
+
+ +

| ’>’

+
+
+ +

;

+
+
+ +

If the rel_op is missing, the equality == +operator is assumed. The general form of expression is +defined later but basically it involves simple constants, +references to EM_mnem arguments that appear earlier in the +pattern and expressions similar to those used in C +expressions.

+ +

The form of the restriction after those EM instructions +like adi whose arguments are optional takes the +form:

+ + + + +

opt_arg_restriction

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

: normal_restriction

+
+
+ + + +

| ’defined’

+
+
+ + + +

| ’undefined’

+
+
+ + + +

;

+
+
+ +

The defined and undefined indicate that +the argument is present or absent respectively. The normal +restriction form implies that the argument is present and +satisfies the restriction.

+ +

The form of the restriction after those EM instructions +like lae whose arguments refer to external object +take the form:

+ + + + +

ext_arg_restriction

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

: patarg offset_part?

+
+
+ + + +

;
+offset_part

+
+
+ + +

: [ ’+’ | ’-’ ] +expression

+
+
+ + + +

;

+
+
+ +

Such an argument has one of three forms: a offset with +no name, an offset form a name or an offset from a label. +With no offset part the restriction requires the argument to +be identical to a previous external argument. With an offset +part it requires an identical name part, (either empty, same +name or same label) and supplies a relationship among the +offset parts. It is possible to refer to test for the same +external argument, the same name or to obtain the offset +part of an external argument using the sameext , +samenam and offset functions given below.

+ +

The general form of an expression is:

+ + + + +

expression

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

: expression binop expression

+
+
+ + +

| unaryop expression

+
+
+ + +

| ’(’ expression ’)’

+
+
+ + +

| bin_function ’(’ expression +’,’ expression ’)’

+
+
+ + +

| ext_function ’(’ patarg ’,’ +patarg ’)’

+
+
+ + +

| ’offset’ ’(’ patarg +’)’

+
+
+ + +

| patarg

+
+
+ + +

| ’p’

+
+
+ + +

| ’w2’

+
+
+ + +

| ’w’

+
+
+ + +

| INTEGER

+
+
+ + +

;

+
+
+ + + + +

bin_function

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

: ’sfit’

+
+
+ + +

| ’ufit’

+
+
+ + +

| ’samesign’

+
+
+ + +

| ’rotate’

+
+
+ + +

;

+
+
+ + + + +

ext_function

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

: ’samenam’

+
+
+ + +

| ’sameext’

+
+
+ + +

;
+patarg

+
+
+ + +

: ’$’ INTEGER

+
+
+ + +

;
+binop

+
+
+ + +

: "As for C language"
+unaryop

+
+
+ + +

: "As for C language"

+
+
+ +

The INTEGER in the patarg refers to the first, +second, etc. argument in the pattern and it is required to +refer to a pattern that appears earlier in the pattern The +w and p refer to the word size and pointer +size (in bytes) respectively. The w2 refers to twice +the word size. The various function test for:

+ + + + + + +
+ +

sfit

+
+ +

the first argument fits as a signed value of the number +of bit specified by the second argument.

+
+ + + + + + + +
+ +

ufit

+
+ +

as for sfit but for unsigned values.

+
+
+ + + + + + +
+ +

samesign

+
+ +

the first argument has the same sign as the second.

+
+ + + + + + +
+ +

rotate

+
+ +

the value of the first argument rotated by the number of +bit specified by the second argument.

+
+ + + + + + +
+ +

samenam

+
+ +

both arguments refer to externals and have either no +name, the same name or same label.

+
+ + + + + + +
+ +

sameext

+
+ +

both arguments refer to the same external.

+
+ + + + + + +
+ +

offset

+
+ +

the argument is an external and this yields it offset +part.

+
+ +

The global restriction takes the form:

+ + + + +

global_restriction

+ + + + + + + + + + + + + + + +
+ +

: ’?’ expression

+
+
+ + + +

;

+
+
+ +

and is used to express restrictions that cannot be +expressed as simple restrictions on a single argument or are +can be expressed in a more readable fashion as a global +restriction. An example of such a rule is:

+ + + + +

dup w ldl stf ? p==2*w : ldl $2 stf $3 ldl $2 lof +$3

+
+ +

which says that this rule only applies if the pointer +size is twice the word size.

+ +

3. Incompatibilities with Previous Optimizer

+ +

The current table format is not compatible with previous +versions of the peephole optimizer tables. In particular the +previous table had no provision for local restrictions and +only the equivalent of the global restriction. This meant +that our ’?’ character that announces the +presence of the optional global restriction was not +required. The previous optimizer performed a number of other +tasks that were unrelated to optimization that were possible +because the old optimizer read the EM code for a complete +procedure at a time. This included tasks such as register +variable reference counting and moving the information +regarding the number of bytes of local storage required by a +procedure from it end pseudo instruction to +it’s pro pseudo instruction. These tasks are no +longer done by this module but have been moved to other +modules or programs in the pipeline. The register variable +reference counting is now performed by the front end. The +reordering of code, such as the moving of mes instructions +and the local storage requirements from the end to beginning +of procedures, is now performed using the insertpart +mechanism in the EM_CODE (or EM_OPT ) module. +The removal of dead code is performed by the global +optimizer. Various ext_functions available in the old +tables are no longer available as they rely on information +that is not available to the current program. These are the +notreg and the rom functions. The previous +optimizer allowed the use of LLP, LEP, SLP and +SEP in patterns. For example LLP stood for +either lol if the pointer size was the same as the +word size, or for ldl if the pointer size was twice +the word size. In the current optimizer it is necessary to +include two patterns for each such single pattern in the old +table. For example for a pattern containing LLP there +would be one pattern with lol and with a global +restriction of the form p=w and another pattern with +ldl and a global restriction of the form p=2*w.

+ +

4. The Parser

+ +

The program to parse the tables and build the pattern +table dependent dfa routines is built from the files:

+ + + + + + + +
+ +

parser.h

+
+ +

header file

+
+
+ + + + + + +
+ +

parser.g

+
+ +

LLGen source file defining syntax of table

+
+ + + + + + +
+ +

syntax.l

+
+ +

Lex sources file defining form of tokens in table.

+
+ + + + + + +
+ +

initlex.c

+
+ +

Uses the data in the library em_data.a to +initialize the lexical analyzer to recognize EM instruction +mnemonics.

+
+ + + + + + +
+ +

outputdfa.c

+
+ +

Routines to output the dfa when it has been constructed. +It outputs the files dfa.c and trans.c

+
+ + + + + + +
+ +

outcalls.c

+
+ +

Routines to output the file incalls.r defined in +the next section.

+
+ + + + + + +
+ +

findworst.c

+
+ +

Routines to analyze patterns to find how to continue +matching after a successful replacement or failed match.

+
+ +

The parser checks that the tables conform to the syntax +outlined in the previous section and also makes a number of +semantic checks on their validity. Further versions could +make further checks such as looking for cycles in the rules +or checking that each replacement leaves the same number of +bytes on the stack as the pattern it replaces. The parser +builds an internal dfa representation of the rules by +combining rules with common prefixes. All local and global +restrictions are combined into a single test to be performed +are a complete pattern has been detected in the input. The +idea is to build a structure so that each of the patterns +can be matched and then the corresponding tests made and the +first that succeeds is replaced. If two rules have the same +pattern and both their tests also succeed the one that +appears first in the tables file will be done. Somewhat less +obvious is that if one pattern is a proper prefix of a +longer pattern and its test succeeds then the second pattern +will not be checked for.

+ +

A major task of the parser if to decide on the action to +take when a rule has been partially matched or when a +pattern has been completely matched but its test does not +succeed. This requires a search of all patterns to see if +any part of the part matched could be part of some other +pattern. for example given the two patterns:

+ + + + +

loc adi w loc adi w : loc $1+$3 adi w
+loc adi w loc sbi w : loc $1-$3 adi w

+
+ +

If the first pattern fails after seeing the input:

+ + + + +

loc adi loc

+
+ +

the parser will still need to check whether the second +pattern matches. This requires a decision on how to fix up +any internal data structures in the dfa matcher, such as +moving some instructions from the pattern to the output +queue and moving the pattern along and then deciding what +state it should continue from. Similar decisions are +requires after a pattern has been replaced. For example if +the replacement is empty it is necessary to backup +n-1 instructions where n is the length of the +longest pattern in the tables.

+ +

5. Structure of the Resulting Library

+ +

The major data structures maintained by the library +consist of three queues; an output queue of +instructions awaiting output, a pattern queue +containing instructions that match the current prefix, and a +backup queue of instructions that have been backed up +over and need to be reparsed for further pattern matches. +These three queues are maintained in a single fixed size +buffer as explained in more detail in the next section. +Also, after a successful match, a replacement queue is +constructed.

+ +

If no errors are detected by the parser in the tables it +output the following files if they have changed from the +existing version of the file:

+ + + + + + +
+ +

dfa.c

+
+ +

this contains the dfa encoded into a number of arrays +using the technique of row displacement for compacted sparse +matricies. Given an opcode and the current state, the value +of OO_base[OO_state] is consulted to obtain a pointer +into the array OO_checknext. If this pointer in zero +or the check field of the addressed structure does +not correspond to the curerent state then it is known there +is no entry for this opcode/state pair and the +OO_default array is consulted instead. If the check +field does match then the next field contains the new +state. After each transition the array OO_ftrans is +consulted to see if this state corresponds to a final state +(i.e. a complete pattern) and if so the corresponding +function is called.

+
+ + + + + + +
+ +

trans.c

+
+ +

this contains external declarations of transition +routines with names like OO_xxxdotrans (where +xxx is a small integer). These are called when there +a transition to state xxx that corresponds to a +complete pattern. Any tests are performed if necessary to +confirm that the pattern matches and then the replacement +instructions are placed on the output queue and the routine +OO_mkrepl is called to make the replacement and if +backup the amount required. If there are a number of +patterns with the same instructions but different tests, +these will all appear in the same routine and the tests +performed in the order they appear in the original +patterns file.

+
+ + + + + + +
+ +

incalls.r

+
+ +

this contains an entry for every EM instruction (plus +lab ) giving information on how to build a routine +with the name O_xxx for the library version of +the module. If the EM instruction does not appear in the +tables patterns at all then the dfa routine is called to +flush any current queued output and the the output +C_xxx routine is called. If the EM instruction +does appear in a pattern then the instruction data structure +fields are initialized and it is added onto the end of the +pattern queue. The dfa routines are then called to attempted +to make a transition. This file is input to the awk +program makefuns.awk.

+
+ +

The following files contain code that is independent of +the pattern tables:

+ + + + + + +
+ +

main.c

+
+ +

this is used only in the stand alone version of the +optimizer and consists of code to open the input file, read +the input using the READ_EM(3) module and call the +dfa routines. This version does not require the routines +constructed from the incalls.r file described above.

+
+ + + + + + +
+ +

nopt.c

+
+ +

general routines to initialize, and maintain the data +structures. The file handling routines O_open etc are +defined here. Also defined are routines for flushing the +output queue by calling the EM_mkcalls routine from +the READ_EM(3) module and moving instructions from +the output to the backup queue. Routines to free the strings +stored in instructions with types of sof_ptyp, pro_ptyp, +str_ptyp, ico_ptyp, uco_ptyp, and alsofco_ptypare +is extended by Realloc if it overflows. The strings +can be thrown away on any flush that occurs when the backup +queue is empty.

+
+ + + + + + +
+ +

mkstrct.c

+
+ +

contains routines to build the data structure from the +input C_xxx routines and place the structure +on the pattern queue. These routines are also used to build +the data structures when a replacement is constructed.

+
+ + + + + + +
+ +

aux.c

+
+ +

routines to implement the external functions used in the +pattern table.

+
+ +

The following files are also used in building the module +library:

+ +

makefuns.awk

+ + + + + +
+

this awk program is used to produce individual C +files with names like O_xxx.c each containing +a single function definition and then call the cc +compiler to produce a single output file. This enables the +loader to only load those routines that are actually needed +when the library is loaded.

+
+ + + + + + +
+ +

pseudo.r

+
+ +

this file is like the incalls.r file produced by +the parser but is built by hand and handles the pseudo EM +instructions. It is also processed by +makefuns.awk.

+
+ +

6. Miscellaneous Issues

+ +

The output, pattern and backup queues are maintained in +fixed length array, OO_buffer allocated of size +MAXBUFFER (a constant declared in nopt.h) at run +time. It consists of an array of the e_instr data +structure used by the READ_EM(3) module. At any time +the pointers OO_patternqueue and OO_nxtpatt +point to the beginning and end of the current pattern prefix +that corresponds to the current state. Any instructions on +the backup queue are between OO_nxtpatt and +OO_endbackup. If there are no instructions on the +backup queue then OO_endbackup will be 0 (zero). The +size of the replacement queue is set to the length of the +maximum replacement length by the tables output by the +parser.

+ +

The fixed size of the buffer causes no difficulty in +practice and can only result in some potential optimizations +being missed. When space for a new instruction is required +and the buffer is full the routine OO_halfflush is +called to flush half the buffer and move all the data +structures left. It should be noted that it is not possible +to statically determine the maximum possible size for these +queues as they need to be unbounded in the worst case. A +study of the rule

+ + + + +

inc dec :

+
+ +

with the input consisting of N inc and then N +dec instructions requires an output queue length of +N-1 to find all possible replacements.

+
+ + diff --git a/src/olddocs/nopt.pdf b/src/olddocs/nopt.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9737f66cd6e5bcec15c03040543cfc7b87c9511a GIT binary patch literal 42122 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 YqeJ8hwoHL%4k`(v(ahf7!`IX7U-viXwEzGB literal 0 HcmV?d00001 diff --git a/src/olddocs/occam.html b/src/olddocs/occam.html new file mode 100644 index 000000000..51627c7c2 --- /dev/null +++ b/src/olddocs/occam.html @@ -0,0 +1,445 @@ + + + + + + +An Occam Compiler + + + +

An Occam Compiler

+
1. Introduction
+2. The Compiler
+2.1. The LLgen Parser Generator
+2.2. Indentation
+3. Implementation
+3.1. Channels
+ +
+ +

ABSTRACT

+ +

Kees Bot
+Edwin Scheffer

+Vrije Universiteit
+Amsterdam, The Netherlands

+ +

This document describes the implementation of an +Occam to EM compiler. The lexical analysis is +done using Lex. For the semantic analysis the +extended LL(1) parser generator LLgen is used. To +handle the Occam-specific features as channels and +parallelism some library routines are required.

+ +

1. Introduction

+ +

Occam [1] is a programming language which is based on +the concepts of concurrency and communication. These +concepts enable today’s applications of +microprocessors and computers to be implemented more +effectively.

+ +

An Occam program consists of a (dynamically determined) +number of processes communicating through channels. To +communicate with the outside world some predefined channels +are needed. A channel has only one writer and one reader; it +carries machine words and bytes, at the +reader/writer’s discretion. The process with its +communication in Occam replaces the procedure with +parameters in other languages (there are no procedures in +Occam).

+ +

In addition to the normal assignment statement, Occam +has two more information-transfer statements, the input and +the output:

+
          chan1 ? x        -- reads a value from chan1 into x
+          chan2 ! x        -- writes the value of x onto chan2
+
+ +

Both the outputting and the inputting processes wait +until the other is there. Channels are declared and given +names.

+ +

2

+ +

Arrays of channels are possible.

+ +

Processes come in 5 varieties: sequential, parallel, +alternative, conditional and repetitive. A process starts +with a reserved word telling its nature, followed by an +indented list of other processes. (Indentation is used to +indicate block structure.) It may be preceded by +declarations. The processes in a sequential/parallel process +are executed sequentially/in parallel. The processes in an +alternative process have guards based on the availability of +input; the first to be ready is executed (this is waiting +for multiple input). The conditional and repetitive +processes are normal IFs and WHILEs.

+ +

Producer-consumer example:

+
     CHAN buffer:                    -- declares the channel buffer
+     PAR
+       WHILE TRUE                    -- the producer
+         VAR x:                      -- a local variable
+         SEQ
+           produce(x)                -- in some way
+           buffer ! x                -- and send it
+       WHILE TRUE                    -- the consumer
+         VAR x:
+         SEQ
+           buffer ? x                -- get a value
+           consume(x)                -- in some way
+
+ +

3

+ +

Processes can be replicated from a given template; this +combines with arrays of variables and/or channels.

+ +

Example: 20 window-sorters in series:

+
     CHAN s[20]:                     -- 20 channels
+     PAR i = [ 0 FOR 19 ]            -- 19 processes
+       WHILE TRUE
+         VAR v1, v2:
+         SEQ
+           s[i] ? v1; v2             -- wait for 2 variables from s[i]
+           IF
+             v1 <= v2                -- ok
+               s[i+1] ! v1; v2
+             v1 > v2                 -- reorder
+               s[i+1] ! v2; v1
+
+ +

A process may wait for a condition, which must include a +comparison with NOW, the present clock value.

+ +

Processes may be distributed over several processors; +all processes under a VAR declaration must run on the +same processor. Concurrency can be improved by avoiding +VAR declarations, and replacing them by CHAN +declarations. Processes can be allocated explicitly on named +processors and channels can be connected to physical +ports.

+ +

2. The Compiler

+ +

The compiler is written in C using LLgen and Lex +and compiles Occam programs to EM code, using the procedural +interface as defined for EM. In the following sub-sections +we describe the LLgen parser generator and the aspect of +indentation.

+ +

2.1. The LLgen Parser Generator

+ +

LLgen accepts a Context Free syntax extended with the +operators ‘*’, ‘?’ +and ‘+’ that have effects similar to +those in regular expressions. The ‘*’ +is the closure set operator without an upperbound; +‘+’ is the positive closure operator +without an upperbound; ‘?’ is the +optional operator; ‘[’ and +‘]’ can be used for grouping. For +example, a comma-separated list of expressions can be

+ +

4

+ +

described as:

+
          expression_list:
+                 expression [ ’,’ expression ]*
+               ;
+
+ +

Alternatives must be separated by +‘|’. C code +(‘‘actions’’) can be inserted at all +points between the colon and the semicolon. Variables global +to the complete rule can be declared just in front of the +colon enclosed in the brackets ‘{’ and +‘}’. All other declarations are local +to their actions. Nonterminals can have parameters to pass +information. A more mature version of the above example +would be:

+
            expression_list(expr *e;)       {     expr e1, e2;   } :
+                     expression(&e1)
+                     [ ’,’ expression(&e2)
+                                            {     e1=append(e1, e2);  }
+                     ]*
+                                            {     *e=e1;    }
+                   ;
+
+ +

As LLgen generates a recursive-descent parser with no +backtrack, it must at all times be able to determine what to +do, based on the current input symbol. Unfortunately, this +cannot be done for all grammars. Two kinds of conflicts are +possible, viz. the alternation and repetition +conflict. An alternation confict arises if two sides of an +alternation can start with the same symbol. E.g.

+ +

5

+
          plus:     ’+’ | ’+’ ;
+
+ +

The parser doesn’t know which +‘+’ to choose (neither do we). Such a +conflict can be resolved by putting an if-condition +in front of the first conflicting production. It consists of +a ‘‘%if’’ followed by a +C-expression between parentheses. If a conflict occurs (and +only if it does) the C-expression is evaluated and parsing +continues along this path if non-zero. Example:

+
          plus:
+                 %if (some_plusses_are_more_equal_than_others())
+                 ’+’
+               |
+                 ’+’
+               ;
+
+ +

A repetition conflict arises when the parser cannot +decide whether +‘‘productionrule’’ in e.g. +‘‘[ productionrule ]*’’ +must be chosen once more, or that it should continue. This +kind of conflicts can be resolved by putting a +while-condition right after the opening parentheses. +It consists of a ‘‘%while’’ +followed by a C-expression between parentheses. As an +example, we can look at the comma-expression in C. +The comma may only be used for the comma-expression if the +total expression is not part of another comma-separated +list:

+
          comma_expression:
+                 sub_expression
+                 [ %while (not_part_of_comma_separated_list())
+                      ’,’ sub_expression
+                 ]*
+
+ +

6

+ + + + + + + +
+ + +

;

+
+
+ +

Again, the ‘‘%while’’ is +only used in case of a conflict.

+ +

Error recovery is done almost completely automatically. +All the LLgen-user has to do is write a routine called +LLmessage to give the necessary error messages and +supply information about terminals found missing.

+ +

2.2. Indentation

+ +

The way conflicts can be resolved are of great use to +Occam. The use of indentation, to group statements, leads to +many conflicts because the spaces used for indentation are +just token separators to the lexical analyzer, i.e. +‘‘white space’’. The lexical +analyzer can be instructed to generate ‘BEGIN’ +and ‘END’ tokens at each indentation change, but +that leads to great difficulties as expressions may occupy +several lines, thus leading to indentation changes at the +strangest moments. So we decided to resolve the conflicts by +looking at the indentation ourselves. The lexical analyzer +puts the current indentation level in the global variable +ind for use by the parser. The best example is the +SEQ construct, which exists in two flavors, one with +a replicator and one process:

+
          seq i = [ 1 for str[byte 0] ]
+               out ! str[byte i]
+
+ +

and one without a replicator and several processes:

+
          seq
+               in ? c
+               out ! c
+
+ +

7

+ +

The LLgen skeleton grammar to handle these two is:

+
          SEQ            {    line=yylineno; oind=ind; }
+          [      %if (line==yylineno)
+                 replicator
+                 process
+               |
+                 [ %while (ind>oind) process ]*
+          ]
+
+ +

This shows clearly that, a replicator must be on the +same line as the SEQ, and new processes are collected +as long as the indentation level of each process is greater +than the indentation level of SEQ (with appropriate +checks on this identation).

+ +

Different indentation styles are accepted, as long as +the same amount of spaces is used for each indentation +shift. The ascii tab character sets the indentation level to +an eight space boundary. The first indentation level found +in a file is used to compare all other indentation levels +to.

+ +

3. Implementation

+ +

It is now time to describe the implementation of some of +the occam-specific features such as channels and NOW. +Also the way communication with UNIX† is performed +must be described.

+ +

+ +

For a thorough description of the library routines to +simulate parallelism, which are e.g. used by the channel +routines and by the PAR construct in Appendix B, see +[6].

+ +

3.1. Channels

+ +

There are currently two types of channels (see Figure +1.) indicated by the type field of a channel variable:

+ + + + + + +
+ +

-

+
+ +

An interprocess communication channel with two +additional fields:

+
+ + + + + + + +
+ +

-

+
+ +

A synchronization field to hold the state of an +interprocess communication channel.

+
+ +

8

+ + + + + + + +
+ +

-

+
+ +

An integer variable to hold the value to be send.

+
+ + + + + + +
+ +

-

+
+ +

An outside world communication channel. This is a member +of an array of channels connected to UNIX files. Its +additional fields are:

+
+ + + + + + + +
+ +

-

+
+ +

A flags field holding a readahead flag and a flag that +tells if this channel variable is currently connected to a +file.

+
+ + + + + + + +
+ +

-

+
+ +

A preread character, if readahead is done.

+
+ + + + + + + +
+ +

-

+
+ +

An index field to find the corresponding UNIX file.

+
+ +

+ +

Figure 1. Interprocess and outside world +communication channels

+ +

The basic channel handling is done by chan_in +and chan_out. All other routines are based on them. +The routine chan_any only checks if there’s a +value available on a given channel. (It does not read this +value!) C_init initializes an array of interprocess +communication channels.

+ +

9

+ +

The following table shows Occam statements paired with +the routines used to execute them.

+
+ + diff --git a/src/olddocs/occam.pdf b/src/olddocs/occam.pdf new file mode 100644 index 0000000000000000000000000000000000000000..852d984b6806d36acd9505e7748270f45d774836 GIT binary patch literal 62944 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%0DFt2UFloA-BE5)VAb{p-=`K?2R6nc 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 Fe*m?ODlz~7 literal 0 HcmV?d00001 diff --git a/src/olddocs/pascal.html b/src/olddocs/pascal.html new file mode 100644 index 000000000..242c12981 --- /dev/null +++ b/src/olddocs/pascal.html @@ -0,0 +1,4088 @@ + + + + + + +The ACK Pascal Compiler + + + +

The ACK Pascal Compiler

+1. Introduction
+2. The compiler
+2.1. Lexical Analysis
+2.2. Syntax Analysis
+2.2.1. Alternation conflict
+2.2.2. Repetition conflict
+2.3. Semantic Analysis
+2.4. Code Generation
+2.5. Error Handling
+2.6. Memory Allocation and Garbage Collection
+3. Translation of Pascal to EM code
+3.1. Global Variables
+3.2. Expressions
+3.3. Statements
+3.3.1. Assignment Statement
+3.3.2. Goto Statement
+3.3.3. If Statement
+3.3.4. Repeat Statement
+3.3.5. While Statement
+3.3.6. Case Statement
+3.3.7. For Statement
+3.3.8. With Statement
+3.4. Procedure and Function Calls
+3.5. Register Messages
+3.6. Compile-time optimizations
+4. Conformant Arrays
+4.1. Variable conformant array parameters
+4.2. Value conformant array parameters
+5. Compiler options
+5.1. Compile time options
+5.2. Run time options
+6. Extensions to Pascal as specified by ISO 7185
+7. Deviations from the standard
+8. Hints to change the standard
+9. Testing the compiler
+10. Comparison with the Pascal-VU compiler
+10.1. Deviations
+10.2. Extensions
+10.3. Compiler options
+11. Improvements to the compiler
+12. History & Acknowledgements
+13. References
+ +
+ +

ABSTRACT

+ +

Aad Geudeke
+Frans Hofmeester

+Dept. of Mathematics and Computer Science
+Vrije Universiteit
+Amsterdam, The Netherlands

+ +

This document describes the implementation of a Pascal +to EM compiler. The compiler is written in C. The lexical +analysis is done using a hand-written lexical analyzer. +Semantic analysis makes use of the extended LL(1) parser +generator LLgen. Several EM utility modules are used in the +compiler.

+ +

1. Introduction

+ +

The Pascal front end of the Amsterdam Compiler Kit (ACK) +complies with the requirements of the international standard +published by the International Organization for +Standardization (ISO) [ISO]. An informal description, which +unfortunately is not conforming to the standard, of the +programming language Pascal is given in [JEN].

+ +

The main reason for rewriting the Pascal compiler was +that the old Pascal compiler was written in Pascal itself, +and a disadvantage of it was its lack of flexibility. The +compiler did not meet the needs of the current +ACK-framework, which makes use of modern parsing techniques +and utility modules. In this framework it is, for example, +possible to use a fast back end. Such a back end translates +directly to object code [ACK]. Our compiler is written in C +and it is designed similar to the current C and Modula-2 +compiler of ACK.

+ +

Chapter 2 describes the basic structure of the compiler. +Chapter 3 discusses the code generation of the main Pascal +constructs. Chapter 4 covers one of the major components of +Pascal, viz. the conformant array. In Chapter 5 the various +compiler options that can be used are enumerated. The +extensions to the standard and the deviations from the +standard are listed in Chapter 6 and 7. Chapter 8 presents +some ideas to improve the standard. Chapter 9 gives a short +overview of testing the compiler. The major differences +between the old and new compiler can be found in Chapter 10. +Suggestions to improve the compiler are described in Chapter +11. The appendices contain the grammar of Pascal and the +changes made to the ACK Pascal run time library. A +translation of a Pascal program to EM code as example is +presented.

+ +

2. The compiler

+ +

The compiler can be divided roughly into four +modules:

+ +

• lexical analysis
+• syntax analysis
+• semantic analysis
+• code generation

+ +

The four modules are grouped into one pass. The activity +of these modules is interleaved during the pass.
+The lexical analyzer, some expression handling routines and +various datastructures from the Modula-2 compiler +contributed to the project.

+ +

2.1. Lexical Analysis

+ +

The first module of the compiler is the lexical +analyzer. In this module, the stream of input characters +making up the source program is grouped into tokens, +as defined in ISO 6.1. The analyzer is hand-written, +because the lexical analyzer generator, which was at our +disposal, Lex [LEX], produces much slower analyzers. +A character table, in the file char.c, is created +using the program tab which takes as input the file +char.tab. In this table each character is placed into +a particular class. The classes, as defined in the file +class.h, represent a set of tokens. The strategy of +the analyzer is as follows: the first character of a new +token is used in a multiway branch to eliminate as many +candidate tokens as possible. Then the remaining characters +of the token are read. The constant INP_NPUSHBACK, defined +in the file input.h, specifies the maximum number of +characters the analyzer looks ahead. The value has to be at +least 3, to handle input sequences such as:
+1e+4 (which is a real number)
+1e+a (which is the integer 1, followed by the identifier +"e", a plus, and the identifier "a")

+ +

Another aspect of this module is the insertion and +deletion of tokens required by the parser for the recovery +of syntactic errors (see also section 2.2). A generic input +module [ACK] is used to avoid the burden of I/O.

+ +

2.2. Syntax Analysis

+ +

The second module of the compiler is the parser, which +is the central part of the compiler. It invokes the routines +of the other modules. The tokens obtained from the lexical +analyzer are grouped into grammatical phrases. These phrases +are stored as parse trees and handed over to the next part. +The parser is generated using LLgen[LL], a tool for +generating an efficient recursive descent parser with no

+ +

backtrack from an Extended Context Free Syntax.
+An error recovery mechanism is generated almost completely +automatically. A routine called LLmessage had to be +written, which gives the necessary error messages and deals +with the insertion and deletion of tokens. The routine +LLmessage must accept one parameter, whose value is a +token number, zero or -1. A zero parameter indicates that +the current token (the one in the external variable +LLsymb) is deleted. A -1 parameter indicates that the +parser expected end of file, but did not get it. The parser +will then skip tokens until end of file is detected. A +parameter that is a token number (a positive parameter) +indicates that this token is to be inserted in front of the +token currently in LLsymb. Also, care must be taken, +that the token currently in LLsymb is again returned +by the next call to the lexical analyzer, with the +proper attributes. So, the lexical analyzer must have a +facility to push back one token.
+Calls to the two standard procedures write and +writeln can be different from calls to other +procedures. The syntax of a write-parameter is different +from the syntax of an actual-parameter. We decided to +include them, together with read and readln, +in the grammar. An alternate solution would be to make the +syntax of an actual-parameter identical to the syntax of a +write-parameter. Afterwards the parameter has to be checked +to see whether it is used properly or not.

+ +

As the parser is LL(1), it must always be able to +determine what to do, based on the last token read +(LLsymb). Unfortunately, this was not the case with +the grammar as specified in [ISO]. Two kinds of problems +appeared, viz. the alternation and repetition +conflict. The examples given in the following paragraphs are +taken from the grammar.

+ +

2.2.1. Alternation conflict

+ +

An alternation conflict arises when the parser can not +decide which production to choose.
+Example:

+ + + + + +
+
procedure-declaration    : procedure-heading ’;’ directive |
+                           procedure-identification ’;’ procedure-block |
+                           procedure-heading ’;’ procedure-block ;
+procedure-heading        : procedure identifier [ formal-parameter-list ]? ;
+procedure-identification : procedure procedure-identifier ;
+
+
+ +

A sentence that starts with the terminal +procedure is derived from the three alternative +productions. This conflict can be resolved in two ways: +adjusting the grammar, usually some rules are replaced by +one rule and more work has to be done in the semantic +analysis; using the LLgen conflict resolver, +"%if (C-expression)", if the C-expression +evaluates to non-zero, the production in question is chosen, +otherwise one of the remaining rules is chosen. The grammar +rules were rewritten to solve this conflict. The new rules +are given below. For more details see the file +declar.g.

+ + + + + +
+
procedure-declaration : procedure-heading ’;’ ( directive | procedure-block ) ;
+procedure-heading     : procedure identifier [ formal-parameter-list ]? ;
+
+
+ +

A special case of an alternation conflict, which is +common to many block structured languages, is the +"dangling-else" ambiguity.

+ + + + + +
+
if-statement : if boolean-expression then statement [ else-part ]? ;
+else-part    : else statement ;
+
+
+ +

The following statement that can be derived from the +rules above is ambiguous:

+ + + + + +
+

if boolean-expr-1 then if +boolean-expr-2 then statement-1 +else statement-2

+
+ + +

+ +

(a) (b)

+ +

Two parse trees showing the +dangling-else ambiguity

+ +

According to the standard, else is matched +with the nearest preceding unmatched then, i.e. parse +tree (a) is valid (ISO 6.8.3.4). This conflict is +statically resolved in LLgen by using +"%prefer", which is equivalent in behaviour +to "%if(1)".

+ +

2.2.2. Repetition conflict

+ +

A repetition conflict arises when the parser can not +decide whether to choose a production once more, or +not.
+Example:

+ + + + + +
+
field-list : [ ( fixed-part [ ’;’ variant-part ]? | variantpart ) [;]? ]? ;
+fixed-part : record-section [ ’;’ record-section ]* ;
+
+
+ +

When the parser sees the semicolon, it can not decide +whether another record-section or a variant-part follows. +This conflict can be resolved in two ways: adjusting the +grammar or using the conflict resolver, "%while +(C-expression)". The grammar rules that deal with this +conflict were completely rewritten. For more details, the +reader is referred to the file declar.g.

+ +

2.3. Semantic Analysis

+ +

The third module of the compiler is the checking of +semantic conventions of ISO-Pascal. To check the program +being parsed, actions have been used in LLgen. An action +consists of several C-statements, enclosed in brackets +"{" and "}". In order to facilitate +communication between the actions and LLparse, the +parsing routines can be given C-like parameters and local +variables. An important part of the semantic analyzer is the +symbol table. This table stores all information concerning +identifiers and their definitions. Symbol-table lookup and +hashing is done by a generic namelist module [ACK]. The +parser turns each program construction into a parse tree, +which is the major datastructure in the compiler. This parse +tree is used to exchange information between various +routines.

+ +

2.4. Code Generation

+ +

The final module in the compiler is that of code +generation. The information stored in the parse trees is +used to generate the EM code [EM]. EM code is generated with +the help of a procedural EM-code interface [ACK]. The use of +static exchanges is not desired, since the fast back end can +not cope with static code exchanges, hence the EM +pseudoinstruction exc is never generated.
+Chapter 3 discusses the code generation in more detail.

+ +

2.5. Error Handling

+ +

The first three modules have in common that they can +detect errors in the Pascal program being compiled. If this +is the

+ +

case, a proper message is given and some action is +performed. If code generation has to be aborted, an error +message is given, otherwise a warning is given. The constant +MAXERR_LINE, defined in the file errout.h, specifies +the maximum number of messages given per line. This can be +used to avoid long lists of error messages caused by, for +example, the omission of a ’;’. Three kinds of +errors can be distinguished: the lexical error, the +syntactic error, and the semantic error. Examples of these +errors are respectively, nested comments, an expression with +unbalanced parentheses, and the addition of two +characters.

+ +

2.6. Memory Allocation and Garbage Collection

+ +

The routines st_alloc and st_free provide +a mechanism for maintaining free lists of structures, whose +first field is a pointer called next. This field is +used to chain free structures together. Each structure, +suppose the tag of the structure is ST, has a free list +pointed by h_ST. Associated with this list are the +operations: new_ST(), an allocating mechanism which +supplies the space for a new ST struct; and +free_ST(), a garbage collecting mechanism which links +the specified structure into the free list.

+ +

3. Translation of Pascal to EM code

+ +

A short description of the translation of Pascal +constructs to EM code is given in the following paragraphs. +The EM instructions and Pascal terminal symbols are printed +in boldface. A sentence in italics is a +description of a group of EM (pseudo)instructions.

+ +

3.1. Global Variables

+ +

For every global variable, a bss block is +reserved. To enhance the readability of the EM-code +generated, the variable-identifier is used as a data label +to address the block.

+ +

3.2. Expressions

+ +

Operands are always evaluated, so the execution of

+ + + + + +
+

if ( p <> nil ) and ( p^.value +<> 0 ) then .....

+ +

might cause a run-time error, if p is equal to nil.

+ +

The left-hand operand of a dyadic operator is almost +always evaluated before the right-hand side. Peculiar +evaluations exist for the following cases:

+ +

the expression: set1 <= set2, is evaluated as follows +:

+
- evaluate set2
+- evaluate set1
+- compute set2+set1
+- test set2 and set2+set1 for equality
+
+ +

the expression: set1 >= set2, is evaluated as follows +:

+
- evaluate set1
+- evaluate set2
+- compute set1+set2
+- test set1 and set1+set2 for equality
+
+ +

Where allowed, according to the standard, constant +integral expressions are compile-time evaluated while an +effort is made to report overflow on target machine basis. +The integral expressions are evaluated in the type +arith. The size of an arith is assumed to be at least +the size of the integer type on the target machine. If the +target machine’s integer size is less than the size of +an arith, overflow can be detected at compile-time. However, +the following call to the standard procedure new, new(p, +3+5), is illegal, because the second parameter is not a +constant according to the grammar.

+ +

Constant floating expressions are not compile-time +evaluated, because the precision on the target machine and +the precision on the machine on which the compiler runs +could be different. The boolean expression (1.0 + 1.0) = +2.0 could evaluate to false.

+ +

3.3. Statements

+ +

3.3.1. Assignment Statement

+ +

PASCAL :

+ + + + + +
+

(variable-access | function-identifier) +:= expression

+ +

EM :

+ +

evaluate expression
+store in variable-access or function-identifier

+ +

In case of a function-identifier, a hidden temporary +variable is used to keep the function result.

+
+ +

3.3.2. Goto Statement

+ +

PASCAL :

+ + + + + +
+

GOTO label

+ +

EM : Two cases can be distinguished :

+ +

- local goto,

+ + + + + +
+

in which a bra is generated.

+ +

- non-local goto, a goto_descriptor is build, containing +the ProgramCounter of the instruction jumped to and an +offset in the target procedure frame which contains the +value of the StackPointer after the jump. The code for the +jump itself is to load the address of the goto_descriptor, +followed by a push of the LocalBase of the target procedure +and a cal $_gto. A message is generated to indicate +that a procedure or function contains a statement which is +the target of a non-local goto.

+ +

3.3.3. If Statement

+ +

PASCAL :

+ + + + + +
+

IF boolean-expression THEN +statement

+
+ +

EM :

+
    evaluation boolean-expression
+    zeq *exit_label
+    code statement
+   exit_label
+
+ +

PASCAL :

+ + + + + +
+

IF boolean-expression THEN +statement-1 ELSE statement-2

+
+ +

EM :

+
    evaluation boolean-expression
+    zeq *else_label
+    code statement-1
+    bra *exit_label
+   else_label
+    code statement-2
+   exit_label
+
+ +

3.3.4. Repeat Statement

+ +

PASCAL :

+ + + + + +
+

REPEAT statement-sequence UNTIL +boolean-expression

+
+ +

EM :

+
   repeat_label
+
+ +

code statement-sequence evaluation +boolean-expression zeq *repeat_label

+ +

3.3.5. While Statement

+ +

PASCAL :

+ + + + + +
+

WHILE boolean-expression DO +statement

+
+ +

EM :

+
   while_label
+    evaluation boolean-expression
+    zeq *exit_label
+    code statement
+    bra *while_label
+   exit_label
+
+ +

3.3.6. Case Statement

+ +

The case-statement is implemented using the csa +and csb instructions.

+ +

PASCAL :

+ + + + + +
+

CASE case-expression OF

+ + + + + +
+

case-constant-list-1 : +statement-1 ;
+case-constant-list-2
: statement-2 +;
+.
+.
+case-constant-list-n
: statement-n +[;]

+ + + + + +
+

END

+ +

The csa instruction is used if the range of the +case-expression value is dense, i.e.

+ + + + + +
+

( upperbound − lowerbound ) / +number_of_cases

+ +

is less than the constant DENSITY, defined in the file +density.h.

+ +

If the range is sparse, a csb instruction is +used.

+ +

EM :

+
    evaluation case-expression
+    bra *l1
+   c1
+    code statement-1
+    bra *exit_label
+   c2
+    code statement-2
+    bra *exit_label
+    .
+    .
+   cn
+    code statement-n
+    bra *exit_label
+   .case_descriptor
+    generation case_descriptor
+   l1
+    lae .case_descriptor
+    csa size of (case-expression)
+   exit_label
+
+ +

3.3.7. For Statement

+ +

PASCAL :

+ + + + + +
+

FOR control-variable := +initial-value (TO | +DOWNTO) final-value DO +statement

+
+ +

The initial-value and final-value are evaluated at the +beginning of the loop. If the values are not constant, they +are evaluated once and stored in a temporary.

+ +

EM :

+
    load initial-value
+    load final-value
+    bgt exit-label            (* DOWNTO : blt exit-label *)
+    load initial-value
+   l1
+    store in control-variable
+    code statement
+    load control-variable
+    dup control-variable
+    load final-value
+    beq exit_label
+    inc control-variable    (* DOWNTO : dec control-variable *)
+    bra *l1
+   exit_label
+
+ +

Note: testing must be done before +incrementing(decrementing) the control-variable,
+because wraparound could occur, which could lead to an +infinite loop.

+ +

3.3.8. With Statement

+ +

PASCAL :

+ + + + + +
+

WITH record-variable-list DO +statement

+ +

The statement WITH r +1 , r +2 , ..., r +n DO +statement

+ +

is equivalent to WITH r +1 DO WITH r +2 DO ... WITH r +n DO +statement

+
+ +

The translation of

+ + + + + +
+

WITH r 1 DO +statement

+ +

is

+
   push address of r1
+   store address in temporary
+   code statement
+
+ +

An occurrence of a field is translated into:

+ + + + + +
+

load temporary
+add field-offset

+ +

3.4. Procedure and Function Calls

+ +

In general, the call

+ + + + + +
+

p(a 1 , a +2 , ...., a +n )

+ +

is translated into the sequence:

+ + + + + +
+
evaluate an
+.
+.
+evaluate a2
+evaluate a1
+push localbase
+cal $p
+pop parameters
+
+
+ +

i.e. the order of evaluation and binding of the +actual-parameters is from right to left. In general, a copy +of the actual-parameter is made when the formal-parameter is +a value-parameter. If the formal-parameter is a +variable-parameter, a pointer to the actual-parameter is +pushed.

+ +

In case of a function call, a lfr is generated, +which pushes the function result on top of the stack.

+ +

3.5. Register Messages

+ +

A register message can be generated to indicate that a +local variable is never referenced indirectly. This implies +that a register can be used for a variable. We distinguish +the following classes, given in decreasing priority:

+ +

• control-variable and final-value of a +for-statement

+ + + + + +
+

to speed up testing, and execution of the body of the +for-statement

+ +

• record-variable of a with-statement

+ + + + + +
+

to improve the field selection of a record

+ +

• remaining local variables and parameters

+
+ +

3.6. Compile-time optimizations

+ +

The only optimization that is performed is the +evaluation of constant integral expressions. The +optimization of constructs like

+ + + + + +
+

if false then +statement,

+ +

is left to either the peephole optimizer, or a global +optimizer.

+ +

4. Conformant Arrays

+ +

A fifth kind of parameter, besides the value, variable, +procedure, and function parameter, is the conformant array +parameter (ISO 6.6.3.7). This parameter, undoubtedly +the major addition to Pascal from the compiler +writer’s point of view, has been implemented. With +this kind of parameter, the required bounds of the +index-type of an actual parameter are not fixed, but are +restricted to a specified range of values. Two types of +conformant array parameters can be distinguished: variable +conformant array parameters and value conformant array +parameters.

+ +

4.1. Variable conformant array parameters

+ +

The treatment of variable conformant array parameters is +comparable with the normal variable parameter. Both have in +common that the parameter mechanism used is call by +reference.
+An example is:

+ + + + + +
+

to sort variable length arrays of integers, the following +Pascal procedure could be used:

+ +
procedure bubblesort(var A : array[low..high : integer] of integer);
+var i, j : integer;
+begin
+        for j := high - 1 downto low do
+                for i := low to j do
+                        if A[i+1] < A[i] then interchange A[i] and A[i+1]
+end;
+
+
+ +

For every actual parameter, the base address of the +array is pushed on the stack and for every +index-type-specification, exactly one array descriptor is +pushed.

+ +

4.2. Value conformant array parameters

+ +

The treatment of value conformant array parameters is +more complex than its variable counterpart.
+An example is:

+ + + + + +
+

an unpacked array of characters could be printed as a +string with the following program part:

+ +
procedure WriteAsString( A : array[low..high : integer] of char);
+var i : integer;
+begin
+        for i := low to high do write(A[i]);
+end;
+
+
+ +

The calling procedure pushes the base address of the +actual parameter and the array descriptors belonging to it +on the stack. Subsequently the procedure using the +conformant array parameter is called. Because it is a +call by value, the called procedure has to create a +copy of the actual

+ +

parameter. This implies that the calling procedure knows +how much space on the stack must be reserved for the +parameters. If the actual-parameter is a conformant array, +the called procedure keeps track of the size of the +activation record. Hence the restrictions on the use of +value conformant array parameters, as specified in ISO +6.6.3.7.2, are dropped.

+ +

A description of the EM code generated by the compiler +is:

+
load the stack adjustment sofar
+load base address of array parameter
+compute the size in bytes of the array
+add this size to the stack adjustment
+copy the array
+remember the new address of the array
+
+ +

5. Compiler options

+ +

There are some options available to control the +behaviour of the compiler. Two types of options can be +distinguished: compile-time options and run-time +options.

+ +

5.1. Compile time options

+ +

There are some options that can be set when the compiler +is installed. Those options can be found in the file +Parameters. To set a parameter just modify its +definition in the file Parameters. The shell script +in the file make.hfiles creates for each parameter a +separate .h file. This mechanism is derived from the C +compiler in ACK.

+ +

IDFSIZE

+ + + + + +
+

The maximum number of characters that are significant in +an identifier. This value has to be at least the value of +MINIDFSIZE, defined in the file options.c. A +compile-time check is included to see if the value of +MINIDFSIZE is legal. The compiler will not recognize +some keywords if IDFSIZE is too small.

+ +

ISTRSIZE, RSTRSIZE

+ + + + + +
+

The lexical analyzer uses these two values for the +allocation of memory needed to store a string. +ISTRSIZE is the initial number of bytes allocated. +RSTRSIZE is the step size used for enlarging the +memory needed.

+ +

NUMSIZE

+ + + + + +
+

The maximum length of a numeric constant recognized by +the lexical analyzer. It is an error if this length is +exceeded.

+ +

ERROUT, MAXERR_LINE

+ + + + + +
+

Used for error messages. ERROUT defines the file +on which the messages are written. MAXERR_LINE is the +maximum number of error messages given per line.

+ +

SZ_CHAR, AL_CHAR, etc

+ + + + + +
+

The default values of the target machine sizes and +alignments. The values can be overruled with the −V +option.

+ +

MAXSIZE

+ + + + + +
+

This value must be set to the maximum of the values of +the target machine sizes. This parameter is used in overflow +detection (see also section 3.2).

+ +

DENSITY

+ + + + + +
+

This parameter is used to decide what EM instruction has +to be generated for a case-statement. If the range of the +index value is sparse, i.e.

+ + + + + +
+

(upperbound - lowerbound) / number_of_cases

+ + + + + +
+

is more than some threshold (DENSITY) the +csb instruction is chosen. If the range is dense a +jump table is generated (csa). This uses more space. +Reasonable values are 2, 3 or 4.
+Higher values might also be reasonable on machines, which +have lots of address space and memory (see also section +3.3.3).

+ +

INP_READ_IN_ONE

+ + + + + +
+

Used by the generic input module. It can either be +defined or not defined. Defining it has the effect that +files will be read completely into memory using only one +read-system call. This should be used only on machines with +lots of memory.

+ +

DEBUG

+ + + + + +
+
If this parameter is defined some built-in compiler-debugging tools can be used:
+  • only lexical analyzing is done, if the −l option is given.
+  • if the −I option is turned on, the allocated number of structures is printed.
+  • the routine debug can be used to print miscellaneous information.
+  • the routine PrNode prints a tree of nodes.
+  • the routine DumpType prints information about a type structure.
+  • the macro DO_DEBUG(x,y) defined as ((x) && (y)) can be used to perform
+    several actions.
+
+
+
+
+ +

5.2. Run time options

+ +

The run time options can be given in the command line +when the compiler is called.
+They all have the form: −<character>
+Depending on the option, a character string has to be +specified. The following options are currently +available:

+ + + + + + +
+ +

C

+
+ +

The lower case and upper case letters are treated +different (ISO 6.1.1).

+
+ + + + + + +
+ +

u

+
+ +

The character ’_’ is treated like a letter, +so it is allowed to use the underscore in identifiers.

+
+ + + + + +
+

Note: identifiers starting with an underscore may cause +problems, because
+most identifiers in library routines start with an +underscore.

+
+ + + + + + +
+ +

n

+
+ +

This option suppresses the generation of register +messages.

+
+ + + + + + +
+ +

r

+
+ +

With this option rangechecks are generated where +necessary.

+
+ + + + + + +
+ +

L

+
+ +

Do not generate EM lin and fil +instructions. These instructions are used only for +profiling.

+
+ + + + + + +
+ +

M<number>

+
+ +

Set the number of characters that are significant in an +identifier to <number>. The maximum significant +identifier length depends on the constant IDFSIZE, defined +in idfsize.h.

+
+ + + + + + +
+ +

i<number>

+
+ +

With this flag the setsize for a set of integers can be +changed. The number must be the number of bits per set. +Default value : (#bits in a word) − 1

+
+ + + + + + +
+ +

w

+
+ +

Suppress warning messages (see also section 2.5).

+
+ + +

V[[w|i|f|p|S][size]?[.alignment]?]*

+ + + + + +
+

Option to set the object sizes and alignments on the +target machine dynamically. The objects that can be +manipulated are:
+w
word
+i
integer
+f
float
+p
pointer
+S
structure
+In case of a structure, size is discarded and the +alignment is the initial alignment of the structure. +The effective alignment is the least common multiple of +alignment and the alignment of its members. This +option has been implemented so that the compiler can be used +as cross compiler.

+
+ +

6. Extensions to Pascal as specified by ISO 7185

+ + + + + + +
+ +

ISO 6.1.3:

+
+ +

The underscore is treated as a letter when the −u +option is turned on (see also section 5.2). This is +implemented to be compatible with Pascal-VU and can be used +in identifiers to increase readability.

+
+ + + + + + +
+ +

ISO 6.1.4:

+
+ +

The directive extern can be used in a +procedure-declaration or function-declaration to specify +that the procedure-block or function-block corresponding to +that declaration is external to the program-block. This can +be used in conjunction with library routines.

+
+ + + + + + +
+ +

ISO 6.1.9: An

+
+ +

alternative representation for the following

+
+ +

tokens and delimiting characters is recognized:

+ + + + + +
+

token alternative token

+ +

^ @

+ + + + + +
+

[ (.
+] .)

+ +

delimiting character alternative delimiting pair of +characters

+ +

{ (*
+} *)

+
+ +

ISO 6.6.3.7.2:

+ + + + + +
+

A conformant array parameter can be passed as value +conformant array parameter without the restrictions imposed +by the standard. The compiler gives a warning. This is +implemented to keep the parameter mechanism orthogonal (see +also Chapter 4).

+
+ + + + + + +
+ +

ISO 6.9.3.1: If

+
+ +

the value of the argument TotalWidth of the

+
+ +

required procedure write is zero or negative, no +characters are written for character, string or boolean type +arguments. If the value of the argument FracDigits of +the required procedure write is zero or negative, the +fraction and ’.’ character are suppressed for +fixed-point arguments.

+ +

7. Deviations from the standard

+ +

The compiler deviates from the ISO 7185 standard with +respect to the following clauses:

+ + + + + + +
+ +

ISO 6.1.3:

+
+ +

Identifiers may be of any length and all characters of +an identifier shall be significant in distinguishing between +them.

+
+ + + + + +
+

The constant IDFSIZE, defined in the file +idfsize.h, determines the (maximum) significant +length of an identifier. It can be set at run time with the +−M option (see also section on compiler +options).

+ + + + + + +
+ +

ISO 6.1.8:

+
+ +

There shall be at least one separator between any pair +of consecutive tokens made up of identifiers, word-symbols, +labels or unsigned-numbers.

+
+ + + + + +
+

A token separator is not needed when a number is followed +by an identifier or a word-symbol. For example the input +sequence, 2then, is recognized as the integer 2 +followed by the keyword then.

+ + + + + + +
+ +

ISO 6.2.1: The

+
+ +

label-declaration-part shall specify all

+
+ +

labels that prefix a statement in the corresponding +statement-part.

+ + + + + +
+

The compiler generates a warning if a label is declared +but never defined.

+ + + + + + +
+ +

ISO 6.2.2:

+
+ +

The scope of identifiers and labels should start at the +beginning of the block in which these identifiers or labels +are declared.

+
+ + + + + +
+

The compiler, as most other one pass compilers deviates +in this respect, because the scope of variables and labels +start at their defining-point.

+
+ + + + + +
+

program deviates;
+const

+x = 3;
+procedure
p;
+const

+ + + + +

y = x;
+x = true;

+
+ + + + + +
+

begin end;
+begin
+end.

+ +

In procedure p, the constant y has the integer value 3. +This program does not conform to the standard. In [SAL] a +simple algorithm is described for enforcing the scope rules, +it involves numbering all scopes encoutered in the program +in order of their opening, and recording in each identifier +table entry the number of the latest scope in which it is +used.

+ +

Note: The compiler does not deviate from the standard in +the following program:

+ +
       program conforms;
+       type
+
+
+ + + + + +

x = real;

+
+ + + + + +
+

procedure p;
+type

+ + + + +

y = ^x;
+x = boolean;

+
+ + + + + +
+

var

+ + + + +

p : y;

+
+ + + + + +
+

begin end;
+begin
+end.

+ +

In procedure p, the variable p is a pointer to +boolean.

+
+ + + + + + +
+ +

ISO 6.4.3.2:

+
+ +

The standard specifies that any ordinal type is allowed +as index-type.

+
+ + + + + +
+

The required type integer is not allowed as +index-type, i.e.

+ + + + + +
+

ARRAY [ integer ] OF +<component-type> is not permitted.

+ + + + + +
+

This could be implemented, but this might cause problems +on machines with a small memory.

+ + + + + + +
+ +

ISO 6.4.3.3:

+
+ +

The type possessed by the variant-selector, called the +tag-type, must be an ordinal type, so the integer type is +permitted. The values denoted by all case-constants shall be +distinct and the set thereof shall be equal to the set of +values specified by the tag-type.

+
+ + + + + +
+

Because it is impracticable to enumerate all integers as +case-constants, the integer type is not permitted as +tag-type. It would not make a great difference to allow it +as tagtype.

+ + + + + + +
+ +

ISO 6.8.3.9:

+
+ +

The standard specifies that the

+
+ +

control-variable of a for-statement is not allowed to be +modified while executing the loop.

+ + + + + +
+

Violation of this rule is not detected. An algorithm to +implement this rule can be found in [PCV].

+
+ +

8. Hints to change the standard

+ +

We encoutered some difficulties when the compiler was +developed. In this chapter some hints are presented to +change the standard, which would make the implementation of +the compiler less difficult. The semantics of Pascal would +not be altered by these adaptions.

+ +

− Some minor changes in the grammar of Pascal from +the user’s point of view, but which make the writing +of an LL(1) parser considerably easier, could be:

+ + + + + +
+
field-list   : [ ( fixed-part [ variant-part ] | variant-part ) ] .
+fixed-part   : record-section ; { record-section ; } .
+variant-part : case variant-selector of variant ; { variant ; } .
+
+case-statement : case case-index of case-list-element ; { case-list-element ; } end .
+
+
+ +

− To ease the semantic checking on sets, the +principle of qualified sets could be used, every +set-constructor must be preceeded by its +type-identifier:

+
   set-constructor : type-identifier [ [ member-designator { , member-designator } ] ] .
+
+ + + + + + + + + + + +
+ +

Example:

+
+ +

t1 = set of 1..5;

+
+
+ +

t2 = set of integer;

+
+
+ +

The type of [3, 5] would be ambiguous, but the type of +t1[3, 5] not.

+ +

− Another problem arises from the fact that a +function name can appear in three distinct ’use’ +contexts: function call, assignment of function result and +as function parameter.
+Example:

+ + + + + +
+
program function_name;
+
+function p(x : integer; function y : integer) : integer;
+begin .. end;
+
+function f : integer;
+begin
+        f := p(f, f);     (*)
+end;
+
+begin .. end.
+
+
+ +

A possible solution in case of a call (also a procedure +call) would be to make the (possibly empty) +actual-parameter-list mandatory. The assignment of the +function result could be changed in a return +statement. Though this would change the semantics of the +program slightly.
+The above statement (*) would look like this: return p(f(), +f);

+ +

− Another extension to the standard could be the +implementation of an otherwise clause in a +case-statement. This would behave exactly like the +default clause in a switch-statement in C.

+ +

9. Testing the compiler

+ +

Although it is practically impossible to prove the +correctness of a compiler, a systematic method of testing +the compiler is used to increase the confidence that it will +work satisfactorily in practice. The first step was to see +if the lexical analysis was performed correctly. For this +purpose, the routine LexScan() was used (see also the +−l option). Next we tested the parser generated by +LLgen, to see whether correct Pascal programs were accepted +and garbage was dealed with gracefully. The biggest test +involved was the validation of the semantic analysis. +Simultaneously we tested the code generation. First some +small Pascal test programs were translated and executed. +When these programs work correctly, the Pascal validation +suite and a large set of Pascal test programs were compiled +to see whether they behaved in the manner the standard +specifies. For more details about the Pascal validation +suite, the reader is referred to [PCV].

+ +

10. Comparison with the Pascal-VU compiler

+ +

In this chapter, the differences with the Pascal-VU +compiler [IM2] are listed. The points enumerated below can +be used as improvements to the compiler (see also Chapter +11).

+ +

10.1. Deviations

+ +

- large labels

+ + + + + +
+

only labels in the closed interval 0..9999 are allowed, +as opposed to the Pascal-VU compiler. The Pascal-VU compiler +allows every unsigned integer as label.

+ +

- goto

+ + + + + +
+

the new compiler conforms to the standard as opposed to +the old one. The following program, which contains an +illegal jump to label 1, is accepted by the Pascal-VU +compiler.

+ +
program illegal_goto(output);
+label 1;
+var i : integer;
+begin
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

goto 1;

+
+
+ +

for i := 1 to 10 do

+
+
+ +

begin

+
+
+ + +

1 : writeln(i);

+
+
+ +

end;

+
+
+ + + + + +
+

end.

+
+ +

This program is rejected by the new compiler.

+ +

10.2. Extensions

+ +

The extensions implemented by the Pascal-VU compiler are +listed in Chapter 5 of [IM2].

+ +

- separate compilation

+ + + + + +
+

the new compiler only accepts programs, not modules.

+ +

- assertions not implemented.

+ +

- additional procedures the procedures halt, mark +and release are not available.

+
+ +

- UNIX™ interfacing

+ + + + + +
+

the −c option is not implemented.

+ +

+ +

- double length integers

+ + + + + +
+

integer size can be set with the −V option, so the +additional type long is not implemented.

+
+ +

10.3. Compiler options

+ +

The options implemented by the Pascal-VU compiler are +listed in Chapter 7 of [IM2].

+ +

The construction "{$....}" is not +recognized.

+ +

The options: a, c, d, s and t are not +available.

+ +

The −l option has been changed into the −L +option.

+ +

The size of reals can be set with the −V +option.

+ +

11. Improvements to the compiler

+ +

In consideration of portability, a restricted option +could be implemented. Under this option, the extensions and +warnings should be considered as errors.

+ +

The restrictions imposed by the standard on the control +variable of a for-statment should be implemented (ISO +6.8.3.9).

+ +

To check whether a function returns a valid result, the +following algorithm could be used. When a function is +entered a hidden temporary variable of type boolean is +created. This variable is initialized with the value false. +The variable is set to true, when an assignment to the +function name occurs. On exit of the function a test is +performed on the variable. If the value of the variable is +false, a run-time error occurs.
+Note: The check has to be done run-time.

+ +

The undefined value should be implemented. A +problem arises with local variables, for which space on the +stack is allocated. A possible solution would be to generate +code for the initialization of the local variables with the +undefined value at the beginning of a procedure or +function.

+ +

The implementation for the global variables is easy, +because bss blocks are used.

+ +

Closely related to the last point is the generation of +warnings when variables are never used or assigned. This is +not yet implemented.

+ +

The error messages could specify more details about the +errors occurred, if some additional testing is done.

+ +

Every time the compiler detects sets with different +base-types, a warning is given. Sometimes this is +superfluous.

+
program sets(output);
+type
+
+ + + + + + + + + + + +
+ +

week = (sunday, monday, tuesday, wednesday, thursday, +friday, saturday);

+
+
+ +

workweek = monday..friday;

+
+
+ +

var

+ + + + + + + + +
+ +

s : set of workweek;

+
+ +

day : week;

+
+ +

begin

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

day := monday;

+
+
+ +

s := [day];

+
+ + +

(* warning *)

+
+
+ +

day := saturday;

+
+
+ +

s := [day];

+
+ + +

(* warning *)

+
+
+ +

end.
+The new compiler gives two warnings, the first one is +redundant.

+ +

A nasty point in the compiler is the way the procedures +read, readln, write and writeln are handled +(see also section 2.2). They have been added to the grammar. +This implies that they can not be redefined as opposed to +the other required procedures and functions. They should be +removed from the grammar altogether. This could imply that +more semantic checks have to be performed.

+ +

No effort is made to detect possible run-time errors +during compilation.
+E.g. a : array[1..10] of something, and +the array selection a[11] would occur.

+ +

Some assistance to implement the improvements mentioned +above, can be obtained from [PCV].

+ +

12. History & Acknowledgements

+ +

History

+ +

The purpose of this project was to make a Pascal +compiler which should satisfy the conditions of the ISO +standard. The task was considerably simplified, because +parts of the Modula-2 compiler were used. This gave the +advantage of increasing the uniformity of the compilers in +ACK.
+While developing the compiler, a number of errors were +detected in the Modula-2 compiler, EM utility modules and +the old Pascal compiler.

+ +

Acknowledgements

+ +

During the development of the compiler, valuable support +was received from a number of persons. In this regard we owe +a debt of gratitude to Fred van Beek, Casper Capel, Rob +Dekker, Frank Engel, José Gouweleeuw and Sonja +Keijzer (Jut and Jul !!), Herold Kroon, Martin van +Nieuwkerk, Sjaak Schouten, Eric Valk, and Didan Westra.
+Special thanks are reserved for Dick Grune, who introduced +us to the field of Compiler Design and who helped testing +the compiler. Ceriel Jacobs, who developed LLgen and the +Modula-2 compiler of ACK. Finally we would like to thank +Erik Baalbergen, who had the supervision on this entire +project and gave us many valuable suggestions.

+ +

13. References

+ + + + + + +
+ +

[ISO]

+
+ +

ISO 7185 Specification for Computer Programming Language +Pascal, 1982, Acornsoft ISO-PASCAL, 1984

+
+ + + + + + +
+ +

[EM]

+
+ +

A.S. Tanenbaum, H. van Staveren, E.G. Keizer and J.W. +Stevenson, Description Of A Machine Architecture for use +with Block Structured Languages, Informatica Rapport +IR-81, Vrije Universiteit, Amsterdam, 1983

+
+ + + + + + +
+ +

[C]

+
+ +

B.W. Kernighan and D.M. Ritchie, The C Programming +Language, Prentice-Hall, 1978

+
+ + + + + + +
+ +

[LL]

+
+ +

C.J.H. Jacobs, Some Topics in Parser Generation, +Informatica Rapport IR-105, Vrije Universiteit, Amsterdam, +October 1985

+
+ + + + + + +
+ +

[IM2]

+
+ +

J.W. Stevenson, Pascal-VU Reference Manual and Unix +Manual Pages, Informatica Manual IM-2, Vrije +Universiteit, Amsterdam, 1980

+
+ + + + + + +
+ +

[JEN]

+
+ +

K. Jensen and N.Wirth, Pascal User Manual and +Report, Springer-Verlag, 1978

+
+ + + + + + +
+ +

[ACK]

+
+ +

ACK Manual Pages: ALLOC, ASSERT, EM_CODE, EM_MES, +IDF, INPUT, PRINT, STRING, SYSTEM

+
+ + + + + + +
+ +

[AHO]

+
+ +

A.V. Aho, R. Sethi and J.D. Ullman, Compiler +Principles, Techniques, and Tools, Addison Wesley, +1985

+
+ + + + + + +
+ +

[LEX]

+
+ +

M.E. Lesk, Lex - A Lexical Analyser Generator, +Comp. Sci. Tech. Rep. No. 39, Bell Laboratories, Murray +Hill, New Jersey, October 1975

+
+ + + + + + +
+ +

[PCV]

+
+ +

B.A. Wichmann and Z.J. Ciechanowicz, Pascal Compiler +Validation, John Wiley & Sons, 1983

+
+ + + + + + +
+ +

[SAL]

+
+ +

A.H.J. Sale, A Note on Scope, One-Pass Compilers and +Pascal, Australian Communications, 1, 1, 80-82, 1979

+
+ +

Appendix A: ISO-PASCAL grammar

+ +

A.1 Lexical tokens

+ +

The syntax describes the formation of lexical tokens +from characters and the separation of these tokens, and +therefore does not adhere to the same rules as the syntax in +A.2.

+ +

The lexical tokens used to construct Pascal programs +shall be classified into special-symbols, identifiers, +directives, unsigned-numbers, labels and character-strings. +The representation of any letter (upper-case or lower-case, +differences of font, etc) occurring anywhere outside of a +character-string shall be insignificant in that occurrence +to the meaning of the program.

+ +

letter = 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 .

+ +

digit = 0 | 1 | 2 | 3 | +4 | 5 | 6 | 7 | 8 | +9 .

+ +

The special symbols are tokens having special meanings +and shall be used to delimit the syntactic units of the +language.

+ +

special-symbol = + | | * | +/ | = | < | > | [ | +] | . | , | : | ; | +^ | ( | ) | <> | +<= | >= | := | .. | +word-symbol .

+ +

word-symbol = and | array | begin | +case | const | div | do | +downto | else | end | file | +for | function | goto | if | +in | label | mod | nil | +not | of | or | packed | +procedure | program | record | +repeat | set | then | to | +type | until | var | while | +with .

+ +

Identifiers may be of any length. All characters of an +identifier shall be significant. No identifier shall have +the same spelling as any word-symbol.

+ +

identifier = letter { letter | digit } .

+ +

A directive shall only occur in a procedure-declaration +or function-declaration. No directive shall have the same +spelling as any word-symbol.

+ +

directive = letter {letter | digit} .

+ +

Numbers are given in decimal notation.

+
unsigned-integer = digit-sequence .
+unsigned-real = unsigned-integer . fractional-part [ e scale-factor ] | unsigned-integer e scale-factor .
+digit-sequence = digit {digit} .
+fractional-part = digit-sequence .
+
+ +

scale-factor = signed-integer . signed-integer = [sign] +unsigned-integer . sign = + | .

+ +

Labels shall be digit-sequences and shall be +distinguished by their apparent integral values and shall be +in the closed interval 0 to 9999.

+ +

label = digit-sequence .

+ +

A character-string containing a single string-element +shall denote a value of the required char-type. Each +string-character shall denote an implementation- defined +value of the required char-type.

+
character-string =  string-element { string-element }  .
+string-element = apostrophe-image | string-character .
+apostrophe-image = ’’ .
+string-character = All 7-bits ASCII characters except linefeed (10), vertical tab (11), and new page (12).
+
+ +

The construct:

+ +

{ +any-sequence-of-characters-and-separations-of-lines- +not-containing-right-brace }

+ +

shall be a comment if the "{" does not occur +within a character-string or within a comment. The +substitution of a space for a comment shall not alter the +meaning of a program.

+ +

Comments, spaces (except in character-strings), and the +separation of consecutive lines shall be considered to be +token separators. Zero or more token separators may occur +between any two consecutive tokens, or before the first +token of a program text. No separators shall occur within +tokens.

+ +

A.2 Grammar

+ +

The non-terminal symbol program is the start +symbol of the grammar.

+
actual-parameter : expression | variable-access | procedure-identifier | function-identifier .
+actual-parameter-list : ( actual-parameter { , actual-parameter } ) .
+adding-operator : + |  | or .
+array-type : array [ index-type { , index-type } ] of component-type .
+array-variable : variable-access .
+assignment-statement : ( variable-access | function-identifier ) := expression .
+
+base-type : ordinal-type .
+block : label-declaration-part constant-definition-part type-definition-part variable-declaration-part
+        procedure-and-function-declaration-part statement-part .
+Boolean-expression : expression .
+bound-identifier : identifier .
+buffer-variable : file-variable ^ .
+
+case-constant : constant .
+case-constant-list : case-constant { , case-constant } .
+case-index : expression .
+case-list-element : case-constant-list : statement .
+case-statement : case case-index of case-list-element { ; case-list-element } [ ; ] end .
+component-type : type-denoter .
+component-variable : indexed-variable | field-designator .
+compound-statement : begin statement-sequence end .
+conditional-statement : if-statement | case-statement .
+conformant-array-parameter-specification : value-conformant-array-specification |
+                  variable-conformant-array-specification .
+conformant-array-schema : packed-conformant-array-schema | unpacked-conformant-array-schema .
+constant : [ sign ] ( unsigned-number | constant-identifier ) | character-string .
+constant-definition : identifier = constant .
+constant-definition-part : [ const constant-definition ; { constant-definition ; } ] .
+constant-identifier : identifier .
+control-variable : entire-variable .
+
+domain-type : type-identifier .
+
+else-part : else statement .
+empty-statement : .
+entire-variable : variable-identifier .
+enumerated-type : ( identifier-list ) .
+expression : simple-expression [ relational-operator simple-expression ] .
+
+ +

factor : variable-access | unsigned-constant | +bound-identifier | function-designator | set-constructor | +( expression ) | not factor . +field-designator : record-variable . field-specifier +| field-designator-identifier . field-designator-identifier +: identifier . field-identifier : identifier . field-list : +[ ( fixed-part [ ; variant-part ] | variant-part ) [ +; ] ] . field-specifier : field-identifier . +file-type : file of component-type . file-variable : +variable-access . final-value : expression . fixed-part : +record-section { ; record-section } . for-statement : +for control-variable := initial-value ( +to | downto ) final-value do statement +. formal-parameter-list : ( formal-parameter-section +{ ; formal-parameter-section } ) . +formal-parameter-section : value-parameter-specification | +variable-parameter-specification | +procedural-parameter-specification | +functional-parameter-specification | +conformant-array-parameter-specification . function-block : +block . function-declaration : function-heading ; +directive | function-identification ; function-block +| function-heading ; function-block . +function-designator : function-identifier [ +actual-parameter-list ] . function-heading : function +identifier [ formal-parameter-list ] : result-type . +function-identification : function +function-identifier . function-identifier : identifier . +functional-parameter-specification : function-heading .

+ +

goto-statement : goto label .

+ +

identified-variable : pointer-variable ^ . +identifier-list : identifier { , identifier } . +if-statement : if Boolean-expression then +statement [ else-part ] . index-expression : expression . +index-type : ordinal-type . index-type-specification : +identifier .. identifier : +ordinal-type-identifier . indexed-variable : array-variable +[ index-expression { , index-expression } +] . initial-value : expression .

+ +

label : digit-sequence . label-declaration-part : [ +label label { , label } ; ] .

+ +

member-designator : expression [ .. expression ] +. multiplying-operator : * | / | div | +mod | and .

+ +

new-ordinal-type : enumerated-type | subrange-type . +new-pointer-type : ^ domain-type . +new-structured-type : [ packed ] +unpacked-structured-type . new-type : new-ordinal-type | +new-structured-type | new-pointer-type .

+ +

ordinal-type : new-ordinal-type | +ordinal-type-identifier . ordinal-type-identifier : +type-identifier .

+ +

packed-conformant-array-schema : packed array [ +index-type-specification ] of type-identifier . +pointer-type-identifier : type-identifier . pointer-variable +: variable-access . procedural-parameter-specification : +procedure-heading . procedure-and-function-declaration-part +: { ( procedure-declaration | function-declaration ) +; } . procedure-block : block . procedure-declaration +: procedure-heading ; directive | +procedure-identification ; procedure-block | +procedure-heading ; procedure-block . +procedure-heading : procedure identifier [ +formal-parameter-list ] . procedure-identification : +procedure procedure-identifier . procedure-identifier +: identifier . procedure-statement : procedure-identifier ( +[ actual-parameter-list ] | read-parameter-list | +readln-parameter-list | write-parameter-list | +writeln-parameter-list ) . program : program-heading +; program-block . . program-block : block . +program-heading : program identifier [ ( +program-parameters ) ] . program-parameters : +identifier-list .

+ +

read-parameter-list : ( [ file-variable , +] variable-access { , variable-access } ) . +readln-parameter-list : [ ( ( file-variable | +variable-access ) { , variable-access } ) ] . +record-section : identifier-list : type-denoter . +record-type : record field-list end . +record-variable : variable-access . record-variable-list : +record-variable { , record-variable } . +relational-operator : = | <> | +< | > | <= | >= | +in . repeat-statement : repeat +statement-sequence until Boolean-expression . +repetitive-statement : repeat-statement | while-statement | +for-statement . result-type : simple-type-identifier | +pointer-type-identifier .

+ +

set-constructor : [ [ member-designator { +, member-designator } ] ] . set-type : set +of base-type . sign : + | . +simple-expression : [ sign ] term { adding-operator term } . +simple-statement : empty-statement | assignment-statement | +procedure-statement | goto-statement . +simple-type-identifier : type-identifier .

+ +

statement : [ label : ] ( simple-statement | +structured-statement ) . statement-part : compound-statement +. statement-sequence : statement { ; statement } . +structured-statement : compound-statement | +conditional-statement | repetitive-statement | +with-statement . subrange-type : constant .. constant +.

+ +

tag-field : identifier . tag-type : +ordinal-type-identifier . term : factor { +multiplying-operator factor } . type-definition : identifier += type-denoter . type-definition-part : [ type +type-definition ; { type-definition ; } ] . +type-denoter : type-identifier | new-type . type-identifier +: identifier .

+ +

unpacked-conformant-array-schema : array [ +index-type-specification { ; index-type-specification +} ] of ( type-identifier | conformant-array-schema ) +. unpacked-structured-type : array-type | record-type | +set-type | file-type . unsigned-constant : unsigned-number | +character-string | constant-identifier | nil . +unsigned-number : unsigned-integer | unsigned-real .

+ +

value-conformant-array-specification : identifier-list +: conformant-array-schema . +value-parameter-specification : identifier-list : +type-identifier . variable-access : entire-variable | +component-variable | identified-variable | buffer-variable . +variable-conformant-array-specification : var +identifier-list : conformant-array-schema . +variable-declaration : identifier-list : type-denoter +. variable-declaration-part : [ var +variable-declaration ; { variable-declaration +; } ] . variable-identifier : identifier . +variable-parameter-specification : var +identifier-list : type-identifier . variant : +case-constant-list : ( field-list ) . +variant-part : case variant-selector of +variant { ; variant } . variant-selector : [ +tag-field : ] tag-type .

+ +

while-statement : while Boolean-expression +do statement . with-statement : with +record-variable-list do statement . write-parameter : +expression [ : expression [ : expression ] ] . +write-parameter-list : ( [ file-variable , ] +write-parameter { , write-parameter } ) . +writeln-parameter-list : [ ( ( file-variable | +write-parameter ) { , write-parameter } ) ] +.

+ +

Appendix B: Changes to the run time library

+ +

Some minor changes in the run time library have been +made concerning the external files (i.e. program arguments). +The old compiler reserved space for the file structures of +the external files in one hol block. In the new +compiler, every file structure is placed in a separate +bss block. This implies that the arguments with which +_ini is called are slightly different. The second +argument was the base of the hol block to relocate +the buffer addresses, it is changed into an integer denoting +the size of the array passed as third argument. The third +argument was a pointer to an array of integers containing +the description of external files, this argument is changed +into a pointer to an array of pointers to file +structures.

+ +

The differences in the generated EM code for an +arbitrary Pascal program are listed below (only the relevant +parts are shown):

+ + + + + +
+
program external_files(output,f);
+var
+
+
+ + + + + + + +
+ +

f : file of some-type;

+
+
+ + + + + +
+

.
+.
+end
.

+ +

EM code generated by Pascal-VU:
+.
+.
+hol 1088,-2147483648,0 ; space belonging to file structures +of the program arguments
+.
+.
+.
+.2
+con 3, -1, 544, 0 ; description of external files
+lxl 0
+lae .2
+lae 0 ; base of hol block, to relocate buffer addresses
+lxa 0
+cal $_ini
+asp 16
+.
+.

+ +

EM code generated by our compiler:
+.
+.
+f
+bss 540,0,0 ; space belonging to file structure of program +argument f
+output
+bss 540,0,0 ; space belonging to file structure of standard +output

+
+ +

. . . .2 con 0U4, output, f ; the absence of standard +input is denoted by a null pointer lxl 0 lae .2 loc 3 ; +denotes the size of the array of pointers to file structures +lxa 0 cal $_ini asp 16 . .

+ +

The following files in the run time library have been +changed:

+ + + + + +
+

pc_file.h hlt.c ini.c opn.c pentry.c pexit.c

+ +

Appendix C: An example

+ + + + +

1

+ + + + + + + + + +
+ +

program factorials(input, output);
+2

+
+
+ +

{ This program prints factorials }

+
+
+ +

3

+ + + + +

4

+ + + + + + + + + + + + + + + + + + + +
+ +

const
+5

+
+
+ +

FAC1 = 1;
+6

+
+
+ +

var
+7

+
+
+ +

i : integer;

+
+
+ +

8

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

9

+
+ +

function factorial(n : integer) : integer;

+
+
+ +

10

+
+ +

begin

+
+
+ +

11

+
+ +

if n = FAC1 then

+
+
+ +

12

+
+ +

factorial := FAC1

+
+
+ +

13

+
+ +

else

+
+
+ +

14

+
+ +

factorial := n * factorial(n-1);

+
+
+ +

15

+
+ +

end;

+
+
+ +

16

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

17

+
+ +

begin

+
+
+ +

18

+
+ +

write(’Give a number : ’);

+
+
+ +

19

+
+ +

readln(i);

+
+
+ +

20

+
+ +

if i < 1 then

+
+
+ +

21

+
+ +

writeln(’No factorial’)

+
+
+ +

22

+
+ +

else

+
+
+ +

23

+
+ +

writeln(factorial(i):1);

+
+
+ +

24

+
+ +

end.

+
+
+ + + + +

mes 2,4,4

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +

loc 16
+.1

+
+
+ + + + + + +

cal $_wrs
+rom ’factorials.p\000’

+
+
+ + + + +

asp 12
+i

+
+
+ + + + + + +

lin 19
+bss 4,0,0

+
+
+ + + + + +

lae input
+output

+
+
+ + + + + + +

cal $_rdi
+bss 540,0,0

+
+
+ + + + + +

asp 4
+input

+
+
+ + + + + + +

lfr 4
+bss 540,0,0

+
+
+ + + + + +

ste i
+exp $factorial

+
+
+ + + + + +

lae input
+pro $factorial, ?

+
+
+ + + + + +

cal $_rln
+mes 9,4

+
+
+ + + + + +

asp 4
+lin 11

+
+
+ + + + + + +

lin 20
+lol 0

+
+
+ + + + + + +

loe i
+loc 1

+
+
+ + + + + + +

loc 1
+cmi 4

+
+
+ + + + + + +

cmi 4
+teq

+
+
+ + + + + + +

tlt
+zeq *1

+
+
+ + + + + + +

zeq *1
+lin 12

+
+
+ + + + + + +

lin 21
+loc 1

+
+
+ + + + + + +

.4
+stl -4

+
+
+ + + + + + +

rom ’No factorial’
+bra *2

+
+
+ + + + + + +

lae output
+1

+
+
+ + + + + + +

lae .4
+lin 14

+
+
+ + + + + + +

loc 12
+lol 0

+
+
+ + + + + + +

cal $_wrs
+lol 0

+
+
+ + + + + + +

asp 12
+loc 1

+
+
+ + + + + + +

lae output
+sbi 4

+
+
+ + + + + + +

cal $_wln
+cal $factorial

+
+
+ + + + + +

asp 4
+asp 4

+
+
+ + + + + + +

bra *2
+lfr 4

+
+
+ + + + + + +

1
+mli 4

+
+
+ + + + + + +

lin 23
+stl -4

+
+
+ + + + + + +

lae output
+2

+
+
+ + + + + + +

loe i
+lin 15

+
+
+ + + + + + +

cal $factorial
+mes 3,0,4,0,0

+
+
+ + + + + +

asp 4
+lol -4

+
+
+ + + + + + +

lfr 4
+ret 4

+
+
+ + + + + + +

loc 1
+end 4

+
+
+ + + + + + +

cal $_wsi
+exp $m_a_i_n

+
+
+ + + + +

asp 12
+pro $m_a_i_n, ?

+
+
+ + + + +

lae output
+mes 9,0

+
+
+ + + + + +

cal $_wln
+fil .1

+
+
+ + + + + + +

asp 4
+.2

+
+
+ + + + + + +

2
+con input, output

+
+
+ + + + +

lin 24
+lxl 0

+
+
+ + + + + + +

loc 0
+lae .2

+
+
+ + + + + + +

cal $_hlt
+loc 2

+
+
+ + + + + + +

end 0
+lxa 0

+
+
+ + + + + + +

mes 4,24,’factorials.p\000’

+
+
+ +

cal $_ini asp 16 lin 18 .3 rom ’Give a number : +’ lae output lae .3

+
+ + diff --git a/src/olddocs/pascal.pdf b/src/olddocs/pascal.pdf new file mode 100644 index 0000000000000000000000000000000000000000..34ea952f0b0fa4b113bb6823a7f698d77b982170 GIT binary patch literal 93994 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/pcref.html b/src/olddocs/pcref.html new file mode 100644 index 000000000..5486ff38f --- /dev/null +++ b/src/olddocs/pcref.html @@ -0,0 +1,2036 @@ + + + + + + + + + + +
+ +

Amsterdam Compiler Kit-Pascal reference +manual

+ +

by

+ +

Johan W. Stevenson

+ +

( January 4, 1983 )

+ +

(revised)

+ +

Hans van Eck

+ +

( May 1, 1989 )

+ +

Vakgroep Informatica
+Vrije Universiteit
+De Boelelaan 1081
+Amsterdam

+ +

1. Introduction

+ + + + + +
+

This document refers to the (1982) BSI standard for +Pascal [1]. Ack-Pascal complies with the requirements of +level 1 of BS 6192: 1982, with the exceptions as listed in +this document.

+ +

The standard requires an accompanying document describing +the implementation-defined and implementation-dependent +features, the reaction on errors and the extensions to +standard Pascal. These four items will be treated in the +rest of this document, each in a separate chapter. The other +chapters describe the deviations from the standard and the +list of options recognized by the compiler.

+ +

The Ack-Pascal compiler produces code for an EM machine +as defined in [2]. It is up to the implementor of the EM +machine to decide whether errors like integer overflow, +undefined operand and range bound error are recognized or +not.

+ +

There does not (yet) exist a hardware EM machine. +Therefore, EM programs must be interpreted, or translated +into instructions for a target machine. The Ack-Pascal +compiler is currently available for use with the VAX, +Motorola MC68020, Motorola MC68000, PDP-11, and Intel 8086 +code-generators. For the 8086, MC68000, and MC68020, +floating point emulation is used. This is made available +with the -fp option, which must be passed to +ack[3].

+ +

2. Implementation-defined features

+ + + + + +
+

For each implementation-defined feature mentioned in the +BSI standard we give the section number, the quotation from +that section and the definition. First we quote the +definition of implementation-defined:

+ +

Possibly differing between processors, but defined for +any particular processor.

+ +

BS 6.1.7: Each string-character shall denote an +implementation-defined value of the required char-type.

+ + + + + +
+

All 7-bits ASCII characters except linefeed LF (10) are +allowed.

+ +

BS 6.4.2.2: The values of type real shall be an +implementation-defined subset of the real numbers denoted as +specified by 6.1.5 bu signed real.

+ + + + + +
+

The format of reals is not defined in EM. Even the size +of reals depends on the EM-implementation. The compiler can +be instructed, by the V-option, to use a different size for +real values. The size of reals is preset by the calling +program ack [3] to the proper size.

+ +

BS 6.4.2.2: The type char shall be the +enumeration of a set of implementation-defined characters, +some possibly without graphic representations.

+ + + + + +
+

The 7-bits ASCII character set is used, where LF (10) +denotes the end-of-line marker on text-files.

+
+ +

BS 6.4.2.2: The ordinal numbers of the character +values shall be values of integer-type, that are +implementation-defined, and that are determined by mapping +the character values on to consecutive non-negative integer +values starting at zero.

+ + + + + +
+

The normal ASCII ordering is used: +ord(’0’)=48, ord(’A’)=65, +ord(’a’)=97, etc.

+ +

BS 6.6.5.2: The post-assertions imply +corresponding activities on the external entities, if any, +to which the file-variables are bound. These activities, and +the point at which they are actually performed, shall be +implementation-defined.

+ + + + + +
+

The reading and writing writing of objects on files is +buffered. This means that when a program terminates +abnormally, IO may be unfinished. Terminal IO is unbuffered. +Files are closed whenever they are rewritten or reset, or on +program termination.

+
+ +

BS 6.7.2.2: The predefined constant maxint shall +be of integer-type and shall denote an +implementation-defined value, that satisfies the

+ +

following conditions:

+ + + + + +
+

(a) All integral values in the closed interval from +-maxint to +maxint shall be values of the integer-type. (b) +Any monadic operation performed on an integer value in this +interval shall be correctly performed according to the +mathematical rules for integer arithmetic. (c) Any dyadic +integer operation on two integer values in this same +interval shall be correctly performed according to the +mathematical rules for integer arithmetic, provided that the +result is also in this interval. (d) Any relational +operation on two integer values in this same interval shall +be correctly performed according to the mathematical rules +for integer arithmetic.

+ + + + + +
+

The representation of integers in EM is a n*8-bit +word using two’s complement arithmetic. Where n +is called wordsize. The range of available integers depends +on the EM implementation: For 2-byte machines, the integers +range from -32767 to +32767. For 4-byte machines, the +integers range from -2147483647 to 2147483647. The number +-maxint-1 may be used to indicate +’undefined’.

+ +

BS 6.7.2.2: The result of the real arithmetic +operators and functions shall be approximations to the +corresponding mathematical results. The accuracy of this +approximation shall be implementation-defined

+ + + + + +
+

Since EM doesn’t specify floating point format, it +is not possible to specify the accuracy. When the floating +point emulation is used, and the default size of reals is 8 +bytes, the accuracy is 11 bits for the exponent, and 53 bits +for the mantissa. This gives an accuracy of about 16 digits, +and exponents ranging from -309 to +307.

+ +

BS 6.9.3.1: The default TotalWidth values for +integer, Boolean and real types shall be +implementation-defined.

+ + + + + +
+

The defaults are: integer 6 for 2-byte machines, 11 for +4-byte machines Boolean 5 real 14

+
+ +

BS 6.9.3.4.1: ExpDigits, the number of digits +written in an exponent part of a real, shall be +implementation-defined.

+ + + + + +
+

ExpDigits is defined as 3. This is sufficient for all +implementations currently available. When the representation +would need more than 3 digits, then the string +’***’ replaces the exponent.

+
+ +

BS 6.9.3.4.1: The character written as part of +the representation of a real to indicate the beginning of +the exponent part shall be implementation-defined, either +’E’ or ’e’.

+ + + + + +
+

The exponent part starts with ’e’.

+
+ +

BS 6.9.3.5: The case of the characters written as +representation of the Boolean values shall be +implementation-defined.

+ + + + + +
+

The representations of true and false are +’true’ and ’false’.

+
+ +

BS 6.9.5: The effect caused by the standard +procedure page on a text file shall be +implementation-defined.

+ + + + + +
+

The ASCII character form feed FF (12) is written.

+
+ +

BS 6.10: The binding of the variables denoted by +the program-parameters to entities external to the program +shall be implementation-defined if the variable is of a +file-type.

+ + + + + +
+

The program parameters must be files and all, except +input and output, must be declared as such in the program +block.

+
+ + + + + +
+

The program parameters input and output, if specified, +will correspond with the UNIX streams ’standard +input’ and ’standard output’.

+ +

The other program parameters will be mapped to the +argument strings provided by the caller of this program. The +argument strings are supposed to be path names of the files +to be opened or created. The order of the program parameters +determines the mapping: the first parameter is mapped onto +the first argument string etc. Note that input and output +are ignored in this mapping.

+ +

The mapping is recalculated each time a program parameter +is opened for reading or writing by a call to the standard +procedures reset or rewrite. This gives the programmer the +opportunity to manipulate the list of string arguments using +the external procedures argc, argv and argshift available in +libpc [6].

+
+ +

BS 6.10: The effect of an explicit use of reset +or rewrite on the standard textfiles input or output shall +be implementation-defined.

+ + + + + +
+

The procedures reset and rewrite are no-ops if applied to +input or output.

+ +

3. Implementation-dependent features

+ + + + + +
+

For each implementation-dependent feature mentioned in +the BSI standard, we give the section number, the quotation +from that section and the way this feature is treated by the +Ack-Pascal system. First we quote the definition of +’implementation-dependent’:

+ +

Possibly differing between processors and not necessarily +defined for any particular processor.

+ +

BS 6.7.2.1: The order of evaluation of the +operands of a dyadic operator shall be +implementation-dependent.

+ + + + + +
+

Operands are always evaluated, so the program part

+ +

if (p<>nil) and (p^.value<>0) then

+ +

is probably incorrect.

+
+ + + + + +
+

The left-hand operand of a dyadic operator is almost +always evaluated before the right-hand side. Some peculiar +evaluations exist for the following cases:

+
+ + + + + +
+

1. the modulo operation is performed by a library routine +to check for negative values of the right operand.

+ +

2. the expression

+ +
        set1 <= set2
+
+ +

where set1 and set2 are compatible set types is evaluated +in the following steps:

+
+ + + + + +
+

- evaluate set2
+- evaluate set1
+- compute set2+set1
+- test set2 and set2+set1 for equality

+ + + + + +
+

3. the expression

+
+ + + + + +
+

set1 >= set2

+ +

where set1 and set2 are compatible set types is evaluated +in the following steps:

+
+ + + + + +
+

- evaluate set1
+- evaluate set2
+- compute set1+set2
+- test set1 and set1+set2 for equality

+ +

BS 6.7.3: The order of evaluation, accessing and +binding of the

+ +

actual-parameters for functions shall be +implementation-dependent.

+ + + + + +
+

The order of evaluation is from right to left.

+
+ +

BS 6.8.2.2: The decision as to the order of +accessing the variable and evaluating the expression in an +assignment-statement, shall be implementation-dependent.

+ + + + + +
+

The expression is evaluated first.

+
+ +

BS 6.8.2.3: The order of evaluation and binding +of the actual-parameters for procedures shall be +implementation-dependent.

+ + + + + +
+

The same as for functions.

+
+ +

BS 6.9.5: The effect of inspecting a text file to +which the page procedure was applied during generation is +implementation-dependent.

+ + + + + +
+

The formfeed character written by page is treated like a +normal character, with ordinal value 12.

+
+ +

BS 6.10: The binding of the variables denoted by +the program-parameters to entities external to the program +shall be implementation-dependent unless the variable is of +a file-type.

+ + + + + +
+

Only variables of a file-type are allowed as program +parameters.

+ +

4. Error handling

+ + + + + +
+

There are three classes of errors to be distinguished. In +the first class are the error messages generated by the +compiler. The second class consists of the occasional errors +generated by the other programs involved in the compilation +process. Errors of the third class are the errors as defined +in the standard by:

+ +

An error is a violation by a program of the requirements +of this standard that a processor is permitted to leave +undetected.

+ +

4.1. Compiler errors

+ + + + + +
+

Error are written on the standard error output. Each line +has the form:

+ +

<file>, line <number>: +<description>
+Every time the compiler detects an error that does not have +influence on the code produced by the compiler or on the +syntax decisions, a warning messages is given. If only +warnings are generated, compilation proceeds and probably +results in a correctly compiled program.

+ + + + + +
+

Sometimes the compiler produces several errors for the +same line. They are only shown up to a maximum of 5 errors +per line. Warning are also shown up to a maximum of 5 per +line.

+ +

Extensive treatment of these errors is outside the scope +of this manual.

+
+ +

4.2. Runtime errors

+ + + + + +
+

Errors detected at run time cause an error message to be +generated on the diagnostic output stream (UNIX file +descriptor 2). The message consists of the name of the +program followed by a message describing the error, possibly +followed by the source line number. Unless the -L-option is +turned on, the compiler generates code to keep track of +which source line causes which EM instructions to be +generated. It depends on the EM implementation whether these +LIN instructions are skipped or executed.

+ +

For each error mentioned in the standard we give the +section number, the quotation from that section and the way +it is processed by the Pascal-compiler or runtime +system.

+ +

For detected errors the corresponding message and trap +number are given. Trap numbers are useful for +exception-handling routines. Normally, each error causes the +program to terminate. By using exception-handling routines +one can ignore errors or perform alternate actions. Only +some of the errors can be ignored by restarting the failing +instruction. These errors are marked as non-fatal, all +others

+ +

as fatal. A list of errors with trap number between 0 +and 63 (EM errors) can be found in [2]. Errors with trap +number between 64 and 127 (Pascal errors) are listed in +[7].

+ +

BS 6.4.6: It shall be an error if a value of type +T2 must be assignment-compatible with type T1, while T1 and +T2 are compatible ordinal-types and the value of type T2 is +not in the closed interval specified by T1.

+ + + + + +
+

The compiler distinguishes between array-index +expressions and the other places where +assignment-compatibility is required.

+
+ + + + + +
+

Array subscripting is done using the EM array +instructions. These instructions have three arguments: the +array base address, the index and the address of the array +descriptor. An array descriptor describes one dimension by +three values: the lower bound on the index, the number of +elements minus one and the element-size. It depends on the +EM implementation whether these bounds are checked. Since +most implementations don’t, an extra compiler flag is +added to force these checks.

+ + + + + +
+

The other places where assignment-compatibility is +required are:

+
+ + + + + +
+

- assignment
+- value parameters
+- procedures read and readln
+- the final value of the for-statement

+ + + + + +
+

For these places the compiler generates an EM range check +instruction, except when the R-option is turned on, or when +the range of values of T2 is enclosed in the range of T1. If +the expression consists of a single variable and if that +variable is of a subrange type, then the subrange type +itself is taken as T2, not its host-type. Therefore, a range +instruction is only generated if T1 is a subrange type and +if the expression is a constant, an expression with two or +more operands, or a single variable with a type not enclosed +in T1. If a constant is assigned, then the EM optimizer +removes the range check instruction, except when the value +is out of bounds.

+
+ + + + + +
+

It depends on the EM implementation whether the range +check instruction is executed or skipped.

+
+ +

BS 6.4.6: It shall be an error if a value of type +T2 must be assignment-compatible with type T1, while T1 and +T2 are compatible set-types and any member of the value of +type T2 is not in the closed interval specified by the +base-type of the type T1.

+ + + + + +
+

This error is not detected.

+
+ +

BS 6.5.3.3: It shall be an error if a component +of a variant-part of a variant, where the selector of the +variant-part is not a field, is accessed unless the variant +is active for the entirety of each reference and access to +each component of the variant.

+ + + + + +
+

This error is not detected.

+
+ +

BS 6.5.4: It shall be an error if the +pointer-variable of an identified-variable either denotes a +nil-value or is undefined.

+ + + + + +
+

The EM definition does not specify the binary +representation of pointer values, so that it is not possible +to choose an otherwise illegal binary representation for the +pointer value NIL. Rather arbitrary the compiler uses the +integer value zero to represent NIL. For all current +implementations this does not cause problems.

+
+ + + + + +
+

The size of pointers depends on the implementation and is +preset in the compiler by ack [3]. The compiler can +be instructed, by the V-option, to use another size for +pointer objects. NIL is represented here by the appropriate +number of zero words.

+ +

It depends on the EM implementation whether +de-referencing of a pointer with value NIL causes an +error.

+ +

BS 6.5.4: It shall be an error to remove the +identifying-value of an identified variable from its +pointer-type when a reference to the variable exists.

+ + + + + +
+

When the identified variable is an element of the +record-variable-list of a with_statement, a warning is given +at compile-time. Otherwise, this error is not detected.

+
+ +

BS 6.5.5: It shall be an error to alter the value +of a file-variable f when a reference to the buffer-variable +f^ exists.

+ + + + + +
+

When f is altered when it is an element of the +record-variable-list of a with-statement, a warning is +given. When a buffer-variable is used as a +variable-parameter, an error is given. This is done at +compile-time.

+
+ +

BS 6.6.5.2: It shall be an error if the stated +pre-assertion does not hold immediately prior to any use of +the file handling procedures rewrite, put, reset and +get.

+ + + + + +
+

For each of these four operations the pre-assertions can +be reformulated as:

+ +

rewrite(f): no pre-assertion.

+ + + + + +
+

put(f): f is opened for writing and f^ is not +undefined.
+reset(f): f exists.
+get(f): f is opened for reading and eof(f) is false.

+ +

The following errors are detected for these +operations:

+ +

rewrite(f):

+ + + + + +
+

more args expected, trap 64, fatal:

+ + + + + +
+

f is a program-parameter and the corresponding file name +is not supplied by the caller of the program.

+ + + + + +
+

rewrite error, trap 101, fatal:

+ + + + + +
+

the caller of the program lacks the necessary access +rights to create the file in the file system or +operating

+ +

system problems like table overflow prevent creation of +the file.

+ + + + + +
+

put(f):

+ + + + + +
+

file not yet open, trap 72, fatal:

+ + + + + +
+

reset or rewrite are never applied to the file. The +checks performed by the run time system are not +foolproof.

+ + + + + +
+

not writable, trap 96, fatal:

+ + + + + +
+

f is opened for reading.

+ + + + + +
+

write error, trap 104, fatal:

+ + + + + +
+

probably caused by file system problems. For instance, +the file storage is exhausted. Because IO is buffered to +improve performance, it might happen that this error occurs +if the file is closed. Files are closed whenever they are +rewritten or reset, or on program termination.

+ + + + + +
+

reset(f):

+ + + + + +
+

more args expected, trap 64, fatal:

+ + + + + +
+

same as for rewrite(f).

+ + + + + +
+

reset error, trap 100, fatal:

+ + + + + +
+

f does not exist, or the caller has insufficient access +rights, or operating system tables are exhausted.

+ + + + + +
+

get(f):

+ + + + + +
+

file not yet open, trap 72, fatal:

+ + + + + +
+

as for put(f).

+ + + + + +
+

not readable, trap 97, fatal:

+ + + + + +
+

f is opened for writing.

+ + + + + +
+

end of file, trap 98, fatal:

+ + + + + +
+

eof(f) is true just before the call to get(f).

+ + + + + +
+

read error, trap 103, fatal:

+ + + + + +
+

unlikely to happen. Probably caused by hardware problems +or by errors elsewhere in the program that destroyed the +file information maintained by the run time system.

+ + + + + +
+

truncated, trap 99, fatal:

+ + + + + +
+

the file is not properly formed by an integer number of +file elements. For instance, the size of a file of integer +is odd.

+ + + + + +
+

non-ASCII char read, trap 106, non-fatal:

+ + + + + +
+

the character value of the next character-type file +element is out of range (0..127). Only for text +files.

+ +

BS 6.6.5.3: It shall be an error if a variant of +a variant-part within the new variable becomes active and a +different variant of the variant-part is one of the +specified variants.

+ + + + + +
+

This error is not detected.

+
+ +

BS 6.6.5.3: It shall be an error to use +dispose(q) if the identifying variable has been allocated +using the form new(p,c1,...,cn).

+ + + + + +
+

This error is not detected. However, this error can cause +more memory to be freed then was allocated. Dispose causes a +fatal trap 73 when memory already on the free list is freed +again.

+
+ +

BS 6.6.5.3: It shall be an error to use +dispose(q,k1,...,km) if the identifying variable has been +allocated using the form new(p,c1,...,cn) and m is not equal +to n.

+ + + + + +
+

This error is not detected. However, this error can cause +more memory to be freed then was allocated. Dispose causes a +fatal trap 73 when memory already on the free list is freed +again.

+
+ +

BS 6.6.5.3: It shall be an error if the variants +of a variable to be disposed are different from those +specified by the case-constants to dispose.

+ + + + + +
+

This error is not detected.

+
+ +

BS 6.6.5.3: It shall be an error if the value of +the pointer parameter of dispose has nil-value or is +undefined.

+ + + + + +
+

The same comments apply as for de-referencing NIL or +undefined pointers.

+
+ +

BS 6.6.5.3: It shall be an error if a variable +created using the second form of new is accessed by the +identified variable of the variable-access of a factor, of +an assignment-statement, or of an actual-parameter.

+ + + + + +
+

This error is not detected.

+
+ +

BS 6.6.6.2: It shall be an error if the value of +sqr(x) does not exist.

+ + + + + +
+

This error is detected for real-type arguments (real +overflow, trap 4, non-fatal).

+
+ +

BS 6.6.6.2: It shall be an error if x in ln(x) is +smaller than or equal to 0.

+ + + + + +
+

This error is detected (error in ln, trap 66, +non-fatal)

+
+ +

BS 6.6.6.2: It shall be an error if x in sqrt(x) +is smaller than 0.

+ + + + + +
+

This error is detected (error in sqrt, trap 67, +non-fatal)

+ +

In addition to these errors, overflow in the expression +exp(x) is detected (error in exp, trap 65, non-fatal; real +overflow, trap 4, non-fatal)

+
+ +

BS 6.6.6.3: It shall be an error if the integer +value of trunc(x) does not exist.

+ + + + + +
+

It depends on the implementations whether this error is +detected. The floating-point emulation detects this error +(conversion error, trap 10, non-fatal).

+
+ +

BS 6.6.6.3: It shall be an error if the integer +value of round(x) does not exist.

+ + + + + +
+

It depends on the implementations whether this error is +detected. The floating-point emulation detects this error +(conversion error, trap 10, non-fatal).

+
+ +

BS 6.6.6.4: It shall be an error if the integer +value of ord(x) does not exist.

+ + + + + +
+

This error can not occur, because the compiler will not +allow such ordinal types.

+
+ +

BS 6.6.6.4: It shall be an error if the character +value of chr(x) does not exist.

+ + + + + +
+

Except when the R-option is off, the compiler generates +an EM range check instruction. The effect of this +instruction depends on the EM implementation.

+
+ +

BS 6.6.6.4: It shall be an error if the value of +succ(x) does not exist.

+ + + + + +
+

Same comments as for chr(x).

+
+ +

BS 6.6.6.4: It shall be an error if the value of +pred(x) does not exist.

+ + + + + +
+

Same comments as for chr(x).

+
+ +

BS 6.6.6.5: It shall be an error if f in eof(f) +is undefined.

+ + + + + +
+

This error is detected (file not yet open, trap 72, +fatal).

+
+ +

BS 6.6.6.5: It shall be an error if f in eoln(f) +is undefined, or if eof(f) is true at that time.

+ + + + + +
+

The following errors may occur:

+
+ + + + + +
+

file not yet open, trap 72, fatal;
+not readable, trap 97, fatal;
+end of file, trap 98, fatal.

+ +

BS 6.7.1: It shall be an error if a +variable-access used as an operand in an expression is +undefined at the time of its use.

+ + + + + +
+

The compiler performs some limited checks to see if +identifiers are used before they are set. Since it can not +always be sure (one could, for instance, jump out of a +loop), only a warning is generated. When an expression +contains a function-call, an error occur if the function is +not assigned at run-time.

+
+ +

BS 6.7.2.2: A term of the form x/y shall be an +error if y is zero.

+ + + + + +
+

It depends on the EM implementation whether this error is +detected. On some machines, a trap may occur.

+
+ +

BS 6.7.2.2: It shall be an error if j is zero in +’i div j’.

+ + + + + +
+

It depends on the EM implementation whether this error is +detected. On some machines, a trap may occur.

+ +

BS 6.7.2.2: It shall be an error if j is zero or +negative in i MOD j.

+ + + + + +
+

This error is detected (only positive j in ’i mod +j’, trap 71, non-fatal).

+
+ +

BS 6.7.2.2: It shall be an error if the result of +any operation on integer operands is not performed according +to the mathematical rules for integer arithmetic.

+ + + + + +
+

The reaction depends on the EM implementation. Most +implementations, however, will not notice integer +overflow.

+
+ +

BS 6.8.3.5: It shall be an error if none of the +case-constants is equal to the value of the case-index upon +entry to the case-statement.

+ + + + + +
+

This error is detected (case error, trap 20, fatal).

+
+ +

BS 6.9.1: It shall be an error if the sequence of +characters read looking for an integer does not form a +signed-integer as specified in 6.1.5.

+ + + + + +
+

This error is detected (digit expected, trap 105, +non-fatal).

+
+ +

BS 6.9.1: It shall be an error if the sequence of +characters read looking for a real does not form a +signed-number as specified in 6.1.5.

+ + + + + +
+

This error is detected (digit expected, trap 105, +non-fatal).

+
+ +

BS 6.9.1: When read is applied to f, it shall be +an error if the buffer-variable f^ is undefined or the +pre-assertions for get do not hold.

+ + + + + +
+

This error is detected (see get(f)).

+
+ +

BS 6.9.3: When write is applied to a textfile f, +it shall be an error if f is undefined or f is opened for +reading.

+ + + + + +
+

This error is detected (see put(f)). Furthermore, this +error is also detected when f is not a textfile.

+
+ +

BS 6.9.3.1: The values of TotalWidth or +FracDigits shall be greater than or equal to one; it shall +be an error if either value is less then one.

+ + + + + +
+

When either value is less than zero, an error (illegal +field width, trap 75, non-fatal) occurs. Zero values are +allowed, in order to maintain some compatibility with the +old Ack-Pascal compiler.

+
+ +

BS 6.9.5: It shall be an error if the +pre-assertion required for writeln(f) doe not hold prior to +the invocation of page(f);

+ + + + + +
+

This error is detected (see put(f)).

+ +

5. Extensions to the standard

+ + + + + +
+

1. External routines

+ +

Except for the required directive ’forward’ +the Ack-Pascal compiler recognizes the directive +’extern’. This directive tells the compiler that +the procedure block of this procedure will not be present in +the current program. The code for the body of this procedure +must be included at a later stage of the compilation +process.

+
+ + + + + +
+

This feature allows one to build libraries containing +often used routines. These routines do not have to be +included in all the programs using them. Maintenance is much +simpler if there is only one library module to be changed +instead of many Pascal programs.

+ +

Another advantage is that these library modules may be +written in a different language, for instance C or the EM +assembly language. This is useful for accessing some +specific EM instructions not generated by the Pascal +compiler. Examples are the system call routines and some +floating point conversion routines. Another motive could be +the optimization of some time-critical program parts.

+ +

The use of external routines, however, is dangerous. The +compiler normally checks for the correct number and type of +parameters when a procedure is called and for the result +type of functions. If an external routine is called these +checks are not sufficient, because the compiler can not +check whether the procedure heading of the external routine +as given in the Pascal program matches the actual routine +implementation. It should be the loader’s task to +check this. However, the current loaders are not that smart. +Another solution is to check at run time, at least the +number of words for parameters. Some EM implementations +check this.

+ +

For those who wish the use the interface between C and +Pascal we give an incomplete list of corresponding formal +parameters in C and Pascal.

+ +

HTML-IMAGE.nr 3c 0

+ +
Pascal                  C
+
+
+
+
+
+a:integer               int a
+
+
+
+
+
+a:char                  int a
+
+
+
+
+
+a:boolean               int a
+
+
+
+
+
+a:real                  double a
+
+
+
+
+
+a:^type                 type *a
+
+
+
+
+
+var a:type              type *a
+
+
+
+
+
+procedure a(pars)       struct {
+
+
+
+
+
+                        void (*a)() ;
+
+
+
+
+
+                        char *static_link ;
+
+
+
+
+
+                   }
+
+
+
+
+
+function a(pars):type   struct {
+
+
+
+
+
+                        type (*a)() ;
+
+
+
+
+
+                        char *static_link ;
+
+
+
+
+
+                   }
+
+
+
+
+ +

HTML-IMAGE-ENDThe Pascal runtime system uses the +following algorithm when calling function/procedures passed +as parameters. HTML-IMAGE.nr 3c 0

+ +
if ( static_link )   (*a)(static_link,pars) ;
+
+
+
+
+
+else                 (*a)(pars) ;
+
+
+
+
+ +

HTML-IMAGE-END.ti -3 2. Separate compilation.

+ +

The compiler is able to (separately) compile a collection +of declarations, procedures and functions to form a library. +The library may be linked with the main program, compiled +later. The syntax of these modules is

+ +
module = [constant-definition-part]
+         [type-definition-part]
+         [var-declaration-part]
+         [procedure-and-function-declaration-part]
+
+ +

The compiler accepts a program or a module:

+ +
unit = program | module
+
+ +

All variables declared outside a module must be imported +by parameters, even the files input and output. Access to a +variable declared in a module is only possible using the +procedures and functions declared in that same module. By +giving the correct procedure/function heading followed by +the directive ’extern’ procedures and functions +declared in other units may be used.

+
+ + + + + +
+

3. Assertions.

+ +

When the s-option is off, Ack-Pascal compiler recognizes +an additional statement, the assertion. Assertions can be +used as an aid in debugging and documentation. The syntax +is:

+
+ + + + + +
+

assertion = ’assert’ Boolean-expression

+ +

An assertion is a simple-statement, so

+ +
simple-statement = [assignment-statement |
+                    procedure-statement |
+                    goto-statement |
+                    assertion
+                   ]
+
+ +

An assertion causes an error if the Boolean-expression is +false. That is its only purpose. It does not change any of +the variables, at least it should not. Therefore, do not use +functions with side-effects in the Boolean-expression. If +the a-option is turned on, then assertions are skipped by +the compiler. ’assert’ is not a word-symbol +(keyword) and may be used as identifier. However, assignment +to a variable and calling of a procedure with that name will +be impossible. If the s-option is turned on, the compiler +will not know a thing about assertions, so using assertions +will then give a parse error.

+
+ + + + + +
+

4. Additional procedures.

+ +

Three additional standard procedures are available:

+
+ + + + + +
+

halt: a call of this procedure is equivalent to jumping +to the end of the program. It is always the last statement +executed. The exit status of the program may be supplied as +optional argument. If not, it will be zero. release: mark: +for most applications it is sufficient to use the heap as +second stack. Mark and release are suited for this type of +use, more suited than dispose. mark(p), with p of type +pointer, stores the current value of the heap pointer in p. +release(p), with p initialized by a call of mark(p), +restores the heap pointer to its old value. All the heap +objects, created by calls of new between the call of mark +and the call of release, are removed and the space they used +can be reallocated. Never use mark and release together with +dispose!

+
+ + + + + +
+

5. UNIX interfacing.

+ +

If the c-option is turned on, then some special features +are available to simplify an interface with the UNIX +environment. First of all, the compiler allows for a +different type of string constants. These string constants +are delimited by double quotes (’"’). To +put a double quote into these strings, the double quote must +be repeated, like the single quote in normal string +constants. These special string constants are terminated by +a zero byte (chr(0)). The type of these constants is a +pointer to a packed array of characters, with lower bound 1 +and unknown upper bound.

+ + + + + +
+

Secondly, the compiler predefines a new type identifier +’string’ denoting this just described string +type.

+
+ + + + + +
+

These features are only useful for declaration of +constants and variables of type ’string’. String +objects may not be allocated on the heap and string pointers +may not be de-referenced. Still these strings are very +useful in combination with external routines. The procedure +write is extended to print these zero-terminated strings +correctly.

+
+ + + + + +
+

6. Double length (32 bit) integers.

+ +

If the d-option is turned on, then the additional type +’long’ is known to the compiler. By default, +long variables have integer values in the range +-2147483647..+2147483647, but this can be changed with the +-V option (if the backend can support this). Long constants +can not be declared. Longs can not be used as +control-variables. It is not allowed to form subranges of +type long. All operations allowed on integers are also +allowed on longs and are indicated by the same operators: +’+’, ’-’, ’*’, +’/’, ’div’, ’mod’. The +procedures read and write have been extended to handle long +arguments correctly. It is possible to read longs from a +file of integers and vice-versa, but only if longs and +integers have the same size. The default width for longs is +11. The standard procedures ’abs’ and +’sqr’ have been extended to work on long +arguments. Conversion from integer to long, long to real, +real to long and long to integer are automatic, like the +conversion from integer to real. These conversions may cause +a

+
+ + + + + +
+

conversion error, trap 10, non-fatal

+ + + + + +
+

7. Underscore as letter.

+ +

The character ’_’ may be used in forming +identifiers, if the u- or U-option is turned on. It is +forbidden to start identifiers with underscores, since this +may cause name-clashes with run-time routines.

+ +

8. Zero field width in write.

+ +

Zero TotalWidth arguments are allowed. No characters are +written for character, string or Boolean type arguments +then. A zero FracDigits argument for fixed-point +representation of reals causes the fraction and the +character ’.’ to be suppressed.

+ +

9. Pre-processing.

+ +

If the very first character of a file containing a Pascal +program is the sharp (’#’, ASCII 23(hex)) the +file is preprocessed in the same way as C programs. Lines +beginning with a ’#’ are taken as preprocessor +command lines and not fed to the Pascal compiler proper. C +style comments, /*......*/, are removed by the C +preprocessor, thus C comments inside Pascal programs are +also removed when they are fed through the +preprocessor.

+ +

6. Deviations from the standard

+ + + + + +
+

Ack-Pascal deviates from the standard proposal in the +following ways:

+
+ + + + + +
+

1. Standard procedures and functions are not allowed as +parameters in Ack-Pascal. The same result can be obtained +with negligible loss of performance by declaring some user +routines like:

+
+ + + + + +
+

function sine(x:real):real;
+begin
+sine:=sin(x)
+end;

+
+ + + + + +
+

2. The standard procedures read, readln, write and +writeln are implemented as word-symbols, and can therefore +not be redeclared.

+ +

7. Compiler options

+ + + + + +
+

Some options of the compiler may be controlled by using +"{$....}". Each option consists of a lower case +letter followed by +, - or an unsigned number. Options are +separated by commas. The following options exist:

+ +

a +/- this option switches assertions on and off. If +this option is on, then code is included to test these +assertions at run time. Default +.

+ +

c +/- this option, if on, allows the use of C-type +string constants surrounded by double quotes. Moreover, a +new type identifier ’string’ is predefined. +Default -.

+ +

d +/- this option, if on, allows the use of variables of +type ’long’. Default -.

+ +

i <num> with this flag the setsize for a set of +integers can be manipulated. The number must be the number +of bits per set. The default value is wordsize-1.

+ +

l +/- if + then code is inserted to keep track of the +source line number. When this flag is switched on and off, +an incorrect line number may appear if the error occurs in a +part of the program for which this flag is off. These same +line numbers are used for the profile, flow and count +options of the EM interpreter em [5]. Default +.

+ +

r +/- if + then code is inserted to check subrange +variables against lower and upper subrange limits. Default ++.

+ +

s +/- if + then the compiler will hunt for places in the +program where non-standard features are used, and for each +place found it will generate a warning. Default -.

+ +

t +/- if + then each time a procedure is entered, the +routine ’procentry’ is called, and each time a +procedure exits, the procedure ’procexit’ is +called. Both ’procentry’ and +’procexit’ have a ’string’ as +parameter. This means that when a user specifies his or her +own procedures, the c-option must be used. Default +procedures are present in the run time library. Default +-.

+ +

u +/- if + then the character ’_’ is treated +like a letter, so that it may be used in identifiers. +Procedure and function identifiers are not allowed to start +with an underscore because they may collide with library +routine names. Default -.

+ +

Some of these flags (c, d, i, s, u, C and U) are only +effective when they appear before the ’program’ +symbol. The others may be switched on and off.

+ + + + + +
+

A very powerful debugging tool is the knowledge that +inaccessible statements and useless tests are removed by the +EM optimizer. For

+ +

instance, a statement like:

+
        if debug then
+          writeln(’initialization done’);
+
+ +

is completely removed by the optimizer if debug is a +constant with value false. The first line is removed if +debug is a constant with value true. Of course, if debug is +a variable nothing can be removed.

+ + + + + +
+

A disadvantage of Pascal, the lack of preinitialized +data, can be diminished by making use of the possibilities +of the EM optimizer. For instance, initializing an array of +reserved words is sometimes optimized into 3 EM +instructions. To maximize this effect variables must be +initialized as much as possible in order of declaration and +array entries in order of decreasing index.

+ +

8. References

+ +

[1] BSI standard BS 6192: 1982 (ISO 7185).

+ +

[2] A.S.Tanenbaum, J.W.Stevenson, Hans van Staveren, +E.G.Keizer, "Description of a machine architecture for +use with block structured languages", Informatica +rapport IR-81.

+ +

[3] UNIX manual ack(I).

+ +

[4] UNIX manual ld(I).

+ +

[5] UNIX manual em(I).

+ +

[6] UNIX manual libpc(VII)

+ +

[7] UNIX manual pc_prlib(VII)

+
+ + diff --git a/src/olddocs/pcref.pdf b/src/olddocs/pcref.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8646f3d2aeeb057d81135abab610226f964f6952 GIT binary patch literal 58378 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

rg)WIa$;b_g0~k>W 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 literal 0 HcmV?d00001 diff --git a/src/olddocs/peep.html b/src/olddocs/peep.html new file mode 100644 index 000000000..1e71e3a99 --- /dev/null +++ b/src/olddocs/peep.html @@ -0,0 +1,1189 @@ + + + + + + +Internal documentation on the peephole optimizer + + + +

Internal documentation on the peephole optimizer

+
1. Introduction
+2. Table format
+3. Internal format
+4. A tour through the sources
+4.1. The header files
+4.1.1. alloc.h
+4.1.2. assert.h
+4.1.3. ext.h
+4.1.4. line.h
+4.1.5. lookup.h
+4.1.6. optim.h
+4.1.7. param.h
+4.1.8. pattern.h
+4.1.9. proinf.h
+4.1.10. tes.h
+4.1.11. types.h
+4.2. The C code itself.
+4.2.1. main.c
+4.2.2. getline.c
+4.2.3. process.c
+4.2.4. backward.c
+4.2.5. peephole.c
+4.2.6. tes.c
+4.2.7. putline.c
+ +
+ +

from the Amsterdam Compiler Kit

+ +

1. Introduction

+ +

Part of the Amsterdam Compiler Kit is a program +to do peephole optimization on an EM program. The optimizer +scans the program to match patterns from a table and if +found makes the optimization from the table, and with the +result of the optimization it tries to find yet another +optimization continuing until no more optimizations are +found.

+ +

Furthermore it does some optimizations that can +not be called peephole optimizations for historical reasons, +like branch chaining and the deletion of unreachable +code.

+ +

The peephole optimizer consists of three +parts

+ + + + + + + +
+ +

1)

+
+ +

A driving table

+
+
+ + + + + + +
+ +

2)

+
+ +

A program translating the table to internal +format

+
+ + + + + + +
+ +

3)

+
+ +

C code compiled with the table to make the +optimizer proper

+
+ +

In this document the table format, internal +format and data structures in the optimizer will be +explained, plus a hint on what the code does where it might +not be obvious. It is a simple program mostly.

+ +

2. Table format

+ +

The driving table consists of pattern/replacement +pairs, in principle one per line, although a line starting +with white space is considered a continuation line for the +previous. The general format is:

+
     optimization : pattern ’:’ replacement ’\n’
+
+
+     pattern : EMlist optional_boolean_expression
+
+
+     replacement : EM_plus_operand_list
+
+ +

Example of a simple one

+
     loc stl $1==0 : zrl $2
+
+ +

There is no real limit for the length of the +pattern or the replacement, the replacement might even be +longer than the pattern, and expressions can be made +arbitrarily complicated.

+ +

The expressions in the table are made of the +following pieces:

+ + + + + + + +
+ +

-

+
+ +

Integer constants

+
+
+ + + + + + +
+ +

-

+
+ +

$n, standing for the operand of the +n’th EM instruction in the pattern, undefined +if that instruction has no operand.

+
+ + + + + + +
+ +

-

+
+ +

w, standing for the wordsize of the code +optimized.

+
+ + + + + + + +
+ +

-

+
+ +

p, for the pointersize.

+
+
+ + + + + + + +
+ +

-

+
+ +

defined(expr), true if expression is +defined

+
+
+ + + + + + +
+ +

-

+
+ +

samesign(expr,expr), true if expressions have the +same sign.

+
+ + + + + + +
+ +

-

+
+ +

sfit(expr,expr), ufit(expr,expr), true if the +first expression fits signed or unsigned in the number of +bits given in the second expression.

+
+ + + + + + +
+ +

-

+
+ +

rotate(expr,expr), first expression rotated left +the number of bits given by the second +expression.

+
+ + + + + + +
+ +

-

+
+ +

notreg(expr), true if the local with the +expression as number is not a candidate to put in a +register.

+
+ + + + + + +
+ +

-

+
+ +

rom(n,expr), contents of the rom +descriptor at index expr that is associated with the global +label that should be the argument of the n’th +EM instruction. Undefined if such a thing does not +exist.

+
+ +

The usual arithmetic operators may be used on +integer values, if any operand is undefined the expression +is undefined, except for the defined() function above. An +undefined expression used for its truth value is false. All +arithmetic on local label operands is forbidden, only things +allowed are tests for equality. Arithmetic on global labels +makes sense, i.e. one can add a global label and a constant, +but not two global labels.

+ +

In the table one can use five additional EM +instructions in patterns. These are:

+ + + + + + + +
+ +

lab

+
+ +

Stands for a local label

+
+
+ + + + + + +
+ +

LLP

+
+ +

Load Local Pointer, translates into a lol +or into a ldl depending on the relationship between +wordsize and pointersize.

+
+ + + + + + +
+ +

LEP

+
+ +

Load External Pointer, translates into a +loe or into a lde.

+
+ + + + + + + +
+ +

SLP

+
+ +

Store Local Pointer, stl or +sdl.

+
+
+ + + + + + + +
+ +

SEP

+
+ +

Store External Pointer, ste or +sde.

+
+
+ +

There is only one peephole optimizer, so the +substitutions to be made for the last four instructions are +made at run time before the first optimizations are +made.

+ +

3. Internal format

+ +

The translating program, mktab converts +the table into an array of bytes where all patterns follow +unaligned. Format of a pattern is:

+ + + + + + +
+ +

1)

+
+ +

One byte for high byte of hash value, will be +explained later on.

+
+ + + + + + +
+ +

2)

+
+ +

Two bytes for the index of the next pattern in a +chain.

+
+ + + + + + + +
+ +

3)

+
+ +

An integer*,

+
+
+ + +

+ + + + + +
+

pattern length.

+
+ + + + + + + +
+ +

4)

+
+ +

The list of pattern opcodes, one per +byte.

+
+
+ + + + + + + +
+ +

5)

+
+ +

An integer expression index, 0 if not +used.

+
+
+ + + + + + + +
+ +

6)

+
+ +

An integer, replacement length.

+
+
+ + + + + + +
+ +

7)

+
+ +

A list of pairs consisting of a one byte opcode +and an integer expression index.

+
+ +

The expressions are kept in an array of triples, +implementing a binary tree. The mktab program tries +to minimize the number of triples by reusing duplicates and +even reverses the operands of commutative operators when +doing so would spare a triple.

+ +

4. A tour through the sources

+ +

Now we will walk through the sources and note +things of interest.

+ +

4.1. The header files

+ +

The header files are the place where data +structures and options reside.

+ +

4.1.1. alloc.h

+ +

In the header file alloc.h several defines can be +used to select various kinds of core allocation schemes. +This is important on small machines like the PDP-11 since a +complete procedure must be in core at the same space, and +the peephole optimizer should not be the limiting factor in +determining the maximum size of procedures if possible. +Options are:

+ + + + + + +
+ +

-

+
+ +

USEMALLOC, standard malloc() and free() are used +instead of the own core allocation package. Not recommended +unless the own package does not work on some bizarre +machine.

+
+ + + + + + +
+ +

-

+
+ +

COREDEBUG, prints large amounts of information +about core management. Not recommended unless the code is +changed and it stops working.

+
+ + + + + + +
+ +

-

+
+ +

SEPID, defining this will add an extra procedure +that will go through a lot of work to scrape the last bytes +together if the system won’t provide more. This is not +a good idea if memory is scarce and code and data reside in +the same spaces, since the room used by the procedure might +well be more than the room saved.

+
+ + + + + + +
+ +

-

+
+ +

STACKROOM, number of shorts used in stack space. +This is used if memory is scarce and stack space and data +space are different. On the PDP-11 a UNIX process starts +with an 8K stack segment which cannot be transferred to the +data segment. Under these conditions one can use a lot of +the stack space for storage.

+
+ +

4.1.2. assert.h

+ +

Just defines the assert macro. When compiled with +-DNDEBUG all asserts will be off.

+ +

4.1.3. ext.h

+ +

Gives external definitions of variables used by +more than one module.

+ +

4.1.4. line.h

+ +

Defines the structures used to keep instructions, +one structure per line of EM code, and the structure to keep +arguments of pseudos, one structure per argument. Both +structures essentially contain a pointer to the next, a +type, and a union containing information depending on the +type. Core is allocated only for the part of the union +used.

+ +

The struct line has a very compact +encoding for small integers, they are encoded in the type +field. On the PDP-11 this gives a line structure of only 4 +bytes for most instructions.

+ +

4.1.5. lookup.h

+ +

Contains definition of the struct used for symbol +table management, global labels and procedure names are kept +in one table.

+ +

4.1.6. optim.h

+ +

If one defines the DIAGOPT option in this header +file, for every optimization performed a number is written +on stderr. The number gives the number of the pattern in the +table or one of the four special numbers in this header +file.

+ +

4.1.7. param.h

+ +

Contains one settable option, LONGOFF. If this is +not defined the optimizer can only optimize programs with +wordsize 2 and pointersize 2. Set this only if it must be +run on a Z80 or something pathetic like that.

+ +

Other defines here should not be +touched.

+ +

4.1.8. pattern.h

+ +

Contains defines of indices in a pattern, +definition of the expression triples, definitions of the +various expression operators and definition of the result +struct where expression results are put.

+ +

This header file is the main one that is also +included by mktab.

+ +

4.1.9. proinf.h

+ +

This one contains definitions for the local label +table structs and for the struct where all information for +one procedure is kept. This is in one struct so it can be +saved easily when recursive procedures have to be +resolved.

+ +

4.1.10. tes.h

+ +

Contains the data structure used by the top +element size computation.

+ +

4.1.11. types.h

+ +

Collection of typedefs to be used by almost all +modules.

+ +

4.2. The C code itself.

+ +

The C code will now be the center of our +attention. We will make a walk through the sources and we +will try to follow the sources in a logical order. So we +will start at

+ +

4.2.1. main.c

+ +

The main.c module contains the main() function. +Here nothing spectacular happens, only thing of interest is +the handling of flags:

+ + + + + + +
+ +

-L

+
+ +

This is an instruction to the peephole optimizer +to perform one of its auxiliary functions, the generation of +a library module. This makes the peephole optimizer write +its output on a temporary file, and at the end making the +real output by first generating a list of exported symbols +and then copying the temporary file behind it.

+
+ + + + + + +
+ +

-n

+
+ +

Disables all optimization. Only thing the +optimizer does now is filling in the blank after the +END pseudo and resolving recursive +procedures.

+
+ +

The place where main() is left is the call to +getlines() which brings us to

+ +

4.2.2. getline.c

+ +

This module reads the EM code and constructs a +list of struct line records, linked together +backwards, i.e. the first instruction read is the last in +the list. Pseudos are handled here also, for most pseudos +this just means that a chain of argument records is linked +into the linked line list but some pseudos get special +attention:

+ + + + + + +
+ +

exc

+
+ +

This pseudo is acted upon right away. Lines read +are shuffled around according to instruction.

+
+ + + + + + + +
+ +

mes

+
+ +

Some messages are acted upon. These +are:

+
+
+ + + + + + + +
+ +

ms_err

+
+ +

The input is drained, just in case it is a pipe. +After that the optimizer exits.

+
+ + + + + + + +
+ +

ms_opt

+
+ +

The do not optimize flag is set. Acts just like +-n on the command line.

+
+ + + + + + + +
+ +

ms_emx

+
+ +

The word- and pointersize are read, complain if +we are not able to handle this.

+
+ + + + + + + +
+ +

ms_reg

+
+ +

We take notice of the offset of this local. See +also comments in the description of peephole.c

+
+ + + + + + +
+ +

pro

+
+ +

A new procedure starts, if we are already in one +save the status, else process collected input. Collect +information about this procedure and if already in a +procedure call getlines() recursively.

+
+ + + + + + + +
+ +

end

+
+ +

Process collected input.

+
+
+ +

The phrase "process collected input" is +used twice, which brings us to

+ +

4.2.3. process.c

+ +

This module contains the entry point process() +which is called at any time the collected input must be +processed. It calls a variety of other routines to get the +real work done. Routines in this module are in chronological +order:

+ + + + + + +
+ +

symknown

+
+ +

Marks all symbols seen until now as known, i.e. +it is now known whether their scope is local or global. This +information is used again during output.

+
+ + + + + + +
+ +

symvalue

+
+ +

Runs through the chain of pseudos to give values +to data labels. This needs an extra pass. It cannot be done +during the getlines pass, since an exc pseudo could +destroy things. Nor can it be done during the backward pass +since it is impossible to do good fragment numbering +backward.

+
+ + + + + + +
+ +

checklocs

+
+ +

Checks whether all local labels referenced are +defined. It needs to be sure about this since otherwise the +semi global optimizations made cannot work.

+
+ + + + + + +
+ +

relabel

+
+ +

This routine finds the final destination for each +label in the procedure. Labels followed by unconditional +branches or other labels are marked during the peephole fase +and this leeds to chains of identical labels. These chains +are followed here, and in the local label table each label +has associated with it its replacement label, after this +procedure is run. Care is taken in this routine to prevent a +loop in the program to cause the optimizer to +loop.

+
+ + + + + + +
+ +

cleanlocals

+
+ +

This routine empties the local label table after +everything is processed.

+
+ +

But before this can all be done, the backward +linked list of instructions first has to be reversed, so +here comes

+ +

4.2.4. backward.c

+ +

The routine backward has a number of +functions:

+ + + + + + +
+ +

-

+
+ +

It reverses the backward linked list, making two +forward linked lists, one for the instructions and one for +the pseudos.

+
+ + + + + + +
+ +

-

+
+ +

It notes the last occurrence of data labels in +the backward linked list and puts it in the global symbol +table. This is of course the first occurence in the +procedure. This information is needed to decide whether the +symbols are global or local to this module.

+
+ + + + + + +
+ +

-

+
+ +

It decides about the fragment boundaries of data +blocks. Fragments are numbered backwards starting at 3. This +is done to be able to make the type of an expression +containing a symbol equal to its fragment. This type can +then not clash with the types integer and local +label.

+
+ + + + + + +
+ +

-

+
+ +

It allocates a rom buffer to every data label +with a rom behind it, if that rom contains only plain +integers at the start.

+
+ +

The first thing done after process() has called +backward() and some of its own little routines is a call to +the real routine, the one that does the work the program was +written for

+ +

4.2.5. peephole.c

+ +

The first routines in peephole.c implement a +linked list for the offsets of local variables that are +candidates for a register implementation. Several patterns +use the notreg() function, since it is forbidden to combine +a load of that variable with the load of another and it is +not allowed to take the address of that +variable.

+ +

The routine peephole hashes the patterns the +first time it is called after which it doesn’t do much +more than calling optimize. But first +hashpatterns().

+ +

The patterns are hashed at run time of the +optimizer because of the LLP, LEP, SLP +and SEP instructions added to the instruction set in +this optimizer. These are first replaced everywhere in the +table by the correct replacement after which the first three +instructions of the pattern are hashed and the pattern is +linked into one of the 256 linked lists. There is a define +CHK_HASH in this module that can be set if the randomness of +the hashing function is not trusted.

+ +

The attention now shifts to optimize(). This +routine calls basicblock() for every piece of code between +two labels. It also notes which labels have another label or +a branch behind them so the relabel() routine from process.c +can do something with that.

+ +

Basicblock() keeps making passes over its basic +block until no more optimizations are found. This might be +inefficient if there is a long basicblock with some deep +recursive optimization in one part of it. The entire basic +block is then scanned a lot of times just for that one +piece. The alternative is backing up after making an +optimization and running through the same code again, but +that is difficult in a single linked list.

+ +

It hashes instructions and calls trypat() for +every pattern that has a full hash value match, i.e. lower +byte and upper byte equal. Longest pattern is tried +first.

+ +

Trypat() checks length and opcodes of the +pattern. If correct it fills the iargs[] array with argument +values and calculates the expression. If that is also +correct the work shifts to tryrepl().

+ +

Tryrepl() generates the list of replacement +instructions, links it into the list and returns true. Why +then the name tryrepl() if it always succeeds? Well, there +is a mechanism in the optimizer, unused until today that +makes it possible to do optimizations that cannot be +described by the table. It is possible to give a number as a +replacement which will cause the optimizer to call a routine +special() to do some work. This routine might decide not to +do an optimization and return false.

+ +

The last routine that is called from process() is +putline() to write the optimized code, bringing us +to

+ +

4.2.6. tes.c

+ +

Contains the routines used by the top element +size computation phase, which is run after the +peephole-optimisation. The main routine of tes.c is +tes_instr(). This looks at an instruction and decides the +size of the element on top of the stack after the +instruction is executed. When a label is defined or used, +the size of the top element is remembered for later use. +When the information in consistent throuhout the procedure, +it is passed to the code generator by means of an ms_tes +message.

+ +

4.2.7. putline.c

+ +

The major part of putline.c is the standard set +of routines that makes EM compact code. The extra functions +performed are:

+ + + + + + +
+ +

-

+
+ +

For every occurence of a global symbol it might +be necessary to output a exa, exp, ina +or inp pseudo instruction. That task is +performed.

+
+ + + + + + +
+ +

-

+
+ +

The lin instructions are optimized here, +lni instructions added for lin instructions +and superfluous lin instructions deleted.

+
+
+ + diff --git a/src/olddocs/peep.pdf b/src/olddocs/peep.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1932aab2a54874c1a02eca7d495dab409c8b33dc GIT binary patch literal 35513 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
kx?JkJnw4_FLm7KCVP4rZD@bfK#p} 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 b$n6}R3>=)E&T1A`HYQd?N=gwqQN;fP6s>lj literal 0 HcmV?d00001 diff --git a/src/olddocs/regadd.html b/src/olddocs/regadd.html new file mode 100644 index 000000000..5a6f7e7dc --- /dev/null +++ b/src/olddocs/regadd.html @@ -0,0 +1,510 @@ + + + + + + +Addition of register variables to an existing table. + + + +

Addition of register variables to an existing table.

+1. Introduction
+2. Modifications to the table itself.
+2.1. Register section
+2.2. Codesection
+3. Modifications to mach.c
+4. Examples
+5. Afterthoughts.
+ +
+ +

1. Introduction

+ +

This is a short description of the newest feature in the +table driven code generator for the Amsterdam Compiler Kit. +It describes how to add register variables to an existing +table. This assumes a distribution of October 1983 or later. +It is not clear whether one should read this when starting +with a table for a new machine, or waiting till the table is +well debugged already.

+ +

2. Modifications to the table itself.

+ +

2.1. Register section

+ +

Just before the properties of the register one of the +following can be added:

+ + + + + + + +
+ +

-

+
+ +

regvar

+
+
+ + + + + + + +
+ +

-

+
+ +

regvar ( pointer )

+
+
+ + + + + + + +
+ +

-

+
+ +

regvar ( loop )

+
+
+ + + + + + + +
+ +

-

+
+ +

regvar ( float )

+
+
+ +

All register variables of one type must be of the same +size, and they may have no subregisters.

+ +

2.2. Codesection

+ + + + + + +
+ +

-

+
+ +

Two pseudo functions are added to the list allowed +inside expressions:

+
+ + + + + + + +
+ +

1)

+
+ +

inreg ( expr ) has as a parameter the offset of a local, +and returns 0,1 or 2:

+
+ + + + + + + + +
+ +

2:

+
+ +

if the variable is in a register.

+
+
+ + + + + + + +
+ +

1:

+
+ +

if the variable could be in a register but +isn’t.

+
+ + + + + + + + +
+ +

0:

+
+ +

if the variable cannot be in a register.

+
+
+ + + + + + + +
+ +

2)

+
+ +

regvar ( expr ) returns the register associated with the +variable. Undefined if it is not in a register. So regvar ( +expr ) is defined if and only if inreg (expr ) == 2.

+
+ + + + + + +
+ +

-

+
+ +

It is now possible to remove() a register expression, +this is of course needed for a store into a register +local.

+
+ + + + + + +
+ +

-

+
+ +

The return out of a procedure may now involve register +restores, so the special word ’return’ in the +table will invoke a user defined function.

+
+ +

3. Modifications to mach.c

+ +

If register variables are used in a table, the program +cgg will define the word REGVARS during compilation +of the sources. So the following functions described here +should be bracketed by #ifdef REGVARS and #endif.

+ + + + + + + +
+ +

-

+
+ +

regscore(off,size,typ,freq,totyp) long off;

+
+
+ + + + + +
+

This function should assign a score to a register +variable, the score should preferably be the estimated +number of bytes gained when it is put in a register. Off and +size are the offset and size of the variable, typ is the +type, that is reg_any, reg_pointer, reg_loop or reg_float. +Freq is the number of times it occurs statically, and totyp +is the type of the register it is planned to go into.
+Keep in mind that the gain should be net, that is the cost +for register save/restore sequences and the cost of +initialisation in the case of parameters should already be +included.

+
+ + + + + + + +
+ +

-

+
+ +

i_regsave()

+
+
+ + + + + +
+

This function is called at the start of a procedure, just +before register saves are done. It can be used to initialise +some variables if needed.

+
+ + + + + + + +
+ +

-

+
+ +

f_regsave()

+
+
+ + + + + +
+

This function is called at end of the register save +sequence. It can be used to do the real saving if multiple +register move instructions are available.

+
+ + + + + + + +
+ +

-

+
+ +

regsave(regstr,off,size) char *regstr; long off;

+
+
+ + + + + +
+

Should either do the real saving or set up a table to +have it done by f_regsave. Note that initialisation of +parameters should also be done, or planned here.

+
+ + + + + + + +
+ +

-

+
+ +

regreturn()

+
+
+ + + + + +
+

Should restore saved registers and return. The function +result is already in the function return area by +now.

+ +

4. Examples

+ +

Here are some examples out of the PDP 11 table

+ + + + +

lol inreg($1)==2| |

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

| regvar($1)

+
+ + + +

| |

+ +

lil inreg($1)==2| |

+
+ + +

| {regdef2, regvar($1)}

+
+
+ +

| |

+
+ +

stl inreg($1)==2| xsource2 |

+ + + + + + + + + + + + + + +
+ + +

remove(regvar($1))

+
+
+ + +

move(%[1],regvar($1)) | | |

+
+
+ +

inl inreg($1)==2| | remove(regvar($1))

+ + + + + + + + + + + + + + +
+ + +

"inc %(regvar($1)%)"

+
+
+ + +

setcc(regvar($1)) | | |

+
+
+ +

5. Afterthoughts.

+ +

At the time of this writing the tables for the PDP 11 +and the M68000 and the VAX are converted, in all cases the +two byte wordsize versions. No big problems have occurred, +but experience has shown that it is necessary to check the +table carefully for all patterns with locals in them. Code +may be generated that uses the memoryslot the local is not +in.

+
+ + diff --git a/src/olddocs/regadd.pdf b/src/olddocs/regadd.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fab96c96578f23365bdbd86cce68653271caaba6 GIT binary patch literal 20665 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 + + + + + + + + + +
+
+ + diff --git a/src/olddocs/sparc.pdf b/src/olddocs/sparc.pdf new file mode 100644 index 000000000..ba68476fe --- /dev/null +++ b/src/olddocs/sparc.pdf @@ -0,0 +1,28 @@ +%PDF-1.2 +%쏢 +3 0 obj +<< /Type /Pages /Kids [ +] /Count 0 +/Rotate 0>> +endobj +1 0 obj +<> +endobj +2 0 obj +<>endobj +xref +0 4 +0000000000 65535 f +0000000077 00000 n +0000000125 00000 n +0000000015 00000 n +trailer +<< /Size 4 /Root 1 0 R /Info 2 0 R +>> +startxref +265 +%%EOF diff --git a/src/olddocs/toolkit.html b/src/olddocs/toolkit.html new file mode 100644 index 000000000..f25c76855 --- /dev/null +++ b/src/olddocs/toolkit.html @@ -0,0 +1,938 @@ + + + + + + +A Practical Tool Kit for Making Portable Compilers + + + +

A Practical Tool Kit for Making Portable Compilers

+*.
+Introduction
+*.
+An Overview of the Amsterdam Compiler Kit
+*.
+The Preprocessor
+*.
+The Front Ends
+*.
+The Peephole Optimizer
+*.
+The Global Optimizer
+*.
+The Back End
+*.
+The Target Machine Optimizer
+*.
+The Universal Assembler/Linker
+*.
+The Utility Package
+*.
+Summary and Conclusions
+*.
+References
+ +
+ +

ABSTRACT

+ +

Andrew S. Tanenbaum
+Hans van Staveren
+E. G. Keizer
+Johan W. Stevenson

+Mathematics Dept.
+Vrije Universiteit
+Amsterdam, The Netherlands

+ +

The Amsterdam Compiler Kit is an integrated collection +of programs designed to simplify the task of producing +portable (cross) compilers and interpreters. For each +language to be compiled, a program (called a front end) must +be written to translate the source program into a common +intermediate code. This intermediate code can be optimized +and then either directly interpreted or translated to the +assembly language of the desired target machine. The paper +describes the various pieces of the tool kit in some detail, +as well as discussing the overall strategy.

+ +

Keywords: Compiler, Interpreter, Portability, +Translator

+ +

CR Categories: 4.12, 4.13, 4.22

+ +

Author’s present addresses: A.S. Tanenbaum, H. van +Staveren, E.G. Keizer: Mathematics Dept., Vrije +Universiteit, Postbus 7161, 1007 MC Amsterdam, The +Netherlands

+ +

J.W. Stevenson: NV Philips, S&I, T&M, Building +TQ V5, Eindhoven, The Netherlands

+ +

*.

+ +

Introduction

+ +

As more and more organizations acquire many micro- and +minicomputers, the need for portable compilers is becoming +more and more acute. The present situation, in which each +hardware vendor provides its own compilers -- each with its +own deficiencies and extensions, and none of them compatible +-- leaves much to be desired. The ideal situation would be +an integrated system containing a family of (cross) +compilers, each compiler accepting a standard source +language and producing code for a wide variety of target +machines. Furthermore, the compilers should be compatible, +so programs written in one language can call procedures +written in another language. Finally, the system should be +designed so as to make adding new languages and new machines +easy. Such an integrated system is being built at the Vrije +Universiteit. Its design and implementation is the subject +of this article.

+ +

Our compiler building system, which is called the +"Amsterdam Compiler Kit" (ACK), can be thought of +as a "tool kit." It consists of a number of parts +that can be combined to form compilers (and interpreters) +with various properties. The tool kit is based on an idea +(UNCOL) that was first suggested in 1960 [7], but which +never really caught on then. The problem which UNCOL +attempts to solve is how to make a compiler for each of +N languages on M different machines without +having to write N x M programs.

+ +

As shown in Fig. 1, the UNCOL approach is to write +N "front ends," each of which translates +one source language to a common intermediate language, UNCOL +(UNiversal Computer Oriented Language), and M +"back ends," each of which translates programs in +UNCOL to a specific machine language. Under these +conditions, only N + M programs must be +written to provide all N languages on all M +machines, instead of N x M programs.

+ +

Various researchers have attempted to design a suitable +UNCOL [2,8], but none of these have become popular. It is +our belief that previous attempts have failed because they +have been too ambitious, that is, they have tried to cover +all languages and all machines using a single UNCOL. Our +approach is more modest: we cater only to algebraic +languages and machines whose memory consists of 8-bit bytes, +each with its own address. Typical languages that could be +handled include Ada, ALGOL 60, ALGOL 68, BASIC, C, FORTRAN, +Modula, Pascal, PL/I, PL/M, PLAIN, and RATFOR, whereas +COBOL, LISP, and SNOBOL would be less efficient. Examples of +machines that could be included are the Intel 8080 and 8086, +Motorola 6800, 6809, and 68000, Zilog Z80 and Z8000, DEC +PDP-11 and VAX, and IBM 370 but not the Burroughs 6700, CDC +Cyber, or Univac 1108 (because they are not byte-oriented). +With these restrictions, we believe the old UNCOL idea can +be used as the basis of a practical compiler-building +system.

+ +

Fig. 1. The UNCOL model.

+ +

*.

+ +

An Overview of the Amsterdam Compiler Kit

+ +

The tool kit consists of eight components:

+ +

1. The preprocessor. 2. The front ends. 3. The peephole +optimizer. 4. The global optimizer. 5. The back end. 6. The +target machine optimizer. 7. The universal assembler/linker. +8. The utility package.

+ +

A fully optimizing compiler, depicted in Fig. 2, has +seven cascaded phases. Conceptually, each component reads an +input file and writes a transformed output file to be used +as input to the next component. In practice, some components +may use temporary files to allow multiple passes over the +input or internal intermediate files.

+ +

Fig. 2. Structure of the Amsterdam Compiler +Kit.

+ +

In the following paragraphs we will briefly describe +each component. After this overview, we will look at all of +them again in more detail. A program to be compiled is first +fed into the (language independent) preprocessor, which +provides a simple macro facility, and similar textual +facilties. The preprocessor’s output is a legal +program in one of the programming languages supported, +whereas the input is a program possibly augmented with +macros, etc.

+ +

This output goes into the appropriate front end, whose +job it is to produce intermediate code. This intermediate +code (our UNCOL) is the machine language for a simple stack +machine called EM (Encoding Machine). A typical front end +might build a parse tree from the input, and then use the +parse tree to generate EM code, which is similar to reverse +Polish. In order to perform this work, the front end has to +maintain tables of declared variables, labels, etc., +determine where to place the data structures in memory, and +so on.

+ +

The EM code generated by the front end is fed into the +peephole optimizer, which scans it with a window of a few +instructions, replacing certain inefficient code sequences +by better ones. Such a search is important because EM +contains instructions to handle numerous important special +cases efficiently (e.g., incrementing a variable by 1). It +is our strategy to relieve the front ends of the burden of +hunting for special cases because there are many front ends +and only one peephole optimizer. By handling the special +cases in the peephole optimizer, the front ends become +simpler, easier to write and easier to maintain.

+ +

Following the peephole optimizer is a global optimizer +[5], which unlike the peephole optimizer, examines the +program as a whole. It builds a data flow graph to make +possible a variety of global optimizations, among them, +moving invariant code out of loops, avoiding redundant +computations, live/dead analysis and eliminating tail +recursion. Note that the output of the global optimizer is +still EM code.

+ +

Next comes the back end, which differs from the front +ends in a fundamental way. Each front end is a separate +program, whereas the back end is a single program that is +driven by a machine dependent driving table. The driving +table for a specific machine tells how the EM code is mapped +onto the machine’s assembly language. Although a +simple driving table might just macro expand each EM +instruction into a sequence of target machine instructions, +a much more sophisticated translation strategy is normally +used, as described later. For speed, the back end does not +actually read in the driving table at run time. Instead, the +tables are compiled along with the back end in advance, +resulting in one binary program per machine.

+ +

The output of the back end is a program in the assembly +language of some particular machine. The next component in +the pipeline reads this program and performs peephole +optimization on it. The optimizations performed here involve +idiosyncracies of the target machine that cannot be +performed in the machine-independent EM-to-EM peephole +optimizer. Typically these optimizations take advantage of +special instructions or special addressing modes.

+ +

The optimized target machine assembly code then goes +into the final component in the pipeline, the universal +assembler/linker. This program assembles the input to object +format, extracting routines from libraries and including +them as needed.

+ +

The final component of the tool kit is the utility +package, which contains various test programs, interpreters +for EM code, EM libraries, conversion programs, and other +aids for the implementer and user.

+ +

*.

+ +

The Preprocessor

+ +

The function of the preprocessor is to extend all the +programming languages by adding certain generally useful +facilities to them in a uniform way. One of these is a +simple macro system, in which the user can give names to +character strings. The names can be used in the program, +with the knowledge that they will be macro expanded prior to +being input to the front end. Macros can be used for named +constants, expanding short "procedures" in line, +etc.

+ +

Another useful facility provided by the preprocessor is +the ability to include compile-time libraries. On large +projects, it is common to have all the declarations and +definitions gathered together in a few files that are +textually included in the programs by instructing the +preprocessor to read them in, thus fooling the front end +into thinking that they were part of the source program.

+ +

A third feature of the preprocessor is conditional +compilation. The input program can be split up into labeled +sections. By setting flags, some of the sections can be +deleted by the preprocessor, thus allowing a family of +slightly different programs to be conveniently stored on a +single file.

+ +

*.

+ +

The Front Ends

+ +

A front end is a program that converts input in some +source language to a program in EM. At present, front ends +exist or are in preparation for Pascal, C, and Plain, and +are being considered for Ada, ALGOL 68, FORTRAN 77, and +Modula 2. Each of the present front ends is independent of +all the other ones, although a general-purpose, table-driven +front end is conceivable, provided one can devise a way to +express the semantics of the source language in the driving +tables. The Pascal front end uses a top-down parsing +algorithm (recursive descent), whereas the C and Plain front +ends are bottom-up.

+ +

All front ends, independent of the language being +compiled, produce a common intermediate code called EM, +which is the assembly language for a simple stack machine. +The EM machine is based on a memory architecture containing +a stack for local variables, a (static) data area for +variables declared in the outermost block and global to the +whole program, and a heap for dynamic data structures. In +some ways EM resembles P-code [6], but is more general, +since it is intended for a wider class of languages than +just Pascal.

+ +

The EM instruction set has been described elsewhere +[9,10,11] so we will only briefly summarize it here. +Instructions exist to:

+ +

1. Load a variable or constant of some length onto the +stack. 2. Store the top item on the stack in memory. 3. Add, +subtract, multiply, divide, etc. the top two stack items. 4. +Examine the top one or two stack items and branch +conditionally. 5. Call procedures and return from them.

+ +

Loads and stores come in several variations, +corresponding to the most common programming language +semantics, for example, constants, simple variables, fields +of a record, elements of an array, and so on. Distinctions +are also made between variables local to the current block +(i.e., stack frame), those in the outermost block (static +storage), and those at intermediate lexicographic levels, +which are accessed by following the static chain at run +time.

+ +

All arithmetic instructions have a type (integer, +unsigned, real, pointer, or set) and an operand length, +which may either be explicit or may be popped from the stack +at run time. Monadic branch instructions pop an item from +the stack and branch if it is less than zero, less than or +equal to zero, etc. Dyadic branch instructions pop two +items, compare them, and branch accordingly.

+ +

In addition to these basic EM instructions, there is a +collection of special purpose instructions (e.g., to +increment a local variable), which are typically produced +from the simple ones by the peephole optimizer. Although the +complete EM instruction set contains nearly 150 +instructions, only about 60 of them are really primitive; +the rest are simply abbreviations for commonly occurring EM +instruction sequences.

+ +

Of particular interest is the way object sizes are +parametrized. The front ends allow the user to indicate how +many bytes an integer, real, etc. should occupy. Given this +information, the front ends can allocate memory, determining +the placement of variables within the stack frame. Sizes for +primitive types are restricted to 8, 16, 32, 64, etc. bits. +The front ends are also parametrized by the target +machine’s word length and address size so they can +tell, for example, how many "load" instructions to +generate to move a 32-bit integer. In the examples used +henceforth, we will assume a 16-bit word size and 16-bit +integers.

+ +

Since only byte-addressable target machines are +permitted, it is nearly always possible to implement any +requested sizes on any target machine. For example, the +designer of the back end tables for the Z80 should provide +code for 8-, 16-, and 32-bit arithmetic. In our view, the +Pascal, C, or Plain programmer specifies what lengths are +needed, without reference to the target machine, and the +back end provides it. This approach greatly enhances +portability. While it is true that doing all arithmetic +using 32-bit integers on the Z80 will not be terribly fast, +we feel that if that is what the programmer needs, it should +be possible to implement it.

+ +

Like all assembly languages, EM has not only machine +instructions, but also pseudoinstructions. These are used to +indicate the start and end of each procedure, allocate and +initialize storage for data, and similar functions. One +particularly important pseudoinstruction is the one that is +used to transmit information to the back end for +optimization purposes. It can be used to suggest variables +that are good candidates to assign to registers, delimit the +scope of loops, indicate that certain variables contain a +useful value (next operation is a load) or not (next +operation is a store), and various other things.

+ +

*.

+ +

The Peephole Optimizer

+ +

The peephole optimizer reads in unoptimized EM programs +and writes out optimized ones. Both the input and output are +expressed in a highly compact code, rather than in ASCII, to +reduce the i/o time, which would otherwise dominate the CPU +time. The program itself is table driven, and is, by and +large, ignorant of the semantics of EM. The knowledge of EM +is contained in a language- and machine-independent table +consisting of about 400 pattern-replacement pairs. We will +briefly describe the kinds of optimizations it performs +below; a more complete discussion can be found in [9].

+ +

Each line in the driving table describes one +optimization, consisting of a pattern part and a replacement +part. The pattern part is a series of one or more EM +instructions and a boolean expression. The replacement part +is a series of EM instructions with operands. A typical +optimization might be:

+ +

LOL LOC ADI STL ($1 = $4) and ($2 = 1) and ($3 = 2) +==> INL $1

+ +

where the text prior to the ==> symbol is the pattern +and the text after it is the replacement. LOL loads a local +variable onto the stack, LOC loads a constant onto the +stack, ADI is integer addition, and STL is store local. The +pattern specifies that four consecutive EM instructions are +present, with the indicated opcodes, and that furthermore +the operand of the first instruction (denoted by $1) and the +fourth instruction (denoted by $4) are the same, the +constant pushed by LOC is 1, and the size of the integers +added by ADI is 2 bytes. (EM instructions have at most one +operand, so it is not necessary to specify the operand +number.) Under these conditions, the four instructions can +be replaced by a single INL (increment local) instruction +whose operand is equal to that of LOL.

+ +

Although the optimizations cover a wide range, the main +ones can be roughly divided into the following categories. +Constant folding is used to evaluate constant +expressions, such as 2*3 + 7 at compile time instead of run +time. Strength reduction is used to replace one +operation, such as multiply, by another, such as shift. +Reordering of expressions helps in cases like -K/5, +which can be better evaluated as K/-5, because the former +requires a division and a negation, whereas the latter +requires only a division. Null instructions include +resetting the stack pointer after a call with 0 parameters, +offsetting zero bytes to access the first element of a +record, or jumping to the next instruction. Special +instructions are those like INL, which deal with common +special cases such as adding one to a variable or comparing +something to zero. Group moves are useful because a +sequence of consecutive moves can often be replaced with EM +code that allows the back end to generate a loop instead of +in line code. Dead code elimination is a technique +for removing unreachable statements, possibly made +unreachable by previous optimizations. Branch chain +compression can be applied when a branch instruction +jumps to another branch instruction. The first branch can +jump directly to the final destination instead of +indirectly.

+ +

The last two optimizations logically belong in the +global optimizer but are in the local optimizer for +historical reasons (meaning that the local optimizer has +been the only optimizer for many years and the optimizations +were easy to do there).

+ +

*.

+ +

The Global Optimizer

+ +

In contrast to the peephole optimizer, which examines +the EM code a few lines at a time through a small window, +the global optimizer examines the program’s large +scale structure. Three distinct types of optimizations can +be found here:

+ +

1. Interprocedural optimizations. 2. Intraprocedural +optimizations. 3. Basic block optimizations.

+ +

We will now look at each of these in turn.

+ +

Interprocedural optimizations are those spanning +procedure boundaries. The most important one is deciding to +expand procedures in line, especially short procedures that +occur in loops and pass several parameters. If it takes more +time or memory to pass the parameters than to do the work, +the program can be improved by eliminating the procedure. +The inverse optimization -- discovering long common code +sequences and turning them into a procedure -- is also +possible, but much more difficult. Like much of the global +optimizer’s work, the decision to make or not make a +certain program transformation is a heuristic one, based on +knowledge of how the back end works, how most target +machines are organized, etc.

+ +

The heart of the global optimizer is its analysis of +individual procedures. To perform this analysis, the +optimizer must locate the basic blocks, instruction +sequences which can be entered only at the top and exited +only at the bottom. It then constructs a data flow graph, +with the basic blocks as nodes and jumps between blocks as +arcs.

+ +

From the data flow graph, many important properties of +the program can be discovered and exploited. Chief among +these is the presence of loops, indicated by cycles in the +graph. One important optimization is looking for code that +can be moved outside the loop, either prior to it or +subsequent to it. Such code motion saves execution time, +although it does not save memory. Unrolling loops is also +possible and desirable in some cases.

+ +

Another area in which global analysis of loops is +especially important is in register allocation. While it is +true that EM does not have any registers to allocate, the +optimizer can easily collect information to allow the back +end to allocate registers wisely. For example, the global +optimizer can collect static frequency-of-use and live/dead +information about variables. (A variable is dead at some +point in the program if its current value is not needed, +i.e., the next reference to it overwrites it rather than +reading it; if the current value will eventually be used, +the variable is live.) If two variables are never +simultaneously live over some interval of code (e.g., the +body of a loop), they can be packed into a single variable, +which, if used often enough, may warrant being assigned to a +register.

+ +

Many loops involve arrays: this leads to other +optimizations. If an array is accessed sequentially, with +each iteration using the next higher numbered element, code +improvement is often possible. Typically, a pointer to the +bottom element of each array can be set up prior to the +loop. Within the loop the element is accessed indirectly via +the pointer, which is also incremented by the element size +on each iteration. If the target machine has an +autoincrement addressing mode and the pointer is assigned to +a register, an array access can often be done in a single +instruction.

+ +

Other intraprocedural optimizations include removing +tail recursion (last statement is a recursive call to the +procedure itself), topologically sorting the basic blocks to +minimize the number of branch instructions, and common +subexpression recognition.

+ +

The third general class of optimizations done by the +global optimizer is improving the structure of a basic +block. For the most part these involve transforming +arithmetic or boolean expressions into forms that are likely +to result in better target code. As a simple example, A + +B*C can be converted to B*C + A. The latter can often be +handled by loading B into a register, multiplying the +register by C, and then adding in A, whereas the former may +involve first putting A into a temporary, depending on the +details of the code generation table. Another example of +this kind of basic block optimization is transforming -B + A +< 0 into the equivalent, but simpler, A < B.

+ +

*.

+ +

The Back End

+ +

The back end reads a stream of EM instructions and +generates assembly code for the target machine. Although the +algorithm itself is machine independent, for each target +machine a machine dependent driving table must be supplied. +The driving table effectively defines the mapping of EM code +to target code.

+ +

It will be convenient to think of the EM instructions +being read as a stream of tokens. For didactic purposes, we +will concentrate on two kinds of tokens: those that load +something onto the stack, and those that perform some +operation on the top one or two values on the stack. The +back end maintains at compile time a simulated stack whose +behavior mirrors what the stack of a hardware EM machine +would do at run time. If the current input token is a load +instruction, a new entry is pushed onto the simulated +stack.

+ +

Consider, as an example, the EM code produced for the +statement K := I + 7. If K and I are 2-byte local variables, +it will normally be LOL I; LOC 7; ADI 2; STL K. Initially +the simulated stack is empty. After the first token has been +read and processed, the simulated stack will contain a stack +token of type MEM with attributes telling that it is a +local, giving its address, etc. After the second token has +been read and processed, the top two tokens on the simulated +stack will be CON (constant) on top and MEM directly +underneath it.

+ +

At this point the back end reads the ADI 2 token and +looks in the driving table to find a line or lines that +define the action to be taken for ADI 2. For a typical +multiregister machine, instructions will exist to add +constants to registers, but not to memory. Consequently, the +driving table will not contain an entry for ADI 2 with stack +configuration CON, MEM.

+ +

The back end is now faced with the problem of how to get +from its current stack configuration, CON, MEM, which is not +listed, to one that is listed. The table will normally +contain rules (which we call "coercions") for +converting between CON, REG, MEM, and similar tokens. +Therefore the back end attempts to "coerce" the +stack into a configuration that is present in the +table. A typical coercion rule might tell how to convert a +MEM into a REG, namely by performing the actions of +allocating a register and emitting code to move the memory +word to that register. Having transformed the compile-time +stack into a configuration allowed for ADI 2, the rule can +be carried out. A typical rule for ADI 2 might have stack +configuration REG, MEM and would emit code to add the MEM to +the REG, leaving the stack with a single REG token instead +of the REG and MEM tokens present before the ADI 2.

+ +

In general, there will be more than one possible +coercion path. Assuming reasonable coercion rules for our +example, we might be able to convert CON MEM into CON REG by +loading the variable I into a register. Alternatively, we +could coerce CON to REG by loading the constant into a +register. The first coercion path does the add by first +loading I into a register and then adding 7 to it. The +second path first loads 7 into a register and then adds I to +it. On machines with a fast LOAD IMMEDIATE instruction for +small constants but no fast ADD IMMEDIATE, or vice versa, +one code sequence will be preferable to the other.

+ +

In fact, we actually have more choices than suggested +above. In both coercion paths a register must be allocated. +On many machines, not every register can be used in every +operation, so the choice may be important. On some machines, +for example, the operand of a multiply must be in an odd +register. To summarize, from any state (i.e., token and +stack configuration), a variety of choices can be made, +leading to a variety of different target code sequences.

+ +

To decide which of the various code sequences to emit, +the back end must have some information about the time and +memory cost of each one. To provide this information, each +rule in the driving table, including coercions, specifies +both the time and memory cost of the code emitted when the +rule is applied. The back end can then simply try each of +the legal possibilities (including all the possible register +allocations) to find the cheapest one.

+ +

This situation is similar to that found in a chess or +other game-playing program, in which from any state a finite +number of moves can be made. Just as in a chess program, the +back end can look at all the "moves" that can be +made from each state reachable from the original state, and +thus find the sequence that gives the minimum cost to a +depth of one. More generally, the back end can evaluate all +paths corresponding to accepting the next N input +tokens, find the cheapest one, and then make the first move +along that path, precisely the way a chess program +would.

+ +

Since the back end is analogous to both a parser and a +chess playing program, some clarifying remarks may be +helpful. First, chess programs and the back end must do some +look ahead, whereas the parser for a well-designed grammar +can usually suffice with one input token because grammars +are supposed to be unambiguous. In contrast, many legal +mappings from a sequence of EM instructions to target code +may exist. Second, like a parser but unlike a chess program, +the back end has perfect information -- it does not have to +contend with an unpredictable opponent’s moves. Third, +chess programs normally make a static evaluation of the +board and label the nodes of the tree with the +resulting scores. The back end, in contrast, associates +costs with arcs (moves) rather than nodes (states). +However, the difference is not essential, since it could +also label each node with the cumulative cost from the root +to that node.

+ +

As mentioned above, the cost field in the table contains +both the time and memory costs for the code emitted. +It should be clear that the back end could use either one or +some linear combination of them as the scoring function for +evaluating moves. A user can instruct the compiler to +optimize for time or for memory or for, say, 0.3 x time + +0.7 x memory. Thus the same compiler can provide a wide +range of performance options to the user. The writer of the +back end table can take advantage of this flexibility by +providing several code sequences with different tradeoffs +for each EM instruction (e.g., in line code vs. call to a +run time routine).

+ +

In addition to the time-space tradeoffs, by specifying +the depth of search parameter, N, the user can +effectively also tradeoff compile time vs. object code +quality, for whatever code metric has been chosen. In +summary, by combining the properties of a parser and a game +playing program, it is possible to make a code generator +that is table driven, highly flexible, and has the ability +to produce good code from a stack machine intermediate +code.

+ +

*.

+ +

The Target Machine Optimizer

+ +

In the model of Fig 2., the peephole optimizer comes +before the global optimizer. It may happen that the code +produced by the global optimizer can also be improved by +another round of peephole optimization. Conceivably, the +system could have been designed to iterate peephole and +global optimizations until no more of either could be +performed.

+ +

However, both of these optimizations are done on the +machine independent EM code. Neither is able to take +advantage of the peculiarities and idiosyncracies with which +most target machines are well endowed. It is the function of +the final optimizer to do any (peephole) optimizations that +still remain.

+ +

The algorithm used here is the same as in the EM +peephole optimizer. In fact, if it were not for the +differences between EM syntax, which is very restricted, and +target assembly language syntax, which is less so, precisely +the same program could be used for both. Nevertheless, the +same ideas apply concerning patterns and replacements, so +our discussion of this optimizer will be restricted to one +example.

+ +

To see what the target optimizer might do, consider the +PDP-11 instruction sequence sub #2,r0; mov (r0),x. First 2 +is subtracted from register 0, then the word pointed to by +it is moved to x. The PDP-11 happens to have an addressing +mode to perform this sequence in one instruction: mov +-(r0),x. Although it is conceivable that this instruction +could be included in the back end driving table for the +PDP-11, it is awkward to do so because it can occur in so +many contexts. It is much easier to catch things like this +in a separate program.

+ +

*.

+ +

The Universal Assembler/Linker

+ +

Although assembly languages for different machines may +appear very different at first glance, they have a +surprisingly large intersection. We have been able to +construct an assembler/linker that is almost entirely +independent of the assembly language being processed. To +tailor the program to a specific assembly language, it is +necessary to supply a table giving the list of instructions, +the bit patterns required for each one, and the language +syntax. The machine independent part of the assembler/linker +is then compiled with the table to produce an assembler and +linker for a particular target machine. Experience has shown +that writing the necessary table for a new machine can be +done in less than a week.

+ +

To enforce a modicum of uniformity, we have chosen to +use a common set of pseudoinstructions for all target +machines. They are used to initialize memory, allocate +uninitialized memory, determine the current segment, and +similar functions found in most assemblers.

+ +

The assembler is also a linker. After assembling a +program, it checks to see if there are any unsatisfied +external references. If so, it begins reading the libraries +to find the necessary routines, including them in the object +file as it finds them. This approach requires libraries to +be maintained in assembly language form, but eliminates the +need for inventing a language to express relocatable object +programs in a machine independent way. It also simplifies +the assembler, since producing absolute object code is +easier than producing relocatable object code. Finally, +although assembly language libraries may be somewhat larger +than relocatable object module libraries, the loss in speed +due to having more input may be more than compensated for by +not having to pass an intermediate file between the +assembler and linker.

+ +

*.

+ +

The Utility Package

+ +

The utility package is a collection of programs designed +to aid the implementers of new front ends or new back ends. +The most useful ones are the test programs. For example, one +test set, EMTEST, systematically checks out a back end by +executing an ever larger subset of the EM instructions. It +starts out by testing LOC, LOL and a few of the other +essential instructions. If these appear to work, it then +tries out new instructions one at a time, adding them to the +set of instructions "known" to work as they pass +the tests.

+ +

Each instruction is tested with a variety of operands +chosen from values where problems can be expected. For +example, on target machines which have 16-bit index +registers but only allow 8-bit displacements, a +fundamentally different algorithm may be needed for +accessing the first few bytes of local variables and those +with offsets of thousands. The test programs have been +carefully designed to thoroughly test all relevant +cases.

+ +

In addition to EMTEST, test programs in Pascal, C, and +other languages are also available. A typical test is:

+ +

i := 9; if i + 250 <> 259 then +error(16);

+ +

Like EMTEST, the other test programs systematically +exercise all features of the language being tested, and do +so in a way that makes it possible to pinpoint errors +precisely. While it has been said that testing can only +demonstrate the presence of errors and not their absence, +our experience is that the test programs have been +invaluable in debugging new parts of the system quickly.

+ +

Other utilities include programs to convert the highly +compact EM code produced by front ends to ASCII and vice +versa, programs to build various internal tables from human +writable input formats, a variety of libraries written in or +compiled to EM to make them portable, an EM assembler, and +EM interpreters for various machines.

+ +

Interpreting the EM code instead of translating it to +target machine language is useful for several reasons. +First, the interpreters provide extensive run time +diagnostics including an option to list the original source +program (in Pascal, C, etc.) with the execution frequency or +execution time for each source line printed in the left +margin. Second, since an EM program is typically about +one-third the size of a compiled program, large programs can +be executed on small machines. Third, running the EM code +directly makes it easier to pinpoint errors in the EM output +of front ends still being debugged.

+ +

*.

+ +

Summary and Conclusions

+ +

The Amsterdam Compiler Kit is a tool kit for building +portable (cross) compilers and interpreters. The main pieces +of the kit are the front ends, which convert source programs +to EM code, optimizers, which improve the EM code, and back +ends, which convert the EM code to target assembly language. +The kit is highly modular, so writing one front end (and its +associated runtime routines) is sufficient to implement a +new language on a dozen or more machines, and writing one +back end table and one universal assembler/linker table is +all that is needed to bring up all the previously +implemented languages on a new machine. In this manner, the +contents, and hopefully the usefulness, of the toolkit will +increase in time.

+ +

We believe the principal lesson to be learned from our +work is that the old UNCOL idea is basically a sound way to +produce compilers, provided suitable restrictions are placed +on the source languages and target machines. We also believe +that although compilers produced by this technology may not +be equal to the very best handcrafted compilers, in terms of +object code quality, they are certainly competitive with +many existing compilers. However, when one factors in the +cost of producing the compiler, the possible slight loss in +performance may be more than compensated for by the large +decrease in production cost. As a consequence of our work +and similar work by other researchers [1,3,4], we expect +integrated compiler building kits to become increasingly +popular in the near future.

+ +

The toolkit is now available for various computers +running the UNIX ® operating system. For +information, contact the authors.

+ +

*.

+ +

References

+ +

1. Graham, S.L. Table-Driven Code Generation. +Computer 13, 8 (August 1980), 25-34.

+ +

A discussion of systematic ways to do code generation, +in particular, the idea of having a table with templates +that match parts of the parse tree and convert them into +machine instructions.

+ +

2. Haddon, B.K., and Waite, W.M. Experience with +the Universal Intermediate Language Janus. Software +Practice & Experience 8, 5 (Sept.-Oct. 1978), +601-616.

+ +

An intermediate language for use with ALGOL 68, Pascal, +etc. is described. The paper discusses some problems +encountered and how they were dealt with.

+ +

3. Johnson, S.C. A Portable Compiler: Theory and +Practice. Ann. ACM Symp. Prin. Prog. Lang., Jan. +1978.

+ +

A cogent discussion of the portable C compiler. +Particularly interesting are the author’s thoughts on +the value of computer science theory.

+ +

4. Leverett, B.W., Cattell, R.G.G, Hobbs, S.O., +Newcomer, J.M., Reiner, A.H., Schatz, B.R., and Wulf, W.A. +An Overview of the Production-Quality Compiler-Compiler +Project. Computer 13, 8 (August 1980), 38-49.

+ +

PQCC is a system for building compilers similar in +concept but differing in details from the Amsterdam Compiler +Kit. The paper describes the intermediate representation +used and the code generation strategy.

+ +

5. Lowry, E.S., and Medlock, C.W. Object Code +Optimization. Commun. ACM 12, (Jan. 1969), 13-22.

+ +

A classic paper on global object code optimization. It +covers data flow analysis, common subexpressions, code +motion, register allocation and other techniques.

+ +

6. Nori, K.V., Ammann, U., Jensen, K., Nageli, H. +The Pascal P Compiler Implementation Notes. Eidgen. Tech. +Hochschule, Zurich, 1975.

+ +

A description of the original P-code machine, used to +transport the Pascal-P compiler to new computers.

+ +

7. Steel, T.B., Jr. UNCOL: the Myth and the Fact. +in Ann. Rev. Auto. Prog. Goodman, R. (ed.), vol 2., +(1960), 325-344.

+ +

An introduction to the UNCOL idea by its originator.

+ +

8. Steel, T.B., Jr. A First Version of UNCOL. +Proc. Western Joint Comp. Conf., (1961), 371-377.

+ +

The first detailed proposal for an UNCOL. By current +standards it is a primitive language, but it is interesting +for its historical perspective.

+ +

9. Tanenbaum, A.S., van Staveren, H., and +Stevenson, J.W. Using Peephole Optimization on Intermediate +Code. ACM Trans. Prog. Lang. and Sys. 3, 1 (Jan. +1982) pp. 21-36.

+ +

A detailed description of a table-driven peephole +optimizer. The driving table provides a list of patterns to +match as well as the replacement text to use for each +successful match.

+ +

10. Tanenbaum, A.S., Stevenson, J.W., Keizer, +E.G., and van Staveren, H. Description of an Experimental +Machine Architecture for use with Block Structured +Languages. Informatica Rapport 81, Vrije Universiteit, +Amsterdam, 1983.

+ +

The defining document for EM.

+ +

11. Tanenbaum, A.S. Implications of Structured +Programming for Machine Architecture. Comm. ACM 21, 3 +(March 1978), 237-246.

+ +

The background and motivation for the design of EM. This +early version emphasized the idea of interpreting the +intermediate code (then called EM-1) rather than compiling +it.

+
+ + diff --git a/src/olddocs/toolkit.pdf b/src/olddocs/toolkit.pdf new file mode 100644 index 0000000000000000000000000000000000000000..49e706cc7d93f6eefaf40f7ecec9c9b32b4beb20 GIT binary patch literal 65008 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 + + + + + +The ACK Target Optimizer + + + +

The ACK Target Optimizer

+1. Introduction
+2. Global structure of the target optimizer
+2.1. Assumptions about the assembly code format
+2.2. Informal description of the machine-dependent tables
+2.3. Examples
+2.3.1. Vax examples
+2.3.2. PDP-11 examples
+3. Implementation of the target optimizer
+3.1. The window mechanism
+3.2. Pattern matching
+3.3. Data structures
+4. Implementation of the target optimizer generator
+5. References
+References
+Appendix A
+ +
+ +

ABSTRACT

+ +

H.E. Bal
+Vrije Universiteit
+Wiskundig Seminarium, Amsterdam

+ +

The Target Optimizer is one of several optimizers that +are part of the Amsterdam Compiler Kit. It operates directly +on assembly code, rather than on a higher level intermediate +code, as the Peephole Optimizer and Global Optimizer do. +Consequently, the Target Optimizer can do optimizations that +are highly machine-dependent.

+ +

Each target machine has its own Target Optimizer. New +optimizers are generated by the Target Optimizer Generator, +which uses a machine-dependent table as input. This document +contains full information on how to write such a table for a +new machine. It also discusses the implementation of the +Target Optimizer and its generator.

+ +

1. Introduction

+ +

+ +

This document describes the target optimizer component +of the Amsterdam Compiler Kit (ACK) .[Tane81a, Tane83a, +Tane83b] Optimization takes place in several parts of ACK +compilers, most notably in the Peephole Optimizer[Tane82a] +and the Global Optimizer,[Bal85b, Bal85a] which are both +language- and machine-independent, and in the +machine-specific code generators.[Tane84a] The target +optimizer is the finishing touch in this sequence of +optimizers. It can be used to capture those optimizations +that are hard to express in the other parts of ACK. These +optimizations will typically be very machine-specific.

+ +

The target optimizer operates on the assembly code of +some target machine. Hence there is one target optimizer per +machine. However, just as for the ACK code generators and +assemblers, a framework has been build that allows easy +generation of target optimizers out of machine-independent +parts and a machine-dependent description table (see figure +1.). So the major part of the code of a target optimizer is +shared among all target optimizers.

+
                                            |-------------------------|
+                                            | machine-independent     |
+                                            | code                    |
+                                            |                         |
+               |-----------------|          |-------------------------|
+     descrip-  |target optimizer |          | machine-dependent code  |
+      tion --> |generator        | ---->    | + tables                |
+     table     |                 |          |                         |
+               |-----------------|          |-------------------------|
+
+
+                                                   target optimizer
+
+
+         Figure 1: Generation of a target optimizer.
+
+
+
+ +

This document focusses on the description of the +machine-dependent table. In chapter 2 we give an informal +introduction to the optimization algorithm and to the +definition of the table format. Chapters 3 and 4 discuss the +implementation of the target optimizer and the target +optimizer generator. Appendix A gives full information for +writing a description table.

+ +

2. Global structure of the target optimizer

+ +

The target optimizer is based on the well understood +model of a peephole optimizer.[Aho78a] It contains a +machine-dependent table of (pattern,replacement) pairs. Each +pattern describes a sequence of one or more assembler +instructions that can be replaced by zero or more +equivalent, yet cheaper, instructions (the +’replacement’). The optimizer maintains a +window that moves over the input. At any moment, the +window contains some contiguous part of the input. If the +instructions in the current window match some pattern in the +table, they are replaced by the corresponding replacement; +else, the window moves one instruction to the right.

+ +

In the remainder of this section we will give an +informal description of the machine-dependent table. A more +precise definition is given in appendix A. We will first +discuss the restrictions put on the format of the assembly +code.

+ +

2.1. Assumptions about the assembly code format

+ +

We assume that a line of assembly code begins with an +instruction mnemonic (opcode), followed by zero or +more operands. The mnemonic and the first operand +must be separated by a special character (e.g. a space or a +tab). Likewise, the operands must be separated by a special +character (e.g. a comma). These separators need not be the +same for all machines.

+ +

2.2. Informal description of the machine-dependent tables

+ +

The major part of the table consists of +(pattern,replacement) pairs called entries.

+ +

A pattern is a list of instruction descriptions. Each +instruction description describes the instruction mnemonic +and the operands.

+ +

A mnemonic is described either by a string constant or +by the keyword ANY. As all entities dealt with by the target +optimizer are strings, string constants do not contain +quotes. A string constant matches only itself. ANY matches +every instruction mnemonic.

+
Examples of mnemonic descriptions:
+
+       add
+        sub.l
+        mulw3
+        ANY
+
+ +

An operand can also be described by a string +constant.

+
Examples:
+
+      (sp)+
+       r5
+       -4(r6)
+
+
+ +

Alternatively, it can be described by means of a +variable name. Variables have values which are +strings. They have to be declared in the table before the +patterns. Each such declaration defines the name of a +variable and a restriction to which its value is +subjected.

+
Example of variable declarations:
+
+     CONST       { VAL[0] == ’$’ };
+      REG         { VAL[0] == ’r’ && VAL[1] >= ’0’ && VAL[1] <= ’3’ &&
+                    VAL[2] == ’\0’ };
+      X           { TRUE };
+
+
+ +

The keyword VAL denotes the value of the variable, which +is a null-terminated string. An operand description given +via a variable name matches an actual operand if the actual +operand obeys the associated restriction.

+
     CONST  matches   $1, $-5, $foo etc.
+     REG    matches   r0, r1, r2 and r3
+     X      matches   anything
+
+
+ +

The restriction (between curly braces) may be any legal +"C"[Kern78a] expression. It may also contain calls +to user-defined procedures. These procedures must be added +to the table after the patterns.

+
Example:
+
+    FERMAT_NUMBER    { VAL[0] == ’$’ && is_fermat_number(&VAL[1]) };
+
+
+ +

An operand can also be described by a mixture of a +string constant and a variable name. The most general form +allowed is:

+
       string_constant1 variable_name string_constant2
+
+Example:
+
+      (REG)+  matches  (r0)+, (r1)+, (r2)+ and (r3)+
+
+
+ +

Any of the three components may be omitted, so the first +two forms are just special cases of the general form. The +name of a variable can not be used as a string constant. In +the above context, it is impossible to define an operand +that matches the string "REG". This limitation is +of little consequence, as the table writer is free to choose +the names of variables. This approach, however, avoids the +need for awkward escape sequences.

+ +

A pattern consists of one or more instruction +descriptions (separated by a colon) followed by an optional +constraint. A pattern "P1 : P2 : .. : Pn C" +matches the sequence of instructions "I1 I2 .. In" +if:

+ + + + + + +
+ +

(i)

+
+ +

for each i, 1 <= i <= n, Pi matches Ii, as +described above;

+
+ + + + + + +
+ +

(ii)

+
+ +

multiple occurrences of the same variable name or of the +keyword ANY stand for the same values throughout the +pattern;

+
+ + + + + + +
+ +

(iii)

+
+ +

the optional constraint C is satisfied, i.e. it +evaluates to TRUE.

+
+
The pattern:
+
+     dec REG : move.b CONST,(REG)
+
+matches:
+
+     dec r0 : move.b $4,(r0)
+
+but not:
+
+     dec r0 : move.b $4,(r1)
+
+(as the variable REG matches two different strings).
+
+ +

If a pattern containing different registers must be +described, extra names for a register should be declared, +all sharing the same restriction.

+
Example:
+
+    REG1,REG2  { VAL[0] == ’r’ &&  .....  };
+
+    addl3 REG1,REG1,REG2 : subl2 REG2,REG1
+
+ +

The optional constraint is an auxiliary "C" +expression (just like the parameter restrictions). The +expression may refer to the variables and to ANY.

+
Example:
+
+   move REG1,REG2    { REG1[1] == REG2[1] + 1 }
+
+matches
+
+   move r1,r0
+    move r2,r1
+    move r3,r2
+
+ +

The replacement part of a (pattern,replacement) table +entry has the same structure as a pattern, except that:

+ + + + + + + +
+ +

(i)

+
+ +

it may not contain an additional constraint;

+
+
+ + + + + + + +
+ +

(ii)

+
+ +

it may be empty.

+
+
+ +

A replacement may also refer to the values of variables +and ANY.

+ +

2.3. Examples

+ +

This section contains some realistic examples for +optimization on PDP-11 and Vax assembly code.

+ +

2.3.1. Vax examples

+ +

Suppose the table contains the following +declarations:

+
         X, LOG        { TRUE };
+         LAB           { VAL[0] == ’L’ };   /* e.g. L0017 */
+         A             { no_side_effects(VAL) };
+         NUM           { is_number(VAL) };
+
+
+ +

The procedure "no_side_effects" checks if its +argument contains any side effects, i.e. auto increment or +auto decrement. The procedure "is_number" checks +if its argument contains only digits. These procedures must +be supplied by the table-writer and must be included in the +table.

+
entry:  addl3 X,A,A    -> addl2 X,A;
+
+
+ +

This entry changes a 3-operand instruction into a +cheaper 2-operand instruction. An optimization like:

+
        addl3 r0,(r2)+,(r2)+   -> addl2 r0,(r2)+
+
+
+ +

is illegal, as r2 should be incremented twice. Hence the +second argument is required to be side-effect free.

+
entry:  addw2 $-NUM,X  -> subw2 $NUM,X;
+
+
+ +

An instruction like "subw2 $5,r0" is cheaper +than "addw2 $-5,r0", because constants in the +range 0 to 63 are represented very efficiently on the +Vax.

+
entry:  bitw $NUM,A : jneq LAB
+                { is_poweroftwo(NUM,LOG) }  -> jbs $LOG,A,LAB;
+
+
+ +

A "bitw x,y" sets the condition codes to the +bitwise "and" of x and y. A "jbs n,x,l" +branches to l if bit n of x is set. So, for example, the +following transformation is possible:

+
      bitw $32,r0 : jneq L0017 ->  jbs $5,r0,L0017
+
+
+ +

The user-defined procedure "is_poweroftwo" +checks if its first argument is a power of 2 and, if so, +sets its second argument to the logarithm of the first +argument. (Both arguments are strings). Note that the +variable LOG is not used in the pattern itself. It is +assigned a (string) value by "is_poweroftwo" and +is used in the replacement.

+ +

2.3.2. PDP-11 examples

+ +

Suppose we have the following declarations:

+
         X             { TRUE };
+         A             { no_side_effects(VAL) };
+         L1, L2        { VAL[0] == ’I’ };
+         REG           { VAL[0] == ’r’ && VAL[1] >= ’0’ && VAL[1] <= ’5’ &&
+                         VAL[2] == ’\0’ };
+
+
+ +

The implementation of "no_side_effects" may of +course differ for the PDP-11 and the Vax.

+
entry:  mov REG,A : ANY A,X  ->  mov REG,A : ANY REG,X ;
+
+
+ +

This entry implements register subsumption. If A and REG +hold the same value (which is true after "mov +REG,A") and A is used as source (first) operand, it is +cheaper to use REG instead.

+
entry:  jeq L1 : jbr L2 : labdef L1  ->  jne L2 : labdef L1;
+
+
+ +

The "jeq L1" is a "skip over an +unconditional jump". "labdef L1" denotes the +definition (i.e. defining occurrence) of label L1. As the +target optimizer has to know how such a definition looks +like, this must be expressed in the table (see Appendix +A).

+
entry:  add $01,X { carry_dead(REST) }  -> inc X;
+
+
+ +

On the PDP-11, an add-one is not equivalent to an +increment. The latter does not set the carry-bit of the +condition codes, while the former does. So a look-ahead is +needed to see if the rest of the input uses the carry-bit +before changing the condition codes. A look-ahead of one +instruction is provided by the target optimizer. This will +normally be sufficient for compiler-generated code. The +keyword REST contains the mnemonic of the first instruction +of the rest of the input. If this instruction uses the +carry-bit (e.g. an adc, subc, bhis) the transformation is +not allowed.

+ +

3. Implementation of the target optimizer

+ +

The target optimizer reads one input file of assembler +instructions, processes it, and writes the optimized code to +the output file. So it performs one pass over the input.

+ +

3.1. The window mechanism

+ +

The optimizer uses a window that moves over the +input. It repeatedly tries to match the instructions in the +window with the patterns in the table. If no match is +possible, the window moves one instruction forwards (to the +right). After a successful match the matched instructions +are removed from the window and are replaced by the +replacement part of the table entry. Furthermore, the window +is moved a few instructions backwards, as it is possible +that instructions that were rejected earlier now do match. +For example, consider the following patterns:

+
     cmp $0, X           -> tst X ;
+     mov REG,X : tst X   -> move REG.X ;   /* redundant test */
+
+ +

If the input is:

+
     mov r0,foo : cmp $0,foo
+
+ +

then the first instruction is initially rejected. +However, after the transformation

+
     cmp $0,foo   ->  tst foo
+
+ +

the following optimization is possible:

+
     mov r0,foo : tst foo  ->  mov r0,foo
+
+ +

The window is implemented as a queue. Matching +takes place at the head of the queue. New instructions are +added at the tail. If the window is moved forwards, the +instruction at the head is not yet written to the output, as +it may be needed later on. Instead it is added to a second +queue, the backup queue. After a successful match, +the entire backup queue is inserted at the front of the +window queue, which effectively implements the shift +backwards.

+ +

Both queues have the length of the longest pattern in +the table. If, as a result of a forward window move, the +backup queue gets full, the instruction at its head is +outputted and removed. Instructions are read from the input +whenever the window queue contains fewer elements than the +length of the longest pattern.

+ +

3.2. Pattern matching

+ +

Pattern matching is done in three steps:

+ + + + + + +
+ +

(i)

+
+ +

find patterns in the table whose instruction mnemonics +match the mnemonics of the instructions in the current +window;

+
+ + + + + + +
+ +

(ii)

+
+ +

check if the operands of the pattern match the operands +of the instructions in the current window;

+
+ + + + + + +
+ +

(iii)

+
+ +

check if the optional constraint is satisfied.

+
+ +

For step (i) hashing is used. The mnemonic of the first +instruction of the window is used to determine a list of +possible patterns. Patterns starting with ANY are always +tried.

+ +

Matching of operand descriptions against actual operands +takes place as follows. The general form of an operand +description is:

+
     string_constant1 variable_name string_constant2
+
+ +

The actual operand should begin with string_constant1 +and end on string_constant2. If so, these strings are +stripped from it and the remaining string is matched against +the variable. Matching a string against a variable is +defined as follows:

+ + + + + + +
+ +

1.

+
+ +

initially (before the entire pattern match) all +variables are uninstantiated;

+
+ + + + + + +
+ +

2.

+
+ +

matching a string against an uninstantiated variable +succeeds if the restriction associated with the variable is +satisfied. As a side effect, it causes the variable to be +instantiated to the string;

+
+ + + + + + +
+ +

3.

+
+ +

matching a string against an instantiated variable +succeeds only if the variable was instantiated to the same +string.

+
+ +

Matching an actual mnemonic against the keyword ANY is +defined likewise.

+ +

The matching scheme implements the requirement that +multiple occurrences of the same variable name or of the +keyword ANY should stand for the same values throughout the +entire pattern (see section 2.).

+ +

Both the parameter restriction of 2. and the constraint +of step (iii) are checked by executing the "C" +expression.

+ +

3.3. Data structures

+ +

The most important data structure is the representation +of the input instructions. For every instruction we use two +representations:

+ + + + + + +
+ +

(i)

+
+ +

the textual representation, i.e. the exact code as it +appeared in the input;

+
+ + + + + + +
+ +

(ii)

+
+ +

a structural representation, containing the opcode and +the operands.

+
+ +

The opcode of an instruction is determined as soon as it +is read. If the line contains a label definition, the opcode +is set to "labdef", so a label definition is +treated like a normal instruction.

+ +

The operands of an instruction are not determined until +they are needed, i.e. until step (i) of the pattern matching +process has succeeded. For every instruction we keep track +of a state. After the opcode has successfully been +determined, the state is OPC_ONLY. Once the operands have +been recognized, the state is set to DONE. If the opcode or +operands can not be determined, or if the instruction cannot +be optimized for any other reason (see Appendix A), the +state is set to JUNK and any attempt to match it will +fail.

+ +

For each table entry we record the following +information:

+ + + + + + +
+ +

(i)

+
+ +

the length of the pattern (i.e. the number of +instruction descriptions)

+
+ + + + + + +
+ +

(ii)

+
+ +

a description of the instructions of the pattern

+
+ + + + + + + +
+ +

(iii)

+
+ +

the length of the replacement

+
+
+ + + + + + +
+ +

(iv)

+
+ +

a description of the instructions of the +replacement.

+
+ +

The description of an instruction consists of:

+ + + + + + + +
+ +

(i)

+
+ +

the opcode

+
+
+ + + + + + +
+ +

(ii)

+
+ +

for each operand, a description of the operand.

+
+ +

The description of an operand of the form:

+
     string_constant1 variable_name string_constant2
+
+ +

contains:

+ + + + + + + +
+ +

(i)

+
+ +

both string constants

+
+
+ + + + + + + +
+ +

(ii)

+
+ +

the number of the variable.

+
+
+ +

Each declared variable is assigned a unique number. For +every variable we maintain:

+ + + + + + + +
+ +

(i)

+
+ +

its state (instantiated or not instantiated)

+
+
+ + + + + + + +
+ +

(ii)

+
+ +

its current value (a string).

+
+
+ +

The restrictions on variables and the constraints are +stored in a switch-statement, indexed by variable number and +entry number respectively.

+ +

4. Implementation of the target optimizer generator

+ +

The target optimizer generator (topgen) reads a +target machine description table and produces two files:

+ + + + + + +
+ +

gen.h:

+
+ +

contains macro definitions for machine parameters that +were changed in the parameter section of the table (see +appendix A) and for some attributes derived from the table +(longest pattern, number of patterns, number of +variables).

+
+ + + + + + +
+ +

gen.c:

+
+ +

contains the entry description tables, code for checking +the parameter restrictions and constraints (switch +statements) and the user-defined procedures.

+
+ +

These two files are compiled together with some +machine-independent files to produce a target optimizer.

+ +

Topgen is implemented using the LL(1) parser generator +system LLgen ,[Jaco85a] a powerful tool of the Amsterdam +Compiler Kit. This system provides a flexible way of +describing the syntax of the tables. The syntactical +description of the table format included in Appendix A was +derived from the LLgen syntax rules.

+ +

The parser uses a simple, hand-written, lexical analyzer +(scanner). The scanner returns a single character in most +cases. The recognition of identifiers is left to the parser, +as this eases the analysis of operand descriptions. Comments +are removed from the input by the scanner, but white space +is passed to the parser, as it is meaningful in some +contexts (it separates the opcode description from the +description of the first operand).

+ +

Topgen maintains two symbol tables, one for variable +names and one for tunable parameters. The symbol tables are +organized as binary trees.

+ +

5. References

+ +

References

+ +

Aho78a.

+ + + + + +
+

A.V. Aho and J.D. Ullman, Principles of compiler +design, Addison-Wesley, Reading, Massachusetts +(1978).

+
+ +

Bal85a.

+ + + + + +
+

H.E. Bal, “The Design and Implementation of the EM +Global Optimizer,” Rapport IR-99, Vrije Universiteit, +Amsterdam (March 1985).

+
+ +

Bal85b.

+ + + + + +
+

H.E. Bal and A.S. Tanenbaum, “Language- and +Machine-independant Global Optimization on Intermediate +Code,” Rapport IR-98, Vrije Universiteit, Amsterdam +(March 1985).

+
+ +

Jaco85a.

+ + + + + +
+

C.J.H. Jacobs, “Some Topics in Parser +Generation,” Rapport IR-105, Vrije Universiteit, +Amsterdam (October 1985).

+
+ +

Kern78a.

+ + + + + +
+

B.W. Kernighan and D.M. Ritchie, The C Programming +Language, Prentice-Hall, Inc, Englewood Cliffs,NJ +(1978).

+
+ +

Tane84a.

+ + + + + +
+

A.S. Tanenbaum, E.G. Keizer, J.M. van Staveren, and J.W. +Stevenson, “Amsterdam Compiler Kit +documentation,” Rapport nr IR-90, Vrije Universiteit, +Amsterdam (June 1984).

+
+ +

Tane81a.

+ + + + + +
+

A.S. Tanenbaum, J.M. van Staveren, E.G. Keizer, and J.W. +Stevenson, “A Practical Toolkit for Making Portable +Compilers,” Rapport nr IR-74, Vrije Universiteit, +Amsterdam (October 1981).

+
+ +

Tane83a.

+ + + + + +
+

A.S. Tanenbaum, J.M. van Staveren, E.G. Keizer, and J.W. +Stevenson, “A Practical Toolkit for Making Portable +Compilers,” CACM, 26, 9, pp. 654-660 (September +1983).

+
+ +

Tane83b.

+ + + + + +
+

A.S. Tanenbaum, J.M. van Staveren, E.G. Keizer, and J.W. +Stevenson, “A Unix Toolkit for Making Portable +Compilers,” Proceedings USENIX conf., 26, pp. +255-261, Toronto, Canada (July 1983).

+
+ +

Tane82a.

+ + + + + +
+

A.S. Tanenbaum, J.M. van Staveren, and J.W. Stevenson, +“Using Peephole Optimization on Intermediate +Code,” TOPLAS, 4, 1, pp. 21-36 (January +1982).

+
+ +

Appendix A

+ +

In this appendix we present a complete definition of the +target optimizer description table format. This appendix is +intended for table-writers. We use syntax rules for the +description of the table format. The following notation is +used:

+ +

+ +

Terminals are given in quotes, as in +’;’.

+ +

The table may contain white space and comment at all +reasonable places. Comments are as in "C", so they +begin with /* and end on */. Identifiers are sequences of +letters, digits and the underscore (’_’), +beginning with a letter.

+
     table   ->   {parameter_line} ’%%;’ {variable_declaration} ’%%;’
+                  {entry} ’%%;’ user_routines.
+
+ +

A table consists of four sections, containing +machine-dependent constants, variable declarations, pattern +rules and user-supplied subroutines.

+
     parameter_line ->  identifier value ’;’ .
+
+ +

A parameter line defines some attributes of the target +machines assembly code. For unspecified parameters default +values apply. The names of the parameters and the +corresponding defaults are shown in table 1.

+ +

+ +

table 1: parameter names and defaults

+ +

The OPC_TERMINATOR is the character that separates the +instruction mnemonic from the first operand (if any). The +OP_SEPARATOR separates adjacent operands. A LABEL_STARTER is +the first character of an instruction label. (Instruction +labels are assumed to start with the same character). The +LABEL_TERMINATOR is the last character of a label +definition. It is assumed that this character is not used in +an applied occurrence of the label identifier. For example, +the defining occurrence may be "I0017:" and the +applied occurrence may be "I0017" as in "jmp +I0017". MAXOP defines the maximum number of operands an +instruction can have. MAXOPLEN is the maximum length (in +characters) of an operand. MAX_OPC_LEN is the maximum length +of an instruction opcode. MAXVARLEN is the maximum length of +a declared string variable. As variables may be set by user +routines (see "bitw" example for the Vax) the +table-writer must have access to this length and must be +able to change it. MAXLINELEN denotes the maximum length of +a line of assembly code. PAREN_OPEN and PAREN_CLOSE must be +used when the operand separator can also occur within +operands, between parentheses of some kind. In this case, +PAREN_OPEN must be set to a string containing the opening +parentheses, and PAREN_CLOSE must be set to a string +containing the closing parentheses.

+ +

If a line of assembly code violates any of the +assumptions or exceeds some limit, the line is not +optimized. Optimization does, however, proceed with the rest +of the input.

+
     variable_declaration  -> identifier {’,’ identifier} restriction ’;’ .
+
+
+     restriction           ->  ’{’ anything ’}’ .
+
+ +

A variable declaration declares one or more string +variables that may be used in the patterns and in the +replacements. If a variable is used as part of an operand +description in a pattern, the entire pattern can only match +if the restriction evaluates to TRUE. If the pattern does +match, the variable is assigned the matching part of the +actual operand. Variables that are not used in a pattern are +initialized to null-strings and may be assigned a value in +the constraint-part of the pattern.

+ +

The restriction must be a legal "C" +expression. It may not contain a closing bracket +(’}’). Inside the expression, the name VAL +stands for the part of the actual (matching) operand. The +expression may contain calls to procedures that are defined +in the user-routines section.

+
     entry             ->  pattern ’->’ replacement ’;’ .
+
+
+     pattern           ->  instruction_descr
+                     { ’:’ instruction_descr }
+                     constraint .
+
+
+     replacement       ->  [ instruction_descr { ’:’ instruction_descr } ] .
+
+
+     instruction_descr -> opcode
+                    white
+                    [ operand_descr { ’,’ operand_descr } ] .
+
+
+     constraint        -> ’{’ anything ’}’ .
+
+
+     operand_descr     -> [ string_constant ]
+                    [ variable_name ]
+                    [ string_constant ] .
+
+
+     variable_name     -> identifier .
+
+
+     opcode            -> anything .
+
+ +

The symbol ’white’ stands for white space +(space or tab). An opcode can be any string not containing +the special symbols ’;’, ’{’, +’}’, ’:’, ’,’, +’->’ or white space. To be recognized, it +must begin with a letter. The opcode should either be a +mnemonic of a target machine instruction or it should be one +of the keywords ANY and labdef. ANY matches any actual +opcode. labdef matches only label definitions.

+ +

If an operand description contains an identifier (as +defined earlier), it is checked if the identifier is the +name of a declared variable. This effects the semantics of +the matching rules for the operand, as described in section +2. An operand may contain at most one such variable +name.

+ +

The constraint must be a legal "C" expression, +just as the operand restriction. It may call user-defined +procedures and use or change the value of declared +variables. It may also use the string variable REST, which +contains the mnemonic of the first instruction of the rest +of the input. (REST is a null-string if this mnemonic can +not be determined).

+
     user_routines -> anything .
+
+ +

The remainder of the table consists of user-defined +subroutines.

+
+ + diff --git a/src/olddocs/top.pdf b/src/olddocs/top.pdf new file mode 100644 index 0000000000000000000000000000000000000000..27b65372bc61e3f1b4764918bb262f4b37099c0f GIT binary patch literal 56051 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 y7l@tY02RF>Ku-)Acaei+94s8k0fq16 + + + + + + + + + +


+ +

UNIX version 7 bugs

+ +

This document describes the UNIX version 7 errors fixed +at the Vrije Universiteit, Amsterdam. Several of these are +discovered at the VU. Others are quoted from a list of bugs +distributed by BellLabs.

+ +

For each error the differences between the original and +modified source files are given, as well as a test +program.

+ +

ERROR 1: C optimizer bug for unsigned comparison

+ +

The following C program caused an IOT trap, while it +should not (compile with ’cc -O prog.c’):

+ + +

unsigned

+ + + +

i = 0;

+ + + + + +

main() {

+ + + +

register j;

+ +

j = -1;
+if (i > 40000)

+ + + +

abort();

+ + + + + +

}

+ +

BellLabs suggests to make the following patch in +c21.c:

+ +
     /* modified /usr/src/cmd/c/c21.c */
+
+
+ + + + +

189

+ + + + + + + +

if (r==0) {
+190

+ + + + + +

/* next 2 lines replaced as indicated by
+191

+ + + + + +

* Bell Labs bug distribution ( v7optbug )
+192

+ + + + + + + + + + + + + +

p->back->back->forw = p->forw;
+193

+ + + + + + + + + + + + + +

p->forw->back = p->back->back;
+194

+ + + + + +

End of lines changed */
+195

+ + + + + + + + + + + + + +

if (p->forw->op==CBR
+196

+ + + + + + + + + + + + + +

|| p->forw->op==SXT
+197

+ + + + + + + + + + + + + +

|| p->forw->op==CFCC) {
+198

+ + + + + + + + + + + + + + + + + +

p->back->forw = p->forw;
+199

+ + + + + + + + + + + + + + + + + +

p->forw->back = p->back;
+200

+ + + + + + + + + + + + + +

} else {
+201

+ + + + + + + + + + + + + + + + + +

p->back->back->forw = p->forw;
+202

+ + + + + + + + + + + + + + + + + +

p->forw->back = p->back->back;
+203

+ + + + + + + + + + + + + +

}
+204

+ + + + + +

/* End of new lines */
+205

+ + + + + + + + + + + + + +

decref(p->ref);
+206

+ + + + + + + + + + + + + +

p = p->back->back;
+207

+ + + + + + + + + + + + + +

nchange++;
+208

+ + + + + + + + + +

} else if (r>0) {

+ + + + + +

Use the previous program to test before and after the +modification.

+ + +

ERROR 2: The loader fails for large data or text +portions

+ +

The loader ’ld’ produces a "local +symbol botch" error for the following C program.

+ + +

int

+ + + +

big1[10000] = {

+ + + + + +

1

+ + + + + +

};

+ + + +

int

+ + + +

big2[10000] = {

+ + + + + +

2

+ + + + + +

};

+ +

main() {

+ + + +

printf("loader is fine\n");

+ + + + +

}

+ +

We have made the following fix:

+ +
     /* original /usr/src/cmd/ld.c */
+
+
+ + + + +

113

+ + + +

struct {
+114

+ + + + + + + + + +

int

+ + + + + +

fmagic;
+115

+ + + + + + + + + +

int

+ + + + + +

tsize;
+116

+ + + + + + + + + +

int

+ + + + + +

dsize;
+117

+ + + + + + + + + +

int

+ + + + + +

bsize;
+118

+ + + + + + + + + +

int

+ + + + + +

ssize;
+119

+ + + + + + + + + +

int

+ + + + + +

entry;
+120

+ + + + + + + + + +

int

+ + + + + +

pad;
+121

+ + + + + + + + + +

int

+ + + + + +

relflg;
+122

+ + + + + +

} filhdr;

+ + + + + +

/* modified /usr/src/cmd/ld.c */

+ + + + +

113

+ + + +

/*
+114

+ + + + + +

* The original Version 7 loader had problems loading +large
+115

+ + + + + +

* text or data portions.
+116

+ + + + + +

* Why not include <a.out.h> ???
+117

+ + + + + +

* then they would be declared unsigned
+118

+ + + + + +

*/
+119

+ + + + + +

struct {
+120

+ + + + + + + + + +

int

+ + + + + +

fmagic;
+121

+ + + + + + + + + +

unsigned

+ + + + + +

tsize;

+ + + + + + + + + +

/* not int !!! */
+122

+ + + + + + + + + +

unsigned

+ + + + + +

dsize;

+ + + + + + + + + +

/* not int !!! */
+123

+ + + + + + + + + +

unsigned

+ + + + + +

bsize;

+ + + + + + + + + +

/* not int !!! */
+124

+ + + + + + + + + +

unsigned

+ + + + + +

ssize;

+ + + + + + + + + +

/* not int !!! */
+125

+ + + + + + + + + +

unsigned

+ + + + + +

entry;

+ + + + + + + + + +

/* not int !!! */
+126

+ + + + + + + + + +

unsigned

+ + + + + +

pad;

+ + + + + + + + + +

/* not int !!! */
+127

+ + + + + + + + + +

unsigned

+ + + + + +

relflg;

+ + + + + + + + + +

/* not int !!! */
+128

+ + + + + +

} filhdr;

+ + + +

ERROR 3: Floating point registers

+ +

When a program is swapped to disk if it needs more +memory, then the floating point registers were not saved, so +that it may have different registers when it is restarted. A +small assembly program demonstrates this for the status +register. If the error is not fixed, then the program +generates an IOT error. A "memory fault" is +generated if all is fine.

+ + +

start:

+ + + +

ldfps

+ + + + + +

$7400
+1:

+ + + + + +

stfps

+ + + + + +

r0

+ + + + + +

mov

+ + + + + +

r0,-(sp)

+ + + + + +

cmp

+ + + + + +

r0,$7400

+ + + + + +

beq

+ + + + + +

1b

+ + + + + +

4

+ + + + + +

Some digging into the kernel is required to fix it. The +following patch will do:

+ +
     /* original /usr/sys/sys/slp.c */
+
+
+ + + + +

563

+ + + + + + + +

a2 = malloc(coremap, newsize);
+564

+ + + + + + + + + +

if(a2 == NULL) {
+565

+ + + + + + + + + + + + + +

xswap(p, 1, n);
+566

+ + + + + + + + + + + + + +

p->p_flag |= SSWAP;
+567

+ + + + + + + + + + + + + +

qswtch();
+568

+ + + + + + + + + + + + + +

/* no return */
+569

+ + + + + + + + + +

}

+ + + + + +

/* modified /usr/sys/sys/slp.c */

+ + + + +

590

+ + + + + + + +

a2 = malloc(coremap, newsize);
+591

+ + + + + + + + + +

if(a2 == NULL) {
+592

+ + + + + +

#ifdef FPBUG
+593

+ + + + + + + + + + + + + +

/*
+594

+ + + + + + + + + + + + + +

* copy floating point register and status,
+595

+ + + + + + + + + + + + + +

* but only if you must switch processes
+596

+ + + + + + + + + + + + + +

*/
+597

+ + + + + + + + + + + + + +

if(u.u_fpsaved == 0) {
+598

+ + + + + + + + + + + + + + + + + +

savfp(&u.u_fps);
+599

+ + + + + + + + + + + + + + + + + +

u.u_fpsaved = 1;
+600

+ + + + + + + + + + + + + +

}
+601

+ + + + + +

#endif
+602

+ + + + + + + + + + + + + +

xswap(p, 1, n);
+603

+ + + + + + + + + + + + + +

p->p_flag |= SSWAP;
+604

+ + + + + + + + + + + + + +

qswtch();
+605

+ + + + + + + + + + + + + +

/* no return */
+606

+ + + + + + + + + +

}

+ + + +

ERROR 4: Floating point registers.

+ +

A similar problem arises when a process forks. The child +will have random floating point registers as is demonstrated +by the following assembly language program. The child +process will die by an IOT trap and the father prints the +message "child failed".

+ + +

exit

+ + + +

= 1.
+fork

+ + + + + +

= 2.
+write

+ + + + + +

= 4.
+wait

+ + + + + +

= 7.

+ +

start:

+ + + + + +

ldfps

+ + + + + +

$7400

+ + + + + +

sys

+ + + + + +

fork

+ + + + + +

br

+ + + + + +

child

+ + + + + +

sys

+ + + + + +

wait

+ + + + + +

tst

+ + + + + +

r1

+ + + + + +

bne

+ + + + + +

bad

+ + + + + +

stfps

+ + + + + +

r2

+ + + + + +

cmp

+ + + + + +

r2,$7400

+ + + + + +

beq

+ + + + + +

start

+ + + + + +

4
+child:

+ + + + + +

stfps

+ + + + + +

r2

+ + + + + +

cmp

+ + + + + +

r2,$7400

+ + + + + +

beq

+ + + + + +

ex

+ + + + + +

4
+bad:

+ + + + + +

clr

+ + + + + +

r0

+ + + + + +

sys

+ + + + + +

write;mess;13.
+ex:

+ + + + + +

clr

+ + + + + +

r0

+ + + + + +

sys

+ + + + + +

exit

+ + + + + +

.data
+mess:

+ + + + + +

<child failed\n>

+ + + + + +

The same file slp.c should be patched as follows:

+ +
     /* original /usr/sys/sys/slp.c */
+
+
+ + + + +

499

+ + + + + + + +

/*
+500

+ + + + + + + + + +

* When the resume is executed for the new process,
+501

+ + + + + + + + + +

* here’s where it will resume.
+502

+ + + + + + + + + +

*/
+503

+ + + + + + + + + +

if (save(u.u_ssav)) {
+504

+ + + + + + + + + + + + + +

sureg();
+505

+ + + + + + + + + + + + + +

return(1);
+506

+ + + + + + + + + +

}
+507

+ + + + + + + + + +

a2 = malloc(coremap, n);
+508

+ + + + + + + + + +

/*
+509

+ + + + + + + + + +

* If there is not enough core for the
+510

+ + + + + + + + + +

* new process, swap out the current process to generate +the
+511

+ + + + + + + + + +

* copy.
+512

+ + + + + + + + + +

*/

+ + + +

/* modified /usr/sys/sys/slp.c */

+ + +

519

+ + + +

/*
+520

+ + + + + +

* When the resume is executed for the new process,
+521

+ + + + + +

* here’s where it will resume.
+522

+ + + + + +

*/
+523

+ + + + + +

if (save(u.u_ssav)) {
+524

+ + + + + + + + + +

sureg();
+525

+ + + + + + + + + +

return(1);
+526

+ + + + + +

}
+527 #ifdef FPBUG
+528

+ + + + + +

/* copy the floating point registers and status to child +*/
+529

+ + + + + +

if(u.u_fpsaved == 0) {
+530

+ + + + + + + + + +

savfp(&u.u_fps);
+531

+ + + + + + + + + +

u.u_fpsaved = 1;
+532

+ + + + + +

}
+533 #endif
+534

+ + + + + +

a2 = malloc(coremap, n);
+535

+ + + + + +

/*
+536

+ + + + + +

* If there is not enough core for the
+537

+ + + + + +

* new process, swap out the current process to generate +the
+538

+ + + + + +

* copy.
+539

+ + + + + +

*/

+ + + +

ERROR 5: /usr/src/libc/v6/stat.c

+ +

Some system calls are changed from version 6 to version +7. A library of system call entries, that make a version 6 +UNIX look like a version 7 system, is provided to run some +useful version 7 utilities, like ’tar’, on +UNIX-6. The entry for ’stat’ contained two bugs: +the 24-bit file size was incorrectly converted to 32 bits +(sign extension of bit 15) and the uid/gid fields suffered +from sign extension.

+ +

Transferring files from version 6 to version 7 using +’tar’ will fail for all files for which

+ + + + +

( (size & 0100000) != 0 )

+ + + +

These two errors are fixed if stat.c is modified as +follows:

+ + + +

/* original /usr/src/libc/v6/stat.c */

+ + + + +

11

+ + + + + + + +

char os_size0;
+12

+ + + + + + + + + +

short os_size1;
+13

+ + + + + + + + + +

short os_addr[8];

+ +

49

+ + + + + + + + + +

buf->st_nlink = osbuf.os_nlinks;
+50

+ + + + + + + + + +

buf->st_uid = osbuf.os_uid;
+51

+ + + + + + + + + +

buf->st_gid = osbuf.os_gid;
+52

+ + + + + + + + + +

buf->st_rdev = 0;

+ + + +

/* modified /usr/src/libc/v6/stat.c */

+ + +

11

+ + + +

char os_size0;
+12

+ + + + + +

unsigned os_size1;
+13

+ + + + + +

short os_addr[8];

+ +

49

+ + + + + +

buf->st_nlink = osbuf.os_nlinks;
+50

+ + + + + +

buf->st_uid = osbuf.os_uid & 0377;
+51

+ + + + + +

buf->st_gid = osbuf.os_gid & 0377;
+52

+ + + + + +

buf->st_rdev = 0;

+ + +
+ + diff --git a/src/olddocs/v7bugs.pdf b/src/olddocs/v7bugs.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3ff6f73c0e5210c7c748e6be53ab789ce02199ed GIT binary patch literal 19075 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 + + + + + + + + + +
+ +

Pascal Validation Suite Report

+ +

Pascal processor identification

+ + + + + +
+

The ACK-Pascal compiler produces code for an EM machine +as defined in [1]. It is up to the implementor of the EM +machine whether errors like integer overflow, undefined +operand and range bound error are recognized or not. +Therefore it depends on the EM machine implementation +whether these errors are recognized in Pascal programs or +not. The validation suite results of all known +implementations are given.

+ +

There does not (yet) exist a hardware EM machine. +Therefore, EM programs must be interpreted, or translated +into instructions for a target machine. The following +implementations currently exist:

+
+ + + + + +
+

Implementation 1: an interpreter running on a PDP-11 +(using UNIX). The normal mode of operation for this +interpreter is to check for undefined integers, overflow, +range errors etc.

+ +

Implementation 2: a translator into PDP-11 instructions +(using UNIX). Less checks are performed than in the +interpreter, because the translator is intended to speed up +the execution of well-debugged programs.

+ +

Test Conditions

+ + + + + +
+

Tester: E.G. Keizer
+Date: October 1983
+Validation Suite version: 3.0

+ +

The final test run is made with a slightly modified +validation suite.

+ +

Erroneous programs

+ + + + + +
+

Some test did not conform to the standard proposal of +February 1979. It is this version of the standard proposal +that is used by the authors of the validation suite.

+
+ + + + + +
+

Test 6.6.3.7-4:

+ + + + + +
+

The semicolon between high and integer on line 17 is +replaced by a colon.

+
+ + + + + +
+

Test 6.7.2.2-13:

+ + + + + +
+

The div operator on line 14 replaced by mod.

+ +

Conformance tests

+ + + + + +
+

Number of tests passed = 150
+Number of tests failed = 6

+ +

Details of failed tests

+ + + + + +
+

Test 6.1.2-1:

+ + + + + +
+

Character sequences starting with the 8 characters +’procedur’ or ’function’ are +erroneously classified as the word-symbols +’procedure’ and ’function’.

+
+ + + + + +
+

Test 6.1.3-2:

+ + + + + +
+

Identifiers identical in the first eight characters, but +differing in ninth or higher numbered characters are treated +as identical.

+
+ + + + + +
+

Test 6.5.1-1:

+ + + + + +
+

ACK-Pascal requires all formal program parameters to be +declared with type file.

+
+ + + + + +
+

Test 6.6.6.5-1:

+ + + + + +
+

Gives run-time error eof seen at call to eoln. A have a +hunch that this is a error in the suit.

+
+ + + + + +
+

Test 6.6.4.1-1:

+ + + + + +
+

Redefining the names of some standard procedures leads to +incorrect behaviour of the runtime system. In this case it +crashes without a sensible error message.

+
+ + + + + +
+

Test 6.9.3.5.1-1:

+ + + + + +
+

This test can not be translated by our compiler because +two non-identical variables are used in the same block with +the same first eight characters. The test passed after +replacement of one of those names.

+ +

Deviance tests

+ + + + + +
+

Number of deviations correctly detected = 120
+Number of tests not detecting deviations = 20

+ + + + + +
+

Details of deviations

+ + + + + +
+

The following tests are compiled without a proper error +indication although they do not conform to the standard.

+
+ + + + + +
+

Test 6.1.6-5:

+ + + + + +
+

ACK-Pascal allows labels in the range 0..32767. A warning +is produced when testing for deviations from the +standard.

+
+ + + + + +
+

Test 6.1.8-5:

+ + + + + +
+

A missing space between a number and a word symbol is not +detected.

+
+ + + + + +
+

Test 6.2.2-8:

+ + + + + +
+

Test 6.3-6:

+ + + + + +
+

Test 6.4.1-3:

+ + + + + +
+

Test 6.6.1-3:

+ + + + + +
+

Test 6.6.1-4:

+ + + + + +
+

Undetected scope error. The scope of an identifier should +start at the beginning of the block in which it is declared. +In the ACK-Pascal compiler the scope starts just after the +declaration, however.

+
+ + + + + +
+

Test 6.4.3.3-7:

+ + + + + +
+

The values of fields from one variant are accessible from +another variant. The correlation is exact.

+
+ + + + + +
+

Test 6.6.3.3-4:

+ + + + + +
+

The passing as a variable parameter of the selector of a +variant part is not detected. A runtime error is produced +because the variant selector is not initialized.

+
+ + + + + +
+

Test 6.8.2.4-2:

+ + + + + +
+

Test 6.8.2.4-3:

+ + + + + +
+

Test 6.8.2.4-4:

+ + + + + +
+

Test 6.8.2.4-5:

+ + + + + +
+

Test 6.8.2.4-6:

+ + + + + +
+

The ACK-Pascal compiler does not restrict the places from +where a jump to a label by means of a goto-statement is +allowed.

+
+ + + + + +
+

Test 6.8.3.9-5:

+ + + + + +
+

Test 6.8.3.9-6:

+ + + + + +
+

Test 6.8.3.9-7:

+ + + + + +
+

Test 6.8.3.9-16:

+ + + + + +
+

There are no errors produced for assignments to a +variable in use as control-variable of a +for-statement.

+ + + + + +
+

Test 6.8.3.9-8:

+ + + + + +
+

Test 6.8.3.9-9:

+ + + + + +
+

Use of a controlled variable after leaving the loop +without intervening initialization is not detected.

+ +

Error handling

+ + + + + +
+

The results depend on the EM implementation.

+ +

Number of errors correctly detected =

+ + + + + +
+

Implementation 1: 32
+Implementation 2: 17

+ + + + + +
+

Number of errors not detected =

+ + + + + +
+

Implementation 1: 21
+Implementation 2: 36

+ + + + + +
+

Number of errors incorrectly detected =

+ + + + + +
+

Implementation 1: 2
+Implementation 2: 2

+ + + + + +
+

Details of errors not detected

+ + + + + +
+

The following test fails because the ACK-Pascal compiler +only generates a warning that does not prevent to run the +tests.

+
+ + + + + +
+

Test 6.6.2-8:

+ + + + + +
+

A warning is produced if there is no assignment to a +function-identifier.

+ + + + + +
+

With this test the ACK-Pascal compiler issues an error +message for a legal construct not directly related to the +error to be detected.

+
+ + + + + +
+

Test 6.5.5-2:

+ + + + + +
+

Program does not compile. Buffer variable of text file is +not allowed as variable parameter.

+ + + + + +
+

The following errors are not detected at all.

+
+ + + + + +
+

Test 6.2.1-11:

+ + + + + +
+

Implementation 2: The use of an undefined integer is not +caught as an error.

+
+ + + + + +
+

Test 6.4.3.3-10:

+ + + + + +
+

Test 6.4.3.3-11:

+ + + + + +
+

Test 6.4.3.3-12:

+ + + + + +
+

Test 6.4.3.3-13:

+ + + + + +
+

The notion of ’current variant’ is not +implemented, not even if a tagfield is present.

+
+ + + + + +
+

Test 6.4.5-15:

+ + + + + +
+

Test 6.4.6-9:

+ + + + + +
+

Test 6.4.6-10:

+ + + + + +
+

Test 6.4.6-11:

+ + + + + +
+

Test 6.5.3.2-2:

+ + + + + +
+

Implementation 2: Subrange bounds are not checked.

+
+ + + + + +
+

Test 6.4.6-12:

+ + + + + +
+

Test 6.4.6-13:

+ + + + + +
+

Test 6.7.2.4-4:

+ +

If the base-type of a set is a subrange, then the set +elements are not checked against the bounds of the subrange. +Only the host-type of this subrange-type is relevant for +ACK-Pascal.

+ + + + + +
+

Test 6.5.4-1:

+ +

Implementation 2: Nil pointers are not detected.

+ + + + + +
+

Test 6.5.4-2:

+ +

Implementation 2: Undefined pointers are not +detected.

+ + + + + +
+

Test 6.5.5-3:

+ +

Changing the file position while the window is in use as +actual variable parameter or as an element of the record +variable list of a with-statement is not detected.

+ + + + + +
+

Test 6.6.2-9:

+ +

An undefined function result is not detected, because it +is never used in an expression.

+ + + + + +
+

Test 6.6.5.3-6:

+ + + + + +
+

Test 6.6.5.3-7:

+ +

Disposing a variable while it is in use as actual +variable parameter or as an element of the record variable +list of a with-statement is not detected.

+ + + + + +
+

Test 6.6.5.3-8:

+ + + + + +
+

Test 6.6.5.3-9:

+ + + + + +
+

Test 6.6.5.3-10:

+ +

It is not detected that a record variable, created with +the variant form of new, is used as an operand in an +expression or as the variable in an assignment or as an +actual value parameter.

+ + + + + +
+

Test 6.6.5.3-11:

+ +

Use of a variable that is not reinitialized after a +dispose is not detected.

+ + + + + +
+

Test 6.6.6.4-4:

+ + + + + +
+

Test 6.6.6.4-5:

+ + + + + +
+

Test 6.6.6.4-7:

+ +

Implementation 2: There are no range checks for pred, +succ and chr.

+ + + + + +
+

Test 6.6.6.5-6:

+ +

ACK-Pascal considers a rewrite of a file as a defining +occurence.

+ + + + + +
+

Test 6.7.2.2-8:

+ + + + + +
+

Test 6.7.2.2-9:

+ + + + + +
+

Test 6.7.2.2-10:

+ + + + + +
+

Test 6.7.2.2-12:

+ +

Implementation 2: Division by 0 or integer overflow +is

+ +

not detected.

+ + + + + +
+

Test 6.8.3.9-18:

+ +

The use of the some control variable in two nested for +statements in not detected.

+ + + + + +
+

Test 6.8.3.9-19:

+ +

Access of a control variable after leaving the loop +results in the final-value, although an error should be +produced.

+ + + + + +
+

Test 6.9.3.2-3:

+ +

The program stops with a file not open error. The +rewrite before the write is missing in the program.

+ + + + + +
+

Test 6.9.3.2-4:

+ + + + + +
+

Test 6.9.3.2-5:

+ +

Illegal FracDigits values are not detected.

+ +

Implementation dependence

+ + + + + +
+

Number of tests run = 14
+Number of tests incorrectly handled = 0

+ +

Details of implementation dependence

+ + + + + +
+

Test 6.1.9-5:

+ + + + + +
+

Alternate comment delimiters are implemented

+
+ + + + + +
+

Test 6.1.9-6:

+ + + + + +
+

The equivalent symbols @ for ^, (. for [ and .) for ] are +not implemented.

+
+ + + + + +
+

Test 6.4.2.2-10:

+ + + + + +
+

Maxint = 32767

+
+ + + + + +
+

Test 6.4.3.4-5:

+ + + + + +
+

Only elements with non-negative ordinal value are allowed +in sets.

+
+ + + + + +
+

Test 6.6.6.1-1:

+ + + + + +
+

Standard procedures and functions are not allowed as +parameters.

+
+ + + + + +
+

Test 6.6.6.2-11:

+ + + + + +
+

Details of the machine characteristics regarding real +numbers:

+
+ + + + +
+
beta =       2
+t =         56
+rnd =        1
+ngrd =       0
+
+
+

machep = -56
+negep = -56
+iexp = 8
+minexp = -128
+maxexp = 127
+eps = 1.387779e-17
+epsneg = 1.387779e-17
+xmin = 2.938736e-39
+xmax = 1.701412e+38

+ + + + + +
+

Test 6.7.2.3-3:

+ + + + + +
+

Test 6.7.2.3-4:

+ + + + + +
+

All operands of boolean expressions are evaluated.

+
+ + + + + +
+

Test 6.8.2.2-1:

+ + + + + +
+

Test 6.8.2.2-2:

+ + + + + +
+

The expression in an assignment statement is evaluated +before the variable selection if this involves pointer +dereferencing or array indexing.

+
+ + + + + +
+

Test 6.8.2.3-2:

+ + + + + +
+

Actual parameters are evaluated in reverse order.

+
+ + + + + +
+

Test 6.9.3.2-6:

+ + + + + +
+

The default width for integer, Boolean and real are 6, 5 +and 13.

+
+ + + + + +
+

Test 6.9.3.5.1-2:

+ + + + + +
+

The number of digits written in an exponent is 2.

+
+ + + + + +
+

Test 6.9.3.6-1:

+ + + + + +
+

The representations of true and false are ( true) and +(false). The parenthesis serve to indicate width.

+ +

Quality measurement

+ + + + + +
+

Number of tests run = 60
+Number of tests handled incorrectly = 1

+ +

Results of tests

+ + + + + +
+

Several test perform operations on reals on indicate the +error introduced by these operations. For each of these +tests the following two quality measures are extracted:

+
+ + + + + +
+

maxRE: maximum relative error
+rmsRE: root-mean-square relative error

+ + + + + +
+

Test 1.2-1:

+ +

Implementation 1: 25 thousand Whetstone instructions per +second.
+Implementation 2: 169 thousand Whetstone instructions per +second.

+ + + + + +
+

Test 1.2-2:

+ +

The value of (TRUEACC-ACC)*2^56/100000 is 1.4 . This is +well within the bounds specified in [3].
+The GAMM measure is:
+Implementation 1: 238 microseconds
+Implementation 2: 26.3 microseconds.

+ + + + + +
+

Test 1.2-3:

+ +

The number of procedure calls calculated in this test +exceeds the maximum integer value. The program stops +indicating overflow.

+ + + + + +
+

Test 6.1.3-3:

+ +

The number of significant characters for identifiers is +8.

+ + + + + +
+

Test 6.1.5-8:

+ +

There is no maximum to the line length.

+ + + + + +
+

Test 6.1.5-9:

+ +

The error message "too many digits" is given +for numbers larger than maxint.

+ + + + + +
+

Test 6.1.5-10:

+ + + + + +
+

Test 6.1.5-11:

+ + + + + +
+

Test 6.1.5-12:

+ +

Normal values are allowed for real constants and +variables.

+ + + + + +
+

Test 6.1.7-14:

+ +

A reasonably large number of strings is allowed.

+ + + + + +
+

Test 6.1.8-6:

+ +

No warning is given for possibly unclosed comments.

+ + + + + +
+

Test 6.2.1-12:

+ + + + + +
+

Test 6.2.1-13:

+ + + + + +
+

Test 6.2.1-14:

+ + + + + +
+

Test 6.2.1-15:

+ + + + + +
+

Test 6.5.1-2:

+ +

Large lists of declarations are possible in each +block.

+ + + + + +
+

Test 6.4.3.2-6:

+ +

An ’array[integer] of’ is not allowed.

+ + + + + +
+

Test 6.4.3.2-7:

+ + + + + +
+

Test 6.4.3.2-8:

+ +

Large values are allowed for arrays and indices.

+ + + + + +
+

Test 6.4.3.3-14:

+ +

Large amounts of case-constant values are allowed in +variants.

+ + + + + +
+

Test 6.4.3.3-15:

+ +

Large amounts of record sections can appear in the fixed +part of a record.

+ + + + + +
+

Test 6.4.3.3-16:

+ +

Large amounts of variants are allowed in a record.

+ + + + + +
+

Test 6.4.3.4-4:

+ +

Size and speed of Warshall’s algorithm depend on +the implementation of EM:

+ + + + + +
+

Implementation 1:
+size: 122 bytes
+speed: 5.2 seconds

+ +

Implementation 2:
+size: 196 bytes
+speed: 0.7 seconds

+ + + + + +
+

Test 6.5.3.2-3:

+ + + + + +
+

Deep nesting of array indices is allowed.

+
+ + + + + +
+

Test 6.5.3.2-4:

+ + + + + +
+

Test 6.5.3.2-5:

+ + + + + +
+

Arrays can have at least 8 dimensions.

+
+ + + + + +
+

Test 6.6.1-8:

+ + + + + +
+

Deep static nesting of procedure is allowed.

+
+ + + + + +
+

Test 6.6.3.1-6:

+ + + + + +
+

Large amounts of formal parameters are allowed.

+
+ + + + + +
+

Test 6.6.5.3-12:

+ + + + + +
+

Dispose is fully implemented.

+
+ + + + + +
+

Test 6.6.6.2-6:

+ + + + + +
+

Test sqrt(x): no errors. The error is within acceptable +bounds.

+ + + + + +
+

maxRE: 2 ** -55.50
+rmsRE: 2 ** -57.53

+ + + + + +
+

Test 6.6.6.2-7:

+ + + + + +
+

Test arctan(x): may cause underflow or overflow errors. +The error is within acceptable bounds.

+ + + + + +
+

maxRE: 2 ** -55.00
+rmsRE: 2 ** -56.36

+ + + + + +
+

Test 6.6.6.2-8:

+ + + + + +
+

Test exp(x): may cause underflow or overflow errors. The +error is not within acceptable bounds.

+ + + + + +
+

maxRE: 2 ** -50.03
+rmsRE: 2 ** -51.03

+ + + + + +
+

Test 6.6.6.2-9:

+ +

Test sin(x): may cause underflow errors. The error is +not within acceptable bounds.

+ + + + + +
+

maxRE: 2 ** -38.20
+rmsRE: 2 ** -43.68

+ + + + + +
+

Test cos(x): may cause underflow errors. The error is not +within acceptable bounds.

+ + + + + +
+

maxRE: 2 ** -41.33
+rmsRE: 2 ** -46.62

+ + + + + +
+

Test 6.6.6.2-10:

+ + + + + +
+

Test ln(x): The error is not within acceptable +bounds.

+ + + + + +
+

maxRE: 2 ** -54.05
+rmsRE: 2 ** -55.77

+ + + + + +
+

Test 6.7.1-3:

+ + + + + +
+

Test 6.7.1-4:

+ + + + + +
+

Test 6.7.1-5:

+ + + + + +
+

Complex nested expressions are allowed.

+
+ + + + + +
+

Test 6.7.2.2-14:

+ + + + + +
+

Test real division: The error is within acceptable +bounds.

+ + + + + +
+

maxRE: 0
+rmsRE: 0

+ + + + + +
+

Test 6.7.2.2-15:

+ + + + + +
+

Operations of reals in the integer range are exact.

+
+ + + + + +
+

Test 6.7.3-1:

+ + + + + +
+

Test 6.8.3.2-1:

+ + + + + +
+

Test 6.8.3.4-2:

+ + + + + +
+

Test 6.8.3.5-15:

+ + + + + +
+

Test 6.8.3.7-4:

+ + + + + +
+

Test 6.8.3.8-3:

+ + + + + +
+

Test 6.8.3.9-20:

+ + + + + +
+

Test 6.8.3.10-7:

+ + + + + +
+

Static deep nesting of function calls, compound +statements, if statements, case statements, repeat loops, +while loops, for loops and with statements is possible.

+
+ + + + + +
+

Test 6.8.3.2-2:

+ + + + + +
+

Large amounts of statements are allowed in a compound +statement.

+
+ + + + + +
+

Test 6.8.3.5-12:

+ + + + + +
+

The compiler requires case constants to be compatible +with the case selector.

+
+ + + + + +
+

Test 6.8.3.5-13:

+ + + + + +
+

Test 6.8.3.5-14:

+ + + + + +
+

Large case statements are possible.

+
+ + + + + +
+

Test 6.9-2:

+ +

Recursive IO on the same file is well-behaved.

+ + + + + +
+

Test 6.9.1-6:

+ +

The reading of real values from a text file is done with +sufficient accuracy.

+ + + + + +
+

maxRE: 2 ** -54.61
+rmsRE: 2 ** -56.32

+ + + + + +
+

Test 6.9.1-7:

+ + + + + +
+

Test 6.9.2-2:

+ + + + + +
+

Test 6.9.3-3:

+ + + + + +
+

Test 6.9.4-2:

+ + + + + +
+

Read, readln, write and writeln may have large amounts of +parameters.

+
+ + + + + +
+

Test 6.9.1-8:

+ + + + + +
+

The loss of precision for reals written on a text file +and read back is:

+ + + + + +
+

maxRE: 2 ** -53.95
+rmsRE: 2 ** -55.90

+ + + + + +
+

Test 6.9.3-2:

+ + + + + +
+

File IO buffers without trailing marker are correctly +flushed.

+
+ + + + + +
+

Test 6.9.3.5.2-2:

+ + + + + +
+

Reals are written with sufficient accuracy.

+ + + + + +
+

maxRE: 0
+rmsRE: 0

+ +

Level 1 conformance tests

+ + + + + +
+

Number of test passed = 4
+Number of tests failed = 1

+ +

Details of failed tests

+ + + + + +
+

Test 6.6.3.7-4:

+ + + + + +
+

An expression indicated by parenthesis whose value is a +conformant array is not allowed.

+ +

Level 1 deviance tests

+ + + + + +
+

Number of deviations correctly detected = 4
+Number of tests not detecting deviations = 0

+ +

Level 1 error handling

+ + + + + +
+

The results depend on the EM implementation.

+ +

Number of errors correctly detected =

+ + + + + +
+

Implementation 1: 1
+Implementation 2: 0

+ + + + + +
+

Number of errors not detected =

+ + + + + +
+

Implementation 1: 0
+Implementation 2: 1

+ + + + + +
+

Details of errors not detected

+ + + + + +
+

Test 6.6.3.7-9:

+ + + + + +
+

Implementation 2: Subrange bounds are not +checked.

+ +

Level 1 quality measurement

+ + + + + +
+

Number of tests run = 1

+ +

Results of test

+ + + + + +
+

Test 6.6.3.7-10:

+ + + + + +
+

Large conformant arrays are allowed.

+ +

Extensions

+ + + + + +
+

Number of tests run = 3

+ +

Details

+ + + + + +
+

Test 6.1.9-7:

+ + + + + +
+

The alternative relational operators are not allowed.

+
+ + + + + +
+

Test 6.1.9-8:

+ + + + + +
+

The alternative symbols for colon, semicolon and +assignment are not allowed.

+
+ + + + + +
+

Test 6.8.3.5-16:

+ + + + + +
+

The otherwise selector in case statements is not +allowed.

+ +

References

+ +

[1] A.S.Tanenbaum, E.G.Keizer, J.W.Stevenson, Hans van +Staveren, "Description of a machine architecture for +use with block structured languages", Informatica +rapport IR-81. [2] ISO standard proposal ISO/TC97/SC5-N462, +dated February 1979. The same proposal, in slightly modified +form, can be found in: A.M.Addyman e.a., "A draft +description of Pascal", Software, practice and +experience, May 1979. An improved version, received March +1980, is followed as much as possible for the current +ACK-Pascal. [3] B. A. Wichman and J du Croz, A program to +calculate the GAMM measure, Computer Journal, November +1979.

+
+ + diff --git a/src/olddocs/val.pdf b/src/olddocs/val.pdf new file mode 100644 index 0000000000000000000000000000000000000000..66a69dd665c3b8b168e9a903def47ea7b0e2d678 GIT binary patch literal 35448 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 + + + + + +THE Z80 BACK END TABLE + + + +

THE Z80 BACK END TABLE

+1. INTRODUCTION
+2. IMPLEMENTATION
+ +
+ +

1. INTRODUCTION

+ +

This table was written to make it run, not to make it +clever! The effect is, that the table written for the intel +8080, which was made very clever runs faster and requiers +less space!! So, for anyone to run programs on a z80 +machine: n attempt could be made to make this table as +clever as the one for the i80, or the i80 table could be +used, for that can run on every z80 too.

+ +

2. IMPLEMENTATION

+ +

It will not be possible to run the entire Amsterdam +Compiler Kit on a Z80-based computer system. One has to +write a program on another system, a system where the +compiler kit runs on. This program may be a mixture of +high-level languages, such as C or Pascal, EM and z80 +assembly code. The program should be compiled using the +compiler kit, producing z80 machine code. This code should +come available to the z80 machine for example by downloading +or by storing it in ROM (Read Only Memory). Depending on the +characteristics of the particular z80 based system, some +adaptions have to be made:

+ + + + + + +
+ +

1)

+
+ +

In head_em: the base address, which is the +address where the first z80 instruction will be stored, and +the initial value of the stackpointer are set to 0x1000 and +0x7ffe respectivally. The latter because it could run on a +32K machine as well. Other systems require other values.

+
+ + + + + + +
+ +

2)

+
+ +

In head_em: before calling "__m_a_i_n", +the environment pointer, argument vector and argument count +will have to be pushed onto the stack. Since this back-end +is tested on a system without any knowledge of these things, +dummies are pushed now.

+
+ + + + + + +
+ +

3)

+
+ +

In tail_em: proper routines "putchar" +and "getchar" should be provided. They should +write resp. read a character on/from the monitor. Maybe some +conversions will have to be made. The ones for the Nascom +and Hermac z80 micro’s are to be found in the +EM-library.

+
+ + + + + + +
+ +

4)

+
+ +

In head_em: an application program returns +control to the monitor by jumping to address 0x20. Thie may +have to be changed on different systems. For an CPM-machine +for example this should be 0x5, to provide a warm boot.

+
+ + + + + + +
+ +

5)

+
+ +

In tail_em: the current version of the z80 +back-end has very limited I/O capabilities, because it was +tested on a system that had no knowlegde of files. So the +implementation of the EM-instruction mon is very +simple; it can only do the following things:

+
+ + + + + +
+
        Monitor call 1:
+
+
+ + + + + + + + +
+ +

Exit

+
+
+ + + + + +
+

Monitor call 3:

+ + + + + + + + + + + + + + + + + +
+ +

read, always reads from the monitor.

+
+
+ +

echos the read character.

+
+
+ +

ignores file descriptor.

+
+
+ + + + + +
+

Monitor call 4:

+ + + + + + + + + + + + +
+ +

write, always writes on the monitor.

+
+
+ +

ignores file descriptor.

+
+
+ + + + + +
+

Monitor call 5:

+ + + + + + + +
+ +

open file, returns file descriptor -1.

+
+
+ + + + + +
+

Monitor call 6:

+ + + + + + + +
+ +

close file, returns error code = 0.

+
+
+ + + + + +
+

Monitor call 54:

+ + + + + + + +
+ +

io-control, returns error code = 0.

+
+
+ + + + + +
+

If the system should do file-handling the routine +".mon" should be extended thoroughly.

+
+
+ + diff --git a/src/olddocs/z80.pdf b/src/olddocs/z80.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7ce244544deb12227ce4543924be7ac3088f196a GIT binary patch literal 18452 zcmcJ%1zgly_b*I$DBTPt%`kLGm!wEH5<_=`AT0>e(%ndRNlPjrARy8m(hU-K29M`> z&U2psz3=O4}H@fF;2u_NHKAVKiqKC$Nz%nnzl`){N7akN7_4np`cC zaYvzhlj&*{ek-aE*dMWbqUJF~6bR)8vIXWH(k(a$3s|2^jlIEqoTrCa|K(dN(7K|v zxt((ly?3kc*6@q@!bpbCo9TLyAHzW}*KV1u&YXf1#o4K*x331hsgv+#H^c^UVy-NE zHBOToynH%u)1A(os;*XS25$JwN|ssVZdl?j%U-rXQA5H7-e$2qUY*yKEqiRe%->GK~5#zS8&`$Rq&qiwN zS18Ck80T~1f3`;bAequ(3p3roa{1G>WcOsgg!6EUo5Om)p;lZog%%;0zL%Dm`H=~O zIFl`Yi`;YoTKeVJ5u6|E(h*z15nP{2_1_b7ObQv5q#NL)WSS4>H5bUdrko~IaT-LP zDkjpJ&a5#?{BW1<^tu|g*-mg5vkUoFWmS^|p5wKG+g55dv09Hx#*wqzd*<+TrP`4u z48|GPwr4wLRMbyh&r3!92y`EbKg?ZxEP$qRC5t13^5uK8Hc}U0uy>FGrqWt%L=Uu;gS&+5STqE*7=<24DK8PLAYyhhumfRRL{_%`V)N^QA( z9Fs`)`bl*ET8KMgBH_NKTf4%3qF*){RhyP#H{DH@J%thRb8fzzWCX@6pLvX(`ckGL z_)xEfGap&cN|YRoVlxK89)m9kqlyMKnzpS#=8jWaexd`v&xzm3h$U{fZ~U`n7fd|M za`iu21W-IZZPR2J#d_W${G}EKDLek4h_x$y&SI4eIAm|3im2IN(#3y>spRrS#x~a- zUGzjdt%+ypHLBY9yP2HfeN3XAZv%psC}xUS6Kiu09d5haGx0NXM+gmoJ9fpV4y3Y| zl~?NAlZ;Yuk_iH$8$)N&_V`JqB7VNn(V7U8*qf$(5>f`~HR19@m_gYs`|7Rb9Zz

Sb)&0*hgd0 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 + + + + + + + + + + + + + + + + + + + + + / + + + + .html + + + + + + + + + + + + +

  • + + + selected + + + + +
  • + + + + + +

    Page Group

    +
      + + + +
    +
    + + + + + + +

    Child Pages

    +
      + + + +
    +
    +
    + + + + + +
    + + + + + + +
    + +
    +
    + + + + +
    + +
    + + + +
    + +
    +
    +
    + + + +
    + +
    +
    +
    +
    +
    +
    + + + + + + + / + + + + + + + + + + + + + + + + + + + + + + + + + + could not be resolved + + + + + + is ambiguous among ( + + + + + ) + + + + + + + + + Unsupported tag + + + + diff --git a/tpl/_htmlx.xslt b/tpl/_htmlx.xslt new file mode 100644 index 000000000..dc8bf02bb --- /dev/null +++ b/tpl/_htmlx.xslt @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    + + + + + + + + + [An SVG file goes here] + + + + + + + + + + + +

    + + + + + + +

    +
    + + + + . + + + + + + . + + . + + + + + + . + + . + + . + + + + + + + + + ... + + + + ...... + + + + + + . + + + + + + . + + + + + + . + + + + + + + + + + Unsupported tag + + + +
    diff --git a/tpl/standard.xslt b/tpl/standard.xslt new file mode 100644 index 000000000..be914180f --- /dev/null +++ b/tpl/standard.xslt @@ -0,0 +1,115 @@ + + +]> + + + + + + + + + + + + + + + + <xsl:value-of select="html/head/title"/> + + + + + + + + + + + + + + + + + +
    +

    + +

    +
    + +
    + + +

    + + +
    +

    Page Contents

    + +
    +
    + + + + + + +
    + + +
    + + +
  • + + + # + + + + + + +
      + +
    +
    +
  • +
    + + +
    -- 2.34.1