188 Commits

Author SHA1 Message Date
cvs2hg
6555bf6893 fixup commit for branch 'hs' 1985-02-26 15:05:52 +00:00
em
bd796849ef Added some xtra output for Henk Schouten's debugger. 1985-02-26 15:04:08 +00:00
cvs2hg
9afbc0ad32 fixup commit for branch 'hs' 1984-10-23 15:02:04 +00:00
sater
a5c07a52b4 changed EM_WSIZE to TEM_WSIZE 1984-10-23 15:02:03 +00:00
sater
43c97f0d41 added -h and -c flags, to change names of tables.h and tables.c respectively
now also takes an argument instead of stdin.
EM_BSIZE is now compulsory again.
Constants EM_?SIZE are passed on to cg with a T prepended (T for target)
1984-10-23 13:39:15 +00:00
sater
24eeca9474 Changed to use -h flag to cgg and better way of preserving old tables.h
if not changed. Nice huh, Andy?
1984-10-23 13:29:41 +00:00
sater
7eef0e0b59 added rcsid(again). Who took that away? 1984-10-16 13:45:16 +00:00
sater
9d03cb68c7 added code to generate code for ACK assembler.
Works if ACK_ASS is defined.
1984-10-16 13:31:44 +00:00
ceriel
d89d5770b1 Had forgotten to initialise the line number on which a nonterminal
symbol occurred first.
1984-10-12 14:19:34 +00:00
ceriel
f6d9a497eb No changes 1984-10-11 21:35:58 +00:00
ceriel
bac12b0c46 The former version gave a fatal error message at the first undefined
nonterminal. The new version checks all nonterminals
1984-10-11 10:35:01 +00:00
ceriel
e13ebaad9e The routine findpath did not work. It used the same static buffer for
several calls. Now it uses alloc.
1984-10-09 11:43:19 +00:00
em
315806b282 Initial revision 1984-10-09 10:36:29 +00:00
ceriel
43de6c3b78 added "#ifdef NORCSID" 1984-10-09 10:16:33 +00:00
ceriel
0ec009bde2 Added some comments and removed some Lint complaints 1984-10-09 10:13:46 +00:00
ceriel
0f8a2d3a39 Initial revision 1984-10-09 09:47:14 +00:00
ceriel
b5402db333 The routine LLmessage did not insert tokens properly.
This is corrected now.
1984-10-09 09:33:37 +00:00
ceriel
4f5c40c608 Changed RCSid 1984-10-08 17:11:03 +00:00
ceriel
2055a65cae Added RCSid. 1984-10-08 16:21:03 +00:00
ceriel
ed6a7245bd Adapted the libpath routine to use EM_DIR from ../../../h/em_path.h 1984-10-08 15:58:23 +00:00
ceriel
2cd6c03840 Added entry for LLgen. 1984-10-08 15:20:54 +00:00
ceriel
c38d1013cb Initial revision 1984-10-08 15:19:18 +00:00
ceriel
6da013b55a Added entry for LLgen documentation. 1984-10-08 15:00:23 +00:00
ceriel
e3eae54592 Initial revision 1984-10-08 14:51:38 +00:00
ceriel
7cc3184392 Initial revision 1984-10-08 14:24:19 +00:00
ceriel
952ba464cc Initial revision 1984-10-08 14:14:53 +00:00
keie
08b7ec6600 Initial revision 1984-10-08 14:11:42 +00:00
keie
f918aa20fe New installation procedure:
1 - New place for binaries and libraries in the ACK tree.
2 - The ranlib action is moved to ../../install which tries it at
    every action.
1984-10-08 14:09:28 +00:00
bal
54bac1caaf bug fixed: generate "add.l #65536,a1" rather than "lea 65536(a1),a1".
The latter form is only generated for constants that fit in a word.
1984-10-08 12:45:38 +00:00
keie
504da3a54d Altered the test path lib/n_ack into the normal path ACK_PATH. 1984-10-05 15:07:47 +00:00
keie
36cca2b9c7 Added a priority associated with each phase. Paths with the highest
total priority have preference.
1984-10-05 13:34:38 +00:00
keie
6f8a00ee5c 1 - Added some debugging for linker flags.
2 - Setting of NEEDS and RTS is moved to main.c.
3 - Added recognition of -Rphase:[-]number for dynamic priority setting.
1984-10-05 13:31:40 +00:00
keie
ca275f5d22 1 - Most flags used by ack itself are now also passed to the phases
for recognition with mapflag.
2 - A few bugs are removed in connection with argument passing to the
    linker (unrecognized flags and libraries).
3 - The setting of RTS, HEAD and TAIL is done directly after the
    path determination for each file.
1984-10-05 13:28:56 +00:00
keie
150c8164af Removed the defines needed by util/ack/em_pc.c.
These defaults are now provided in lib/ack/fe.
1984-10-04 11:11:30 +00:00
keie
70975146a1 1 - Added RCS identification.
2 - Removed the default for compiler and error file pathname.
    These are now always supplied by the callee.
1984-10-04 11:08:42 +00:00
keie
962cc80686 Corrected a small bug in the pc mapflags. 1984-10-04 10:54:11 +00:00
keie
f6ecbec936 1- Added RCS identification.
2- The pathnames of the Pascal compiler and Compile time-error file
   are now always explicitly passed to em_pc.
