Commit Graph

100 Commits

Author SHA1 Message Date
Alexey Frunze
ae75f1cecc Smaller C: improvements
All architectures:
- "return" statement at function's end doesn't jump to immediately
  following epilog anymore
- zero and non-zero constants are recognized in conditional
  expressions of "if", "do/while" and "for" statements, no code
  generated to evaluate these constant conditions and related
  unnecessary jumps aren't generated anymore either
- in "for (clause-1; expr-2; expr-3) body", "expr-3" and "body" are
  now reordered to the more natural code flow "body expr-3", thereby
  getting rid of unnecessary jumps
MIPS code generator:
- function prologue/epilogue shortened further
- RA is not explicitly saved/restored in leaf functions
- assignment of 0 (e.g. "int a = 0;") is done from register 0
  directly, avoiding a load of a constant
2015-08-29 02:27:19 -07:00
Alexey Frunze
531a56ed51 Smaller C: Recover ~7.5KB of data memory (room for improvements)
by splitting SyntaxStack[][] into two arrays and reducing
the size of the element of the first
2015-08-22 17:53:42 -07:00
Alexey Frunze
b331d3e0aa Update Smaller C
- Update license text (remove irrelevant FreeBSD references)

- Update root readme.txt

- Improve prologue/epilogue generation
  Don't generate unnecessary jumps back and forth to/from
  "sub sp, size_of_locals".
  Instead, with the help of fgetpos()/fsetpos()
  initially write ";sub sp,              0" and then, when
  the size is finally known, go back and overwrite it with
  " sub sp, size_of_locals".
2015-08-20 22:37:08 -07:00
Serge Vakulenko
c8939dc646 Fix bug in assembler: incorrect reordering of branch instruction.
Increase cpp buffer size.
2015-08-20 20:55:55 -07:00
Brian Callahan
d29b887f18 Update to emg 1.8 2015-08-12 22:09:14 -04:00
vak
0a1960c864 Makefiles updated to properly build and install pdc and libreadline. 2015-07-18 21:44:58 -07:00
Serge Vakulenko
e8cb02f3f7 Added a tiny implementation of readline library, based on linenoise sources.
See https://github.com/antirez/linenoise for details.

Implemented a routine atexit() in libc.

