Commit graph

34 commits

Author SHA1 Message Date
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
carl
750a6bc684 Better ANSI C compatibility and portability:
+ Addition of function prototypes and include files.
+ Change function definitions to ANSI C style.
+ Initial support for CMake
+ Scripts to generate compiler header is now sed based.
2019-02-19 00:54:23 +08:00
George Koehler
3463f0c944 bts2str(), long2str() are in <ack_string.h> 2017-11-10 18:00:00 -05:00
George Koehler
ca4bd38206 Delete old "assert.h" files; use libc <assert.h>.
Edit build.lua for programs losing their private assert.h, so they
depend on a list of .h files excluding assert.h.

Remove modules/src/assert; it would be a dependency of cpp.ansi but we
didn't build it, so cpp.ansi uses the libc assert.

I hope that libc <assert.h> can better report failed assertions.  Some
old "assert.h" files didn't report the expression.  Some reported a
literal "x", because traditional C expanded the macro parameter x in
"x", but ANSI C89 doesn't expand macro parameters in string literals.
2017-11-09 22:22:13 -05:00
David Given
fd91851005 Add enough return types to the K&R C that the ACK builds (on Linux) using clang
now.
2016-11-10 22:04:18 +01:00
David Given
c1aca7dae5 First milestone of replacing the build system.
--HG--
branch : dtrg-buildsystem
rename : lang/cem/cpp.ansi/Parameters => lang/cem/cpp.ansi/parameters.h
2013-05-12 20:45:55 +01:00
dtrg
f9ddb860a9 Fixed some reentrant comments. 2007-02-20 00:35:37 +00:00
ceriel
8636e9d10a Changed Header into Id 1994-06-27 08:03:14 +00:00
ceriel
6f8002f540 Fix: previous version did not work with variable # of args 1993-01-28 11:45:38 +00:00
ceriel
de58173e36 No more global space for structure returns 1993-01-28 10:09:51 +00:00
ceriel
a38be6605e Do not use '#endif/#else xxx'; it is not allowed for ANSI C 1991-12-17 13:12:22 +00:00
ceriel
2526e11a03 improved structure assignments 1991-08-26 14:26:07 +00:00
ceriel
1be579a6e7 minor improvement to volatile code 1991-06-21 10:31:20 +00:00
ceriel
0539581d5d Generate less stupid conversions 1991-02-01 09:54:21 +00:00
ceriel
e7b7aa3944 simplified compile time floating point somewhat 1991-01-15 18:21:16 +00:00
ceriel
0267340564 in SkipToNewLine(), check for TOKSEP; fixed problem with volatile 1991-01-15 12:00:24 +00:00
eck
d7c15759ee added warning about old-fashioned declarations
cleaned up error reporting
changed implicit declaration handling
1990-11-02 09:23:27 +00:00
eck
43b01a70a0 squeezing for MINIX & bug fix in dumpidf 1990-07-19 17:16:36 +00:00
eck
84b8c8a6ca improved volatiles, added warning for possibly nested comments 1990-04-02 15:57:51 +00:00
eck
ed2516a57a bug fixes after test-suite 1990-03-29 10:41:46 +00:00
eck
61b718d716 floating-point yet again, fixed debugging bug 1990-03-01 13:02:39 +00:00
eck
2dd3439f90 also give a message on loading a floating-point function result 1990-02-28 15:32:07 +00:00
eck
44d9a8b42d improved the generation of floating-point messages 1990-02-28 14:51:35 +00:00
ceriel
63e64680bd Added some code to reverse evaluation order of assignment operators when possible 1990-02-28 12:18:36 +00:00
eck
d50600e263 fixed unary & and indirect calls 1989-11-22 16:41:09 +00:00
ceriel
cfc1d926bf minor mod: added comment and removed a variable 1989-11-09 12:33:08 +00:00
ceriel
67f9f2a74f many little changes: removed some lint complaints; max_int and max_unsigned
are now constants if NOCROSS is defined; added lexstrict and expr_strict,
and changed calls where needed
1989-11-08 16:52:34 +00:00
ceriel
4a5a463e44 improved handling of , (comma) operator and some more Minix squeezing 1989-10-23 13:50:27 +00:00
ceriel
cf3bcb5e63 Added routine to evaluate operands of binary operator 1989-10-20 17:08:48 +00:00
eck
4bde31f78a minor changes concerning void and pre-processor 1989-09-29 16:20:38 +00:00
eck
fa4e6eecb4 lots and lots of changes & improvements 1989-09-19 16:13:23 +00:00
ceriel
eb3dcf275e fixed some problems, updated with cemcom 1989-02-14 14:35:38 +00:00
ceriel
0bc88b77b2 fixed several problems:
- hex numbers and floating point numbers were wrong
- grammar was wrong; did not accept correct ANSI C
- prototype updates did not work
- float parameters to routines without prototype were not upgraded to double
- the dot operator no longer requires lvalue as left-hand-side
1989-02-07 13:16:02 +00:00
ceriel
926da49d39 Initial revision 1989-02-07 11:04:05 +00:00