1984-10-04 10:47:03 +00:00
keie
8128e3d82d Altered to reflect the changes in em_path.h.
Now dynamically concatenes EM_DIR and error path.
1984-10-04 10:42:13 +00:00
keie
ea86ccd217 Altered the description of EM_HOME in em_path.h to that of
EM_DIR.
1984-10-02 16:24:59 +00:00
sater
045ccfaeba added missing cast at call to regsave, in ms_gto case 1984-10-02 11:17:57 +00:00
sater
a6b69be622 changed definition of myalloc to extern 1984-10-02 10:31:06 +00:00
sater
50d77d903a added external definition for myalloc() 1984-10-02 10:30:44 +00:00
keie
cbf6d06de2 Bug removed: the trailing zero at the end of a growstring was not
explicitly written in doassign(trans.c).
Only luck kept the program together.
1984-10-01 17:42:56 +00:00
keie
bb0ff814f6 Nill pointers are not allowed in CSA descriptors any more. 1984-10-01 16:05:17 +00:00
keie
f80b30bdbb Null pointer are not allowed any more for in-bound indeces in the CSA
table.
1984-10-01 14:54:09 +00:00
keie
7f6105c294 Initial revision 1984-09-25 16:33:15 +00:00
keie
1f59bd7223 Added National semiconductor assembler. 1984-09-25 16:32:45 +00:00
em
8f7669b247 1 - A few minor syntactic changes.
2 - Altered the description of strings as initializers. (sequence of U1's).
1984-09-25 11:06:29 +00:00
keie
f950163854 Made the buffer long enough for the machine state on most machines. 1984-09-24 15:18:20 +00:00
keie
38b8391594 Initial revision 1984-09-24 15:18:07 +00:00
keie
e88fe13466 Initial revision 1984-09-24 14:10:23 +00:00
em
e29ef2395a Compile-time option GLOBAL_OPT defined. If set, the resulting
peephole optimizer will be suitable for optimizing the output of
the global optimizer. In particular, it doesn't change the register
messages.
1984-09-14 10:25:07 +00:00
keie
546bcee023 1 - The prop keyword with is flags is now obsolete. Its function is
taken over by several other keywords: stdin, stdout, prep, optimizer,
    combiner and linker.
2 - The search order is changed. First {EM}/lib/{M}/descr, then
    {EM}/lib/ack/{M}, finally {M}.
1984-09-13 14:40:09 +00:00
keie
a9beb24998 The t_do bits are not set by this module. The t_next entry is used
to see whether the scan for this phase is already done.
t_do is now set in add_inputs(files.c).
1984-09-13 14:35:02 +00:00
keie
96da898a4a 1 - The t_do flags is now set by add_inputs(files.c).
2 - Recognize the fact that it is possible to start a combiner without
    input files.
3 - Removed -d flag. Overflow for -v (>2) now ends up in debug.
    -v may be followed by a number indicating the increment.
1984-09-13 11:07:46 +00:00
keie
a69b503ad0 1 - The outfile entry is only used when the output file must not be thrown
away.
2 - If a combiner has no named input file (only libs+flags) then issue
    a warning message and make up a name.
1984-09-13 11:04:00 +00:00
bal
5fd55904ec pem did not generate a register message for var-parameters of
array- or record type. The routine "treewalk" is modified.
It generates a register message for every var-parameter, even
if it has its noreg-flag set.
1984-09-12 13:21:43 +00:00
bal
195c808f88 unlk a6 added to restr(). 1984-09-11 15:44:14 +00:00
keie
50e3b4fe4a Added ego, basic and callname conventions. 1984-09-10 17:34:04 +00:00
keie
f366afdae1 No comment. 1984-09-10 16:51:02 +00:00
keie
c08fe56b97 Combiners (ego, linkers) now use a list of path's(ack.h) to indicate
their input files.
Unmatched flags are now sent to the linker.
1984-09-10 16:48:57 +00:00
keie
ed3db93f56 1 - A transformation is succesfull when
a - a stopsuffix is indicated and met,
    b - the last transformation is included in the transformation path.
2 - Maintains a 'cash' of best paths for all transformation to be executed.
1984-09-10 16:46:13 +00:00
keie
71dc6af5a8 The input file names of the linker are to be found in a different place. 1984-09-10 16:45:12 +00:00
keie
cfdc2ce05f 1 - added keywords callname and outfile. See manual.
2 - multiple combiners are allowed now.
3 - A different search mechanism is used for finding descriptor files.
1984-09-10 16:42:55 +00:00
keie
845c92825a 1 - callname recognition is moved to rmach.c.
2 - The overall scheme is altered.
	first, all input files are processed until a combining phase is met.
	then, all the combining phases are executed, the resulting files
	are again processed until a combiner (or final) phase is met.
3 - The EM_DIR shell variable can be used to set ack's idea of the EM
    home directory.
1984-09-10 16:37:11 +00:00
keie
3adba1b759 1 - The names of temporary files are now Ack'hex''unique'.'suffix'.
'hex' is the pid of the current invocation of ack in hex.
    'unique' is a tail unique to this invocation.
2 - The outfile field is used to indicate default naming, can be ovrrriden
    by the -o flag.
3 - Added handling for phases with multiple inputs (ego, linker).
1984-09-10 16:33:03 +00:00
keie
ea6c20f5d1 The role of the combiner is -partially- assumed by the linker.
Linker arguments are now part of the transformation structure.
Temp file nameing is changed.
1984-09-10 16:30:47 +00:00
keie
d99b36abf8 Naming of the tempname is changed (see files.c). 1984-09-10 16:29:37 +00:00
keie
93693877be Initial revision 1984-09-03 13:49:40 +00:00
sater
2aa5c6b7d9 Variable nregvars had a name clash with the array nregvar[] in the
file tables.c. That was different in the 8'th character (!"#$%&'()_).
These variables should actually be static.
1984-08-23 17:07:53 +00:00
keie
bbc3cb33cc We do not use the missing " trick anymore.
The root directory of the EM tree is in the name EM_DIR, the
root directory for tempfiles is in TMP_DIR.
All other path's are relative to EM_DIR.
1984-08-23 13:33:11 +00:00
keie
77ebfceac5 The ACK tree on the vax has as default machine 'vax2'. 1984-08-23 13:27:14 +00:00
keie
3d10bd6e59 The missing trailing " trick is now also used for TMP_DIR. 1984-08-23 13:26:44 +00:00
keie
03a31cf3fc The ms_gto is added. This is a trick used to indicate procedures
jumped to with gto.
1984-08-23 13:25:44 +00:00
keie
81267df9ad *** empty log message *** 1984-08-23 13:20:59 +00:00
keie
113cf23e0f Initial revision 1984-08-23 13:18:14 +00:00
keie
3154365fff Initial revision 1984-08-23 13:00:32 +00:00
sater
e006f1ec29 increased MAXNODES in small memory mode 1984-08-23 12:25:24 +00:00
sater
1c36c470db Increased the amount of information passed through error routines
to printf. The routine badassert, running on a 2/4 machine lost it's
last argument on the way.
Anyone know of a better way to solve this problem?
1984-08-17 15:35:28 +00:00
keie
1da13e49e1 Added comment. 1984-08-17 14:57:31 +00:00
keie
f077a39568 Added RCS identification. 1984-08-17 14:44:24 +00:00
sater
6474db065f Revised to include rcsid of pattern file in binary opt 1984-08-16 16:08:39 +00:00
sater
10b16f7c76 enlarged string table in big memory case 1984-08-16 13:34:59 +00:00
sater
1ff6c3236f added patterns to prevent stacking in *p++ cases 1984-08-15 16:05:54 +00:00
sater
19b13e8e4f added patterns to remove some more dup's 1984-08-15 16:04:19 +00:00
sater
e5d1aebbae added patterns for inc/dec/adp of local and external offsetted
This makes the getc() macro from C very efficient, among others
1984-08-15 14:31:54 +00:00
sater
b23de46c3a added patterns to remove as many dup's as possible. 1984-08-15 14:23:42 +00:00
sater
9bdd1abf9a added definition of malloc().
Program crashed on 2/4 machines
1984-08-08 10:54:04 +00:00
sater
6180399964 reworked patterns for autoincrement stores, now that peephole optimizer
rearranged it.
1984-08-07 10:22:49 +00:00
sater
db0822fa37 added patterns for *p++ local and external p
added pattern to remove some badly placed dups
1984-08-03 16:37:15 +00:00
sater
11026ace27 added setcc calls to some incrementing ops
added patterns for indirect local and external increments
added patterns for loe ine and such
1984-08-03 16:33:40 +00:00
sater
76281fa307 removed some superfluous patterns.
Were special cases not needed with the general case.
1984-08-03 13:16:59 +00:00
sater
dbcebe6e4c A move from a nonreg to a reg did not have the effect that all
registers clashing with the destination were erased. Erase added.
1984-08-02 16:31:25 +00:00
keie
8a4d834bc6 The name "unix" is now predefined for preprocessor usage. 1984-08-02 14:13:04 +00:00
sater
925701dc62 When building the parameter list for a pf-call, the line number
for the exchanges war remembered at the wrong time.
This caused:
	foo(3,'string')