Pdc modified to use readline library.
2015-07-18 18:41:46 -07:00
Serge Vakulenko
0b8e8bd520 Added pdc: the programmers desktop calculator,
imported from https://github.com/daniel-thompson/pdc repository.
2015-07-18 16:30:40 -07:00
vak
0c3fffb6f6 Merge pull request #56: Fix build for gcc >= 5.0.
gcc 5.0 defaults to -std=gnu11 meaning code which relies on implicit
ints will no longer compile. Passing -std=gnu89 restores the default
but causes problems because the system headers are written in gnu11.
Using -idirafter instead of -nostdinc resolves all problems and should
be compatible with old GCC versions (and clang).
2015-07-04 19:59:43 -07:00
Sergey
af1147432a Merge branch 'uuencode' of https://github.com/sinetek/retrobsd into sinetek-uuencode 2015-07-04 19:14:06 -07:00
Serge Vakulenko
a9b2a816ba Merge pull request #54 from sinetek/fold
fold - sync with FreeBSD 2.0
2015-07-04 19:01:29 -07:00
Sergey
0329394f94 Add fold utility from FreeBSD 2.0. 2015-07-04 19:00:20 -07:00
Sergey
1bf595e11a Create $DESTDIR/share/calendar directory on install.
Also, added .gitignore for all new components.
2015-07-04 18:46:48 -07:00
Serge Vakulenko
455d7aeffe Merge pull request #53 from sinetek/calendar
calendar - sync with FreeBSD 2.0.
2015-07-04 16:46:52 -07:00
sinetek
9623203f20 uuencode/uudecode - sync with FreeBSD 2.0 2015-07-03 16:54:18 +07:00
sinetek
8d061f04e3 fold - sync with FreeBSD 2.0 2015-07-03 16:35:12 +07:00
sinetek
49550e87d8 calendar - sync with FreeBSD 2.0 2015-07-03 16:07:55 +07:00
sinetek
6504a97fd1 md5 - sync with FreeBSD 2.0 2015-07-03 15:05:54 +07:00
Serge Vakulenko
4c343f1525 Fixed bug in assembler: incorrect reordering. 2015-06-25 22:11:54 -07:00
Serge Vakulenko
9d39282ae9 All paths moved to path.h.
Cleanup in curses.h: removed reg definition.
All include files reformatted for 4-space indent.
2015-06-24 20:57:08 -07:00
Serge Vakulenko
81a8a8379d Deleted unused include files dbm.h and pcc.h.
Deleted library functions stty() and gtty().
PicoC built in mips16 mode, without floating point support.
2015-06-24 19:19:46 -07:00
Serge Vakulenko
ea7c1415d7 Fixed declarations in include/time.h file.
Deleted unused file include/stab.h and reloc utility.
2015-06-24 17:45:47 -07:00
Sergey
d9b3b93176 Fixed stack overflow in fsck. 2015-06-23 00:29:20 -07:00
Serge Vakulenko
880e6639ac All manual pages added to manifest file. 2015-06-22 22:44:18 -07:00
Sergey
bca590d42b Fixed issue #44.
Removed unnesessary include <sys/types.h> from stdio.h, stdlib.h,
string.h, strings.h and time.h.
2015-06-21 18:59:02 -07:00
Sergey
aedd0138b3 Fixed issue #46: broken instruction reordering in assembler. 2015-06-21 17:56:15 -07:00
Sergey
57b3ba3506 Fixed .equ syntax in assembler. 2015-06-21 17:05:04 -07:00
Sergey
e08e51f1b9 Use permanent allocation of major indexes for character devices. 2015-05-30 18:28:22 -07:00
Serge Vakulenko
4e8398cbc9 Driver oc renamed to pwm. 2015-05-29 20:41:26 -07:00
Alexey Frunze
3afa8e5979 Smaller C: Improve initialization of variables
- throw away data of string literals inside sizeof, e.g.
    sizeof "a"
    sizeof("a"+1)
- support minimally and inconsistently bracketed (sic)
  initialization, e.g.:
    int y[4][3] = { 1, 3, 5, 2, 4, 6, 3, 5, 7 };
    struct { int a[3], b; } w[] = { { 1 }, 2 };
- scalar initializers can be optionally enclosed in
  braces, e.g.:
    int i1 = { 1 };
2015-05-23 01:15:52 -07:00
Alexey Frunze
6144631bc5 Smaller C: Support structure passing/returning by value on MIPS 2015-05-17 15:28:37 -07:00
Alexey Frunze
4ea521eabf Smaller C improvements
- type specifiers may occur in any order
  (e.g. "unsigned short int" and "int short unsigned")

- use .rodata/.rdata section for string literals
- arbitrary length string literals (hooray!)
- better concatenation of adjacent string literals
  (now works even across preprocessor directives)

Support .bss section
- -nobss option in smlrc: use .data instead of .bss as before
- take advantage of .bss in smlrc (put a large array into it)

Remove dead/useless code

Remove useless/rarely used features/options:
-use-gp (MIPS)
-flat16/-flat32 (x86)
-seg16t (x86), -seg16 is now the default
-ctor-fxn

Add/change:
- use EXIT_FAILURE=1 instead of -1 in smlrc when aborting
  due to an error
2015-05-16 05:57:39 -07:00
Serge Vakulenko
ea03a4bc98 ADM demo rewritten without curses.
Examples reorganized.
Added examples for 37-in-1 sensor kit (not complete yet).
2015-05-14 22:11:47 -07:00
alex
a4bdbd4662 Bugfixes
- properly sign-/zero-extend returned values, e.g. the following
function must return 255 and not -1:

