ceriel 0d65b92220 removed -i flag il y a 33 ans
..
as 0d65b92220 removed -i flag il y a 33 ans
cg b314975f0f LIM puts a word-size object on stack il y a 34 ans
cv 4b265a4f0a improved alignment checking il y a 37 ans
dl 84bce837a0 fix in a call to record il y a 37 ans
libbc 81b1d21c35 Initial revision il y a 37 ans
libcc 7515b51d64 Added installation of math lib il y a 36 ans
libem 14ce396d6f fixed CFI problem il y a 33 ans
libfp 3899b18911 Motorola byte ordering il y a 35 ans
libm2 04cabf258d Initial revision il y a 36 ans
liboc 81b1d21c35 Initial revision il y a 37 ans
libpc 81b1d21c35 Initial revision il y a 37 ans
libsys 9ecf2ad8f8 Use .limhp il y a 34 ans
ncg 0d65b92220 removed -i flag il y a 33 ans
top 0d65b92220 removed -i flag il y a 33 ans
.distr 6535d32447 Added libm2 il y a 36 ans
Action 6535d32447 Added libm2 il y a 36 ans
README 60f9744253 Adapted to current situation il y a 37 ans
Unisoft_bug dcfe4e8a97 *** empty log message *** il y a 39 ans

README

The m68k2 back end is an EM code generator for the
Motorola MC68000. It defines an integer to be 16 bits
and a pointer to be 32 bits.
At present it does not support floating point operations.
(All EM floating point instructions are translated to the
68000 "trap" instruction.)
The m68k2 back end generates code for the ACK 68000 assembler.
(The mnemonics recognized by this assembler can be found in
"as/mach3.c").

Some parts of the back end are system dependent, i.e. they depend
on the kind of target 68000 system.
- The way to do a Unix system call may vary from system to system.
For every system call you need to have an assembly routine that
passes the arguments and the system call number to Unix.
These routines should be put in the library file "lib/tail_mon".
The distribution contains a tail_mon file tailored for
UniSoft Unix (see directory "libsys").
Beware that several Unix systems (e.g. UniSoft Unix) use 4-byte
integers, whereas the m68k2 back end produces code for 2-byte
integers. In this case all system calls having an "int" parameter
should convert their parameters to "long"s.
- Most systems require some sort of "test for enough stack space"
at the beginning of every procedure, to get around the "back up"
problem. E.g. UniSoft Unix requires a "tst.b N(sp)" instruction
This instruction is generated by the routines "prolog()" and
"save" in "cg/mach.c".
- The output of the ACK 68000 linker is an a.out file that
has a different format as an a.out file on your system. (As most
68000 systems have different a.out formats, there is no such thing
as "the" 68000 a.out format). So a program is needed to convert the
ACK a.out format to your a.out format (as defined in
"/usr/include/a.out.h"). The program "cv/cv.c" does
the job for UniSoft Unix. It probably need only be slightly
modified for your system. Note that the program
generates no text or bss segments, but only a data segment.
If your target 68000 does not run Unix, but is e.g. a stand alone
68000, you will need a program to download the ACK a.out file.
The program "dl/dl.c" produces Intel Hex format on standard output
from an a.out file.
- The EM runtime start-off ("libsys/head_em.s") may have to be modified.
It should call the procedure _m_a_i_n with parameters (argc,argv,envp).
Usually, Unix will put these on top of the stack before starting
the program. Note, however, that for 4-byte systems Unix will provide
a 4-byte argc, while _m_a_i_n expects a 2-byte argc; so the value
must be shortened to 2 bytes.


The m68k2 code generator translates most EM instructions in line.
For some complex EM instructions it uses assembly routines (stored in the
library "libem/libem_s.a").

The generated code does not check for array bound errors, overflow in
arithmetic operations or division by zero (the latter will cause a hardware
trap).

The code generator has the following register conventions:
a7: stack pointer
a6: local base pointer
a0,a1,d0,d1,d2: scratch registers
(d0 is also used for 2/4 bytes function results;
d0 and d1 are used for 8 bytes function results)
a2-a5,d3-d7: register variables.