to cause an external identifier for the string. Fixed.
1984-07-31 09:39:35 +00:00
keie
385d7ffbd8 String initializer handling is changed.
Strings are now considered to be sequences of xU1's.
No alignment is done before or after the string other than the
alignment done for names and segment type switches.
1984-07-30 14:42:33 +00:00
bal
e1c24cb475 bug fixed: added "fprintf(codefile,""rts\n");" to restr() 1984-07-30 12:47:54 +00:00
bal
964976ff0b bugs fixed (syntax errors, patterns moved to front,
"ldl ldl adp sdl sti" requires DATAREG instead of ANY1 on
fakestack)
1984-07-30 11:16:41 +00:00
bal
4eea24fe69 patterns added to generate autoincrement and to generate
a "move X,d0" instead of a "move X,-(sp)" before storing into X
1984-07-27 16:53:19 +00:00
sater
811bc78f04 added rcsid 1984-07-27 10:28:48 +00:00
sater
b07af506d6 added PR* routines 1984-07-26 13:15:21 +00:00
sater
5e97bff353 Changed procedure prolog to use PR* routines. 1984-07-26 13:05:22 +00:00
keie
c001aa20d7 *** empty log message *** 1984-07-23 11:49:00 +00:00
sater
61da47ea52 removed all calls to blm~ from table
duplicated some patterns for in[lc] to deal with de[lc]
extra rule for adi 2 to deal with source1 cleverly
1984-07-23 11:29:59 +00:00
sater
d6a3a26314 removed blm.s, not used by table anymore 1984-07-20 16:20:54 +00:00
sater
eca6c1f306 edited to make reentrant, no more globals in use 1984-07-20 16:20:28 +00:00
sater
189e577315 added copyright notice 1984-07-20 13:54:36 +00:00
sater
8b9ebd989f added rcsid
adapted to new archive updating style, with LIST and march and all that
1984-07-20 11:32:47 +00:00
sater
182f3ee338 Initial revision 1984-07-20 11:25:31 +00:00
sater
8707eb1715 added rcsid 1984-07-20 11:25:18 +00:00
sater
9935b1fc88 added copyright notice 1984-07-20 11:20:12 +00:00
sater
06249087bd removed copyright notice, wasn't really *written* by us. 1984-07-20 11:07:12 +00:00
sater
5e3c08728c added rcsid 1984-07-20 11:03:31 +00:00
sater
f54556ac0f Initial revision 1984-07-20 10:44:57 +00:00
sater
1a0102783f A sti 8 of a regdef8 token went into panic mode. Fixed. 1984-07-20 10:32:48 +00:00
sater
1e5056bcc0 to check long >= 0 or long < 0 it is enough to test high order word. Added.
anding and oring of long constants is much better now
dvu 2 and rmu 2 by positive constants is now done inline.
1984-07-19 16:50:27 +00:00
sater
96e8152f11 added rcsid 1984-07-19 15:03:30 +00:00
sater
7683ff7d03 Initial revision 1984-07-19 15:01:43 +00:00
sater
309ed81674 Archive made with archiver in environment ASAR if set, arch otherwise 1984-07-19 14:55:12 +00:00
sater
badfdeb5db removed #ifdef UNTESTED around logical instructions without arguments,
seems they were used ( which implicitly means tested ) after all
1984-07-19 14:03:49 +00:00
sater
ea793ccff5 Initial revision 1984-07-19 13:52:18 +00:00
sater
3c037725e9 added rcsid 1984-07-19 13:34:12 +00:00
sater
b28024573a changed name from comparchentry to compmodule 1984-07-19 13:22:36 +00:00
sater
320c575b54 Initial revision 1984-07-19 13:20:15 +00:00
sater
1e806d2a28 old code put back, now register handling is different again
actually old code never was removed, due to a misunderstanding
about comment conventions.
1984-07-19 13:12:03 +00:00
sater
18d72ffde3 makefile adapted to new style archive handling, RCS and all that 1984-07-19 13:11:36 +00:00
sater
53c19368d5 a setl instruction was changed to a setd
setl was just plain wrong
1984-07-19 13:09:53 +00:00
sater
fa6f4b86e3 Initial revision 1984-07-19 12:51:00 +00:00
bal
0f199294ae rcsid added 1984-07-19 11:50:29 +00:00
bal
ff6056a6b6 Initial revision 1984-07-19 11:50:28 +00:00
sater
92c1e38b42 Initial revision 1984-07-19 11:50:18 +00:00
bal
8bbb3ddca7 New implementation of GTO (without register save masks)
several optimizations added
1984-07-19 11:15:28 +00:00
bal
8fef858ce8 New implementation of GTO (without register save masks) 1984-07-19 11:07:15 +00:00
bal
39428d2028 rcsid added
several optimizations added
1984-07-19 11:02:06 +00:00
bal
e5895a2768 rcsid added
clr.w -(sp) generated in prolog if register save mask is 0
1984-07-19 10:57:19 +00:00
bal
250f0df7f7 Initial revision 1984-07-19 10:03:10 +00:00
bal
85c15fca29 Initial revision 1984-07-19 09:37:24 +00:00
sater
3422e2338c added patterns for ldc adi/ldc sbi with zero high order word
added patterns for *--p with p register
added patterns to generate cmpb to compare two bytes.
added patterns to use regvar to index global array
added patterns for lol inl
added patterns for external pointer increment/decrement
1984-07-18 16:47:24 +00:00
sater
e92ac2c6d3 The patterns to change a cii to cuu when dealing with a known positive
quantity was technically wrong. Changed to generate a cui.
1984-07-18 15:54:25 +00:00
sater
35fbddd030 added definition of index, to keep compiler happy 1984-07-18 14:14:46 +00:00
sater
c65b0f7044 removed recursive comments
removed NC with sti rules
added rule to reverse operands of adi 2
added rule to convert loc sbi to loc adi
added loc slu -> loc sli rule
added local++ rule
added rule for asping xsource2
added rule for csb when nothing on stack
1984-07-18 13:39:24 +00:00
sater
84fca60378 added rcsid
changed instruction label format to allow more than 256 procedures
1984-07-18 13:32:11 +00:00
sater
7c5508ddbd changed instruction label format to allow more than 256 procedures 1984-07-18 13:28:01 +00:00
sater
d33e4ac474 added rcsid
converted to recognize and generate new 0%o format
1984-07-18 13:14:18 +00:00
sater
0a4d372056 added patterns for unsigned shifting
added patterns to delay additive operations until after multiplicative,
  this can be useful for some register machines
