ack/plat
George Koehler 007a63d529 Begin to add long long to C compiler for linux386.
Add long long type, but without literals; you can't say '123LL' yet.
You can try constant operations, like `(long long)123 + 1`, but the
compiler's `arith` type might not be wide enough.  Conversions,
shifts, and some other operations don't work in i386 ncg; I am using a
union instead of conversions:

	union q {
		long long ll;
		unsigned long long ull;
		int i[2];
	};

Hack plat/linux386/descr to enable long long (size 8, alignment 4)
only for this platform.  The default for other platforms is to disable
long long (size -1).

In lang/cem/cemcom.ansi,

 - BigPars, SmallPars: Add default size, alignment of long long.
 - align.h: Add lnglng_align.
 - arith.c: Convert arithmetic operands to long long or unsigned long
   long when necessary; avoid conversion from long long to long.
   Allow long long as an arithmetic, integral, or logical operand.
 - ch3.c: Handle long long like int and long when erroneously applying
   a selector, like `long long ll; ll.member` or `ll->member`.  Add
   long long to integral and arithmetic types.
 - code.c: Add long long to type stabs for debugging.
 - conversion.c: Add long long to integral conversions.
 - cstoper.c: Write masks up to full_mask[8].  Add FIXME comment.
 - declar.g: Parse `long long` in code.
 - decspecs.c: Understand long long in type declarations.
 - eval.c: Add long long to operations, to generate code like `adi 8`.
   Don't use `ldc` with constant over 4 bytes.
 - ival.g: Allow long long in initializations.
 - main.c: Set lnglng_type and related values.
 - options.c: Add option like `-Vq8.4` to set long long to size 8,
   alignment 4.  I chose 'q', because Perl's pack and Ruby's
   Array#pack use 'q' for 64-bit or long long values; it might be a
   reference to BSD's old quad_t alias for long long.
 - sizes.h: Add lnglng_size.
 - stab.c: Allow long long when writing the type stab for debugging.
   Switch from calculating the ranges to hardcoding them in strings;
   add 8-byte ranges as a special case.  This also hardcodes the
   unsigned 4-byte range as "0;-1".  Before it was either "0;-1" or
   "0;4294967295", depending on sizeof(long) in the compiler.
 - struct.c: Try long long bitfield, but it will probably give the
   error, "bit field type long long does not fit in a word".
 - switch.c: Update comment.
 - tokenname.c: Define LNGLNG (long long) like LNGDBL (long double).
 - type.c, type.str: Add lnglng_type and ulnglng_type.  Add function
   no_long_long() to check if long long is disabled.
2019-09-02 11:24:44 -04:00
..
cpm Add some BIOS bindings, and a zero-terminated print string routine. 2019-06-24 23:07:17 +02:00
em Move time() into sys; change the name of the variable which controls it. 2018-06-23 19:40:50 +02:00
em22 Get em22 working. Remove the leading-underscore system calls from its libsys. 2018-06-23 15:57:57 +02:00
linux All the Linux include directories are the same, so common them all out into a 2018-06-24 19:57:43 +02:00
linux68k Ensure that procedure labels are word aligned (required by the EM spec). 2019-06-17 22:26:31 +02:00
linux386 Begin to add long long to C compiler for linux386. 2019-09-02 11:24:44 -04:00
linuxmips Updated READMEs with the MIPS platform. 2018-09-18 23:49:31 +02:00
linuxppc All the Linux include directories are the same, so common them all out into a 2018-06-24 19:57:43 +02:00
osx Include more headers to declare functions. 2019-03-22 15:59:35 -04:00
osx386 Make osx386 and osxppc use _hol0.s like the other platforms. 2018-01-23 13:55:39 -05:00
osxppc For osxppc, change size 8 to alignment 4. 2018-01-27 16:35:48 -05:00
pc86 Fix register corruption when incrementing locals; attempt to solve the 2019-06-17 23:31:54 +02:00
pdpv7 Move time() into sys; change the name of the variable which controls it. 2018-06-23 19:40:50 +02:00
qemuppc Move time() into sys; change the name of the variable which controls it. 2018-06-23 19:40:50 +02:00
rpi Move time() into sys; change the name of the variable which controls it. 2018-06-23 19:40:50 +02:00
build.lua Turns out that the compiler needs access to the libpc headers too; refactor 2018-06-18 22:17:38 +02:00