unsigned char f(void) { return -1; }

- properly decay arrays on the left side of ->, e.g. the following must
compile:

{
  struct {char c;} s[1];
  s[0].c = 'a'; putchar(s[0].c);
  (s+0)->c = 'b'; putchar(s[0].c);
  (*s).c = 'c'; putchar(s[0].c);
  s->c = 'd'; putchar(s[0].c);
  putchar('\n');
}

Also:
- support structure passing/returning by value (x86 only)
2015-04-25 18:03:55 -07:00
Sergey
0005e7d7bf Fixed bug in fsck: using bcopy() instead of structure assignment.
File exception.c converted to indent4 format.
2015-02-13 21:05:03 -08:00
Sergey
942bdda5ed Diskspeed: added extra sync and timeout before each test. 2015-02-13 19:41:32 -08:00
Serge Vakulenko
5ce8a8cd33 Added diskspeed utility. 2015-02-12 19:27:59 -08:00
Serge Vakulenko
bae12383a0 Fixed build issues on Linux x86-64. 2015-01-06 19:36:49 -08:00
alex
dad5247184 Merge branch 'master' of https://github.com/alexfru/retrobsd 2014-12-29 16:36:58 -08:00
alex
b1f67fbca0 SmallerC: generate smaller & faster code; bugfixes
Improvements:
- use registers more efficiently
- eliminate some register copies and stack manipulations
- promote left operands to right immediate operands
- improve simple assignments to auto/static vars
- use bltz, blez, bgtz, bgez
- change mul/divu (by powers of 2) to sll/srl/and
- use seb, seh for sign extension instead of sll/sra
- overall generate a bit tighter, faster and more readable asm code

Fixes:
- >>= should be unsigned when the left operand is unsigned int.
The right operand isn't important here.
- very subtle bug in e.g. void f(){int a; &a+1;/*wrong value of &a+1*/}

Other:
- include stdarg.c and skeleton.c in /share/example/Makefile
2014-12-29 16:28:56 -08:00
Alexey Frunze
3bb914c8b4 Fix >>=
>>= should be unsigned when the left operand is unsigned int. The right
operand isn't important here.
2014-12-13 01:06:53 -08:00
alex
00269e9387 Smaller C fixes and improvements:
- move va_list type detection under #ifdef as it's rarely needed anyway
- allow up to 254 characters in a string literal
- generate a warning when an integer is passed instead of a pointer (and
vice versa) as a function parameter (pass -Wall for this)
- when printing an unexpected token, print identifier tokens instead of
'<tokIdent>'
- fix: allow most control characters inside '' and ""
- fix handling of -I<path> and -SI<path>
- switch() now supports Duff's device
- for() now supports declarations in its first clause as in C99/C++
2014-12-06 16:18:17 -08:00
alex
b18ce0aa87 Fix MIPS code generation for -= and postfix --.
Also convert most of Small C sample programs to Smaller C.
2014-10-19 00:22:44 -07:00
Serge Vakulenko
c4da2137e1 Added man sources from 2.11bsd tape. 2014-09-25 17:14:51 -07:00
Brian Callahan
294ccae3be emg 1.7 2014-07-10 18:11:43 -04:00
Serge Vakulenko
1c4e562363 Added kernel configuration for PICadillo-35T board. 2014-06-23 22:15:51 -07:00
Brian Callahan
70b8d93b21 Update emg man page. 2014-06-17 08:43:13 -04:00
Serge Vakulenko
5fa78e772b Moved aout sources to separate directory.
Fsutil and modff license changed to BSD style.
2014-06-04 11:46:33 -07:00
Brian Callahan
04208ea903 Remove unusued variable... put this down and walk away until tomorrow. 2014-05-29 18:20:55 -04:00
Brian Callahan
e003436e91 Dumbest off-by-one ever... 2014-05-29 18:16:24 -04:00