1984-07-18 11:05:28 +00:00
sater
f98fe503a0 Improved error handling on unterminated strings 1984-07-18 11:04:58 +00:00
sater
4410480e32 added -f flags to all calls to rm 1984-07-16 15:29:48 +00:00
sater
97b50be407 added special patterns for:
1) long compared to constant ( ldc cms 4 zxx )
2) long increments ( ld? ldc adi 4 sd? )
3) autoincrement loads and stores ( lol lol adp stl loi/sti )
1984-07-16 14:39:21 +00:00
keie
f3d3393af3 *** empty log message *** 1984-07-16 09:36:12 +00:00
keie
32f55c5462 Added z8000 assembler manual. 1984-07-16 09:32:22 +00:00
sater
42c556cc1f added missing #endif
added two patterns, big improvement
added patterns for ciu and cui
some cosmetic change
1984-07-13 16:13:56 +00:00
keie
edcf39e999 *** empty log message *** 1984-07-13 15:20:58 +00:00
keie
ac940fe687 Added lines for DECUS cpp manual. 1984-07-13 15:19:19 +00:00
keie
a618660635 The check for a too high offset in a hol is repaired. 1984-07-13 15:03:05 +00:00
keie
965a2fa352 A bug in the exchange was repaired.
Exchanges across pseudo-instructions didn't work properly.
1984-07-13 15:01:23 +00:00
sater
d8238383ca Removed some patterns that have never been tested.
Now if someone uses them he will hear that it doesn't work.
That must be better then giving him code that probably won't work.
All these patterns had to do with things like adf without an argument
and things like that.
1984-07-13 14:55:37 +00:00
sater
f33edd402e Initial revision 1984-07-13 11:25:46 +00:00
sater
a4f3d3c503 Initial revision 1984-07-13 11:12:23 +00:00
sater
d1994a651b changed format of rcsid message 1984-07-12 15:18:13 +00:00
sater
ba79fb2a37 Initial revision 1984-07-12 15:16:23 +00:00
sater
743bbb551f added rcsid 1984-07-12 14:55:49 +00:00
sater
df7b70c37e changed explanation of .base pseudo
added rcsid
1984-07-12 14:55:22 +00:00
sater
58170d17d2 added rcsid
added lines for formatting new manuals
1984-07-12 14:53:30 +00:00
sater
b758fc47aa *** empty log message *** 1984-07-12 14:51:48 +00:00
sater
d608d58ad1 Initial revision 1984-07-12 14:14:54 +00:00
sater
cb1d7f7e96 *** empty log message *** 1984-07-12 14:08:27 +00:00
sater
0ae1957f80 added rcsid 1984-07-12 14:07:14 +00:00
sater
3671970cc5 added rcsid
added compilation of tstgto.p
1984-07-12 14:05:03 +00:00
sater
463090c3a4 Initial revision 1984-07-12 13:50:44 +00:00
keie
e1666e49b0 asprint is removed at cleanup time. 1984-07-12 13:24:02 +00:00
keie
3d2f1d3690 1 - Dump has a parameter.
2 - Dump are enabled.
1984-07-12 13:23:03 +00:00
keie
06a8899eec 1 - A header is treated as an unsigned number.
2 - The low order word of the size in archives is fetched as unsigned.
3 - Sizes are unsigned.
1984-07-12 13:20:48 +00:00
keie
3565805b63 Parameter added to dump preprocessor variable. 1984-07-12 12:58:18 +00:00
keie
207bd9dcf7 1 - Header fetch was changed to unsigned.
2 - Extra parentheses are needed by some compilers.
1984-07-12 12:57:36 +00:00
keie
e2482166f7 Initial revision 1984-07-12 12:48:33 +00:00
sater
af88eafe02 removed REGPATCH define 1984-07-12 11:03:18 +00:00
sater
8f9fb0ad77 added definition of newplb()
removed a tab from some string
1984-07-12 11:02:44 +00:00
sater
8a6604f224 Removed unbalanced quotes in comments, needed for new cpp 1984-07-12 10:50:47 +00:00
sater
6c021a0800 reworked to use ack instead of npc.
made more user-friendly (ha ha)
1984-07-12 10:42:33 +00:00
sater
2eeeba3225 Now lexical analyzer skips lines starting with #
to kill off remnants of some preprocessor.
1984-07-12 10:18:19 +00:00
sater
c79d077c3f added description of newplb macro.
Enlarged an example.
1984-07-12 10:13:56 +00:00
sater
6a1228a5cd The sequence:
lin 100
  cal $foo
  lin 101
used to have it's second lin lni'ed. This is obviously wrong.
A check is now made for procedure calls.
1984-07-12 09:29:49 +00:00
sater
b2d4b9d42d Replaced call to newilb after pro pseudo to call to newplb,
including retrofit for existing mach.h files
1984-07-12 09:26:24 +00:00
sater
60b6d9c00d Increased MAXINSTANCE in big memory model 1984-07-12 09:23:38 +00:00
keie
00a6b2f4c6 Added the entries for instructions with 32-bit arguments. 1984-07-02 16:04:26 +00:00
keie
0a797a2688 1 - added routines to read unsigned 16-bit numbers
2 - cleanup of writing of ABS block, was in error for wordsize>4.
3 - strings are now padded up to a multiple of the wordsize.
4 - the padding algorithm for alignment was in error for wordsize>2.
1984-07-02 16:01:50 +00:00
keie
2e3eb2f103 Not in the initial distribution. 1984-07-02 15:46:59 +00:00
keie
5ce6138a58 Added asprint to list of files to remove with 'clean'. 1984-07-02 15:46:06 +00:00
8 changed files with 3154 additions and 3053 deletions

View File

@@ -1,7 +0,0 @@
/* collection of options, selected by including or excluding 'defines' */
/* Version number of the EM object code */
# define VERSION 3 /* 16 bits number */
/* The default machine used by ack, acc, apc */
# define ACKM "pdp"

View File

@@ -1,274 +0,0 @@
#ifndef NORCSID
static char rcsid[] = "$Header$";
#endif
/*
* (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
*
* This product is part of the Amsterdam Compiler Kit.
*
* Permission to use, sell, duplicate or disclose this software must be
* obtained in writing. Requests for such permissions may be sent to
*
* Dr. Andrew S. Tanenbaum
* Wiskundig Seminarium
* Vrije Universiteit
* Postbox 7161
* 1007 MC Amsterdam
* The Netherlands
*
*/
/*
* machine dependent back end routines for the Motorola 68000
*/
con_part(sz,w) register sz; word w; {
while (part_size % sz)
part_size++;
if (part_size == TEM_WSIZE)
part_flush();
if (sz == 1) {
w &= 0xFF;
if (part_size == 0)
w <<= 8;
part_word |= w;
} else {
assert(sz == 2);
part_word = w;
}
part_size += sz;
}
con_mult(sz) word sz; {
if (sz != 4)
fatal("bad icon/ucon size");
fprintf(codefile,".long %s\n",str);
}
con_float() {
static int been_here;
if (argval != 4 && argval != 8)
fatal("bad fcon size");
fprintf(codefile,".long\t");
if (argval == 8)
fprintf(codefile,"F_DUM,");
fprintf(codefile,"F_DUM\n");
if ( !been_here++)
{
fprintf(stderr,"Warning : dummy float-constant(s)\n");
}
}
#ifdef REGVARS
regscore(off,size,typ,score,totyp)
long off;
{
if (score == 0) return -1;
switch(typ) {
case reg_float:
return -1;
case reg_pointer:
if (size != 4 || totyp != reg_pointer) return -1;
score *= 2;
break;
case reg_loop:
score += 5;
/* fall through .. */
case reg_any:
if (size != 2 || totyp == reg_pointer) return -1;
break;
}
if (off >= 0) {
/* parameters must be initialised with an instruction
* like "move.w 4(a6),d0", which costs 2 words.
*/
score -= 2;
}
score -= 1; /* take save/restore into account */
return score;
}
struct regsav_t {
char *rs_reg; /* e.g. "a3" or "d5" */
long rs_off; /* offset of variable */
int rs_size; /* 2 or 4 bytes */
} regsav[9];
int regnr;
int nr_a_regs,nr_d_regs;
int TEM_BSIZE;
static long nlocals;
prolog(n)
{ nlocals = n; }
i_regsave()
{
regnr = 0;
nr_a_regs = 0;
nr_d_regs = 0;
TEM_BSIZE = 0;
}
#define MOVEM_LIMIT 2
/* If #registers to be saved exceeds MOVEM_LIMIT, we
* use the movem instruction to save registers; else
* we simply use several move.l's.
*/
save()
{
register struct regsav_t *p;
int i;
if (regnr > MOVEM_LIMIT) {
fprintf(codefile,"movem.l ");
for (p = regsav; ;) {
fprintf(codefile,"%s",p->rs_reg);
if (++p == &regsav[regnr]) break;
putc('/',codefile);
}
fprintf(codefile,",-(sp)\n");
} else {
/* Note that the order in which the registers are saved
* is important; it is used by gto.s.
*/
for (i = 0; i < nr_a_regs; i++) {
fprintf(codefile,"move.l a%d,-(sp)\n",5-i);
}
for (i = 0; i < nr_d_regs; i++) {
fprintf(codefile,"move.l d%d,-(sp)\n",7-i);
}
}
/* Push a mask that indicates which registers were saved */
assert(nr_d_regs < 8 && nr_a_regs < 8);
if (nr_d_regs == 0 && nr_a_regs == 0) {
fprintf(codefile,"clr.w -(sp)\n");
} else {
fprintf(codefile,"move.w #%d,-(sp)\n",
nr_d_regs + (nr_a_regs<<3));
}
/* Compute AB - LB */
TEM_BSIZE = 4 * (nr_d_regs + nr_a_regs) + 10;
/* allocate space for local variables */
fprintf(codefile,"tst.b -%D(sp)\nlink\ta6,#-%D\n",nlocals+40,nlocals);
/* initialise register-parameters */
for (p = regsav; p < &regsav[regnr]; p++) {
if (p->rs_off >= 0) {
fprintf(codefile,"move.%c %ld(a6),%s\n",
(p->rs_size == 4 ? 'l' : 'w'),
p->rs_off + TEM_BSIZE,
p->rs_reg);
}
}
}
restr()
{
register struct regsav_t *p;
int i;
fprintf(codefile,"unlk a6\n");
fprintf(codefile,"add.l #2,sp\n"); /* pop mask */
if (regnr > MOVEM_LIMIT) {
fprintf(codefile,"movem.l (sp)+,");
for (p = regsav; ;) {
fprintf(codefile,"%s",p->rs_reg);
if (++p == &regsav[regnr]) break;
putc('/',codefile);
}
putc('\n',codefile);
} else {
for (i = nr_d_regs - 1; i >= 0; i--) {
fprintf(codefile,"move.l (sp)+,d%d\n",7-i);
}
for (i = nr_a_regs - 1; i >= 0; i--) {
fprintf(codefile,"move.l (sp)+,a%d\n",5-i);
}
}
fprintf(codefile,"rts\n");
}
f_regsave()
{
save();
}
regsave(str,off,size)
char *str;
long off;
{
assert (regnr < 9);
regsav[regnr].rs_reg = str;
if (str[0] == 'a') {
nr_a_regs++;
} else {
assert(str[0] == 'd');
nr_d_regs++;
}
regsav[regnr].rs_off = off;
regsav[regnr++].rs_size = size;
fprintf(codefile, "!Local %ld into %s\n",off,str);
}
regreturn()
{
restr();
}
#endif
#ifndef REGVARS
prolog(nlocals) full nlocals; {
fprintf(codefile,"tst.b -%D(sp)\nlink\ta6,#-%D\n",nlocals+40,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,".define %s\n",argstr) ;
break ;
}
}
default :
while ( getarg(any_ptyp) != sp_cend ) ;
break ;
}
}
char *segname[] = {
".text", /* SEGTXT */
".data", /* SEGCON */
".data", /* SEGROM */
".bss" /* SEGBSS */
};

File diff suppressed because it is too large Load Diff

View File

@@ -1,42 +0,0 @@
.define .dvi
! signed long divide
.text
.dvi:
movem.l d0/d2,.savdvi
move.l (sp)+,.retdvi
move.l (sp)+,d0
move.l (sp)+,d1
clr.l d4
tst.l d0 ! divisor
bpl 1f
neg.l d0
not d4
1:
tst.l d1 ! dividend
bpl 2f
neg.l d1
not d4
swap d4
not d4
swap d4
2:
move.l d1,-(sp)
move.l d0,-(sp)
jsr .dvu
tst d4
beq 5f
neg.l d1 ! quotient
5:
tst.l d4
bpl 6f
neg.l d3 ! remainder
6:
movem.l .savdvi,d0/d2
move.l .retdvi,-(sp)
rts
.data
.savdvi: .space 8
.retdvi: .long 0
.text
.align 2

256
mach/pdp/cg/mach.c Normal file
View File

@@ -0,0 +1,256 @@
#ifndef NORCSID
static char rcsid[] = "$Header$";
#endif
/*
* (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
*
* This product is part of the Amsterdam Compiler Kit.
*
* Permission to use, sell, duplicate or disclose this software must be
* obtained in writing. Requests for such permissions may be sent to
*
* Dr. Andrew S. Tanenbaum
* Wiskundig Seminarium
* Vrije Universiteit
* Postbox 7161
* 1007 MC Amsterdam
* The Netherlands
*
* Author: Hans van Staveren
*/
/*
* machine dependent back end routines for the PDP-11
*/
static char procnam[40] ;
/* #define REGPATCH /* save all registers in markblock */
con_part(sz,w) register sz; word w; {
while (part_size % sz)
part_size++;
if (part_size == TEM_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");
#ifdef ACK_ASS
fprintf(codefile,".long %s\n",str);
#else
l = atol(str);
fprintf(codefile,"\t%o;%o\n",(int)(l>>16),(int)l);
#endif
}
/*
* The next function is difficult to do when not running on a PDP 11 or VAX
* The strategy followed is to assume the code generator is running on a PDP 11
* unless the ACK_ASS define is on.
* In the last case floating point constants are simply not handled
*/
con_float() {
#ifdef ACK_ASS
static int been_here;
if (argval != 4 && argval != 8)
fatal("bad fcon size");
fprintf(codefile,".long\t");
if (argval == 8)
fprintf(codefile,"F_DUM,");
fprintf(codefile,"F_DUM\n");
if ( !been_here++)
fprintf(stderr,"Warning : dummy float-constant(s)\n");
#else
double f;
register short *p,i;
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++);
#endif
}
#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; {
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); /* estimated # of words of profit */
}
i_regsave() {
Rstring[0] = 0;
n_regvars=0;
}
f_regsave() {
register i;
if (n_regvars==0 || lbytes==0) {
#ifdef REGPATCH
fprintf(codefile,"mov r2,-(sp)\nmov r4,-(sp)\n");
#endif
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);
/* generate equates for access to registers */
fprintf(codefile,"~%s%s=%ld.\n",regadm[i].ra_str+1, procnam,
regadm[i].ra_off) ;
}
}
regsave(regstr,off,size) char *regstr; long off; {
fprintf(codefile,"%c Local %ld into %s\n",COMMENTCHAR,off,regstr);
/* commented away
#ifndef REGPATCH
fprintf(codefile,"mov %s,-(sp)\n",regstr);
#endif
strcat(Rstring,regstr);
if (off>=0)
fprintf(codefile,"mov 0%lo(r5),%s\n",off,regstr);
end of commented away */
strcat(Rstring,regstr);
regadm[n_regvars].ra_str = regstr;
regadm[n_regvars].ra_off = off;
n_regvars++;
}
regreturn() {
#ifdef REGPATCH
fprintf(codefile,"jmp eret\n");
#else
fprintf(codefile,"jmp RT%s\n",Rstring);
#endif
}
#endif
doplb(name) char *name ; {
register char *p, *q ;
p=procnam, q=name ;
while ( *p++ = *q++ ) ;
fprintf(codefile,"%s:\n",name) ;
}
prolog(nlocals) full nlocals; {
#ifndef REGVARS
#ifdef REGPATCH
fprintf(codefile,"mov r2,-(sp)\nmov r4,-(sp)\n");
#endif
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
}
dlbdlb(as,ls) string as,ls; {
if (strlen(as)+strlen(ls)+2<sizeof(labstr)) {
strcat(ls,":");
strcat(ls,as);
} else
fatal("too many consecutive labels");
}
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) ;
#ifdef ACK_ASS
fprintf(codefile,".define %s\n",argstr) ;
#else
fprintf(codefile,".globl %s\n",argstr) ;
#endif
break ;
}
}
default :
while ( getarg(any_ptyp) != sp_cend ) ;
break ;
}
}
char *segname[] = {
".text", /* SEGTXT */
".data", /* SEGCON */
".data", /* SEGROM */
".bss" /* SEGBSS */
};

46
mach/pdp/cg/mach.h Normal file
View File

@@ -0,0 +1,46 @@
/* $Header$ */
/* The next define switches between codegeneration for an ACK assembler
* or for the standard UNIX V7 assembler.
* If on code is generated for the ACK assembler.
*/
/* #define ACK_ASS /* code for ACK assembler */
#ifdef ACK_ASS
#define COMMENTCHAR '!'
#define ex_ap(y) fprintf(codefile,".extern %s\n",y)
#else
#define COMMENTCHAR '/'
#define ex_ap(y) fprintf(codefile,".globl %s\n",y)
#endif
#define in_ap(y) /* nothing */
#define newplb(x) doplb(x)
#define newilb(x) fprintf(codefile,"%s:\n",x)
#define newdlb(x) fprintf(codefile,"%s:\n",x)
#ifdef ACK_ASS
#define newlbss(l,x) fprintf(codefile,"%s:.space 0%o\n",l,x);
#else
#define newlbss(l,x) fprintf(codefile,"%s:.=.+0%o\n",l,x);
#endif
#define cst_fmt "$0%o"
#define off_fmt "0%o"
#define ilb_fmt "I%03x%x"
#define dlb_fmt "_%d"
#define hol_fmt "hol%d"
#define hol_off "0%o+hol%d"
#ifdef ACK_ASS
#define con_cst(x) fprintf(codefile,".short 0%o\n",x)
#define con_ilb(x) fprintf(codefile,".short %s\n",x)
#define con_dlb(x) fprintf(codefile,".short %s\n",x)
#else
#define con_cst(x) fprintf(codefile,"0%o\n",x)
#define con_ilb(x) fprintf(codefile,"%s\n",x)
#define con_dlb(x) fprintf(codefile,"%s\n",x)
#endif
#define id_first '_'
#define BSS_INIT 0

2852
mach/pdp/cg/table Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,78 +0,0 @@
d=../..
l=$d/mach/m68k2/lib
h=$d/h
ASS_PATH=$l/em_ass
CC=pmds
SEP_OPT=-n
CFLAGS=-O -.c
all: ass$(SEP_OPT)
clean:
-rm -f ass-i ass-n *.o maktab *.old asstb.c
install : all
cp ass$(SEP_OPT) $(ASS_PATH)
cmp : all
cmp ass$(SEP_OPT) $(ASS_PATH)
lint: ass00.c ass30.c ass40.c ass50.c ass60.c ass70.c \
ass80.c assci.c assda.c assrl.c asstb.c asscm.c
lint -hpvbx \
ass00.c ass30.c ass40.c ass50.c ass60.c ass70.c \
ass80.c assci.c assda.c assrl.c asstb.c asscm.c
ass-n: ass00.o ass30.o ass40.o ass50.o ass60.o ass70.o \
ass80.o assci.o assda.o assrl.o asstb.o asscm.o \
$l/em_data.a
$(CC) $(CFLAGS) -s -o ass-n \
ass00.o ass30.o ass40.o ass50.o ass60.o ass70.o \
ass80.o assci.o assda.o assrl.o asstb.o asscm.o \
$l/em_data.a >ass.symb
ass-i: ass00.o ass30.o ass40.o ass50.o ass60.o ass70.o \
ass80.o assci.o assda.o assrl.o asstb.o asscm.o \
$l/em_data.a
$(CC) -i $(CFLAGS) -o ass-i \
ass00.o ass30.o ass40.o ass50.o ass60.o ass70.o \
ass80.o assci.o assda.o assrl.o asstb.o asscm.o \
$l/em_data.a
ass00.o ass40.o ass60.o ass70.o ass80.o assrl.o: \
$h/local.h $h/em_spec.h $h/as_spec.h \
$h/em_flag.h $h/arch.h ass00.h assex.h
assci.o: $h/local.h $h/em_spec.h $h/as_spec.h \
$h/em_flag.h $h/em_mes.h $h/em_pseu.h \
$h/em_ptyp.h $h/arch.h ass00.h assex.h
ass30.o ass50.o : \
$h/local.h $h/em_spec.h $h/as_spec.h \
$h/em_flag.h ip_spec.h ass00.h assex.h
ass80.o: $h/em_path.h
assda.o: $h/local.h $h/em_spec.h $h/as_spec.h \
$h/em_flag.h $h/arch.h ass00.h
asscm.o: ass00.h
asstb.o: asstb.c
asstb.c: maktab ip_spec.t
maktab ip_spec.t asstb.c
maktab: maktab.c $h/em_spec.h ip_spec.h $h/em_flag.h \
$l/em_data.a
$(CC) -O -o maktab maktab.c $l/em_data.a
opr:
make pr ^ opr
pr:
@(pr ass00.h assex.h ip_spec.h ass?0.c ass[rcd]?.c \
maktab.c ; pr -3 ip_spec.t)