Commit Graph

131 Commits

Author SHA1 Message Date
Jeremiah Orians f2cae3d501
AMD64 support for unsigned comparisons 2020-12-15 20:28:04 -05:00
Jeremiah Orians 132e685f97
Fix x86 behavior on unsigned compares 2020-12-15 17:46:45 -05:00
Jeremiah Orians 9da48c5ece
match gcc behavior in regards to if(-1 > 0) 2020-12-15 07:24:07 -05:00
Jeremiah Orians 5c22aac02d
Change knight-posix HEAP behavior and leverage better relational choices for knight-posix 2020-12-15 06:02:38 -05:00
Sanne Wouda a63b8837c0 [AArch64] Use arithmetic right shift for signed
- as discussed with deesix, this is the proper fix
- the test1000 checksum changes as it uses the M2-Planet source as input
2020-12-05 14:59:16 +00:00
Jeremiah Orians 67dbbbdcfc
Enable support for C multi-strings 2020-11-15 18:58:25 -05:00
Jeremiah Orians 57264eb157
Catch potential segfaulting behavior in generated binaries 2020-11-08 21:13:12 -05:00
Jeremiah Orians 39915de931
harmonize integer behavior when reading strings 2020-10-17 13:50:25 -04:00
Jeremiah Orians c4a636c99d
Fix shift behavior to better match C standard 2020-10-16 22:07:06 -04:00
Jeremiah Orians 09783ac089
Fixed continue behavior and added a test to verify correct behavior 2020-02-28 18:48:58 -05:00
deesix b2ece54864 aarch64: do not generate a wasteful stack anymore
Until now, each element on the compiled program stack was 128 bits long,
half of them unused because only one 64 bits value was stored.

Now it's 64 bits long, so we don't waste all that memory.

We workaround the architectural alignment restriction of the SP register by
using a free regular register. X18 is for platform use so it seems a good
candidate for this task.

At _start we copy the value of SP into X18. SP is not used anymore. When a
definition refers to SP it doesn't mean it literaly now, because here we
redefine (without renaming) the involved M1 macro definitions to operate
on X18 (easier transition; abstraction). INIT_SP is introduced.

The function arguments are passed via stack, so the offset from the Base
Pointer ("depth") to each of them is different now. Changes both to
compiler code (cc_core.c) and libc reflect that the arguments are 8 bytes
(instead of 16 bytes) apart now. Note that SUB_X0_32 and SUB_X0_48 are
removed, because we only need 8, 16 and 24 bytes subtraction to reach the
arguments from asm libc functions. SUB_X0_8 and SUB_X0_24 are introduced.
2020-02-08 00:16:54 +01:00
deesix fbc2bf3333 aarch64: statement 2020-02-01 21:23:49 +01:00
deesix 803cf4ffa3 aarch64: flow control 2020-02-01 21:23:49 +01:00
deesix ebb0e4a3f9 aarch64: expression 2020-02-01 21:23:49 +01:00
deesix c32cb92daa aarch64: arithmetic, relational and bitwise expressions 2020-02-01 21:23:49 +01:00
deesix 39936d81cb aarch64: primary, postfix and unary expressions 2020-02-01 21:23:49 +01:00
deesix b581244df0 aarch64: load of function, constant, global and variable 2020-02-01 21:23:49 +01:00
deesix 02bac66940 aarch64: function, function call, arguments, locals and return 2020-02-01 21:23:49 +01:00
deesix 0737a2acf0 aarch64: common recursion 2020-02-01 21:23:49 +01:00
Jeremiah Orians 095664e680
Fix knight-native to be able to support much larger binaries 2020-01-31 22:43:51 -05:00
Jeremiah Orians 5c4c6aee71
prevent void foo () { if(0) {} class of segfaults 2020-01-30 18:40:45 -05:00
Jeremiah Orians 0709770730
Enabled forgotten cleanup scripts and add logic to catch ?alloc errors 2020-01-25 14:15:45 -05:00
Jeremiah Orians 4b2a048f14
Start reducing number of segfaults possible in M2-Planet 2020-01-22 18:03:28 -05:00
Jeremiah Orians 1221a5e6dc
Replace NOP with NULL because that is what is really ment by it 2020-01-06 20:21:26 -05:00
Jeremiah Orians 64a3a1b674
Get division on x86/AMD64 a closer approximation of what is correct 2019-11-29 12:55:55 -05:00
Jeremiah Orians 9eb0a8706e
Fixed amd64's xchg behavior, removed fixup_int32 and updated Changelog 2019-10-31 20:54:43 -04:00
Jeremiah Orians dea4f902b7
Adding support for additional type compatibility with C and backported
regression fix for ARMv7l debug headers
2019-10-27 12:55:07 -04:00
Andrius Štikonas 96588d406f
Fix a typo:
Recieved -> Received
2019-10-23 22:55:56 +01:00
Jeremiah Orians 465b4c9c31
Fixup behavior on 64bit platforms 2019-06-19 21:43:34 -04:00
Jeremiah Orians f43aa4a44c
Minor tweaks to better match amd64 assembly 2019-06-03 21:01:14 -04:00
Jeremiah Orians 27cf071ee9
Release_1.3.0 2019-04-22 19:30:08 -04:00
Jeremiah Orians e55dc78597
4/24 working tests for AMD64 2019-04-19 17:43:59 -04:00
deesix a3acf66077 Global string (char*) value indirect store, to fix segfault
Because, as OriansJ found, we don't want to read the first bytes of the
value as a pointer. See global_load() for programs like:

char* s = "xyzzy\n";
int main(void){ file_print(s, 1); return 0; }

There's an alternative: "fix the GLOBAL behavior to be type sensitive" but
this indirect store was choosen because it "preserve[s] the ability to
assign new strings to a global char*".
2019-04-18 16:48:41 +02:00
Jeremiah Orians 420f8b62b9
1/24 working tests for AMD64 Port 2019-04-17 20:19:17 -04:00
Jeremiah Orians 119226d569
Fixed ARMV7l stack behavior thanks to dddddd 2019-04-13 08:31:39 -04:00
Jeremiah Orians 442601197c
17/24 working tests for armv7l 2019-03-30 09:25:52 -04:00
Jeremiah Orians c3ad31d66a
15/24 working tests for armv7l 2019-03-23 18:29:19 -04:00
Jeremiah Orians 87b1daaaa9
13/24 working tests for armv7l 2019-03-17 22:34:26 -04:00
Jeremiah Orians 95107d9fb6
10/24 working tests for armv7l 2019-03-17 10:08:56 -04:00
Jeremiah Orians fe95136b49
8/24 working tests for ARMv7l 2019-03-17 06:15:20 -04:00
Jeremiah Orians b61144efd7
6/24 working tests for ARMv7l 2019-03-16 23:27:52 -04:00
Jeremiah Orians eb034f51e8
5/24 working tests for ARMv7l 2019-03-16 20:03:56 -04:00
Jeremiah Orians f357464727
4/24 working tests for ARMv7l 2019-03-10 13:07:19 -04:00
Jeremiah Orians 740f376828
Test02 for ARMv7l 2019-03-10 11:24:13 -04:00
Jeremiah Orians 8f247d9716
Added second working test for ARMv7l 2019-03-10 09:33:45 -04:00
Jeremiah Orians d1036c60c8
First working test for ARMv7l 2019-03-09 20:22:29 -05:00
Jeremiah Orians d5d64bb254
knight-posix is now fully supported 2019-03-09 15:25:29 -05:00
Jeremiah Orians f01f805803
Upgraded to 23/24 working tests 2019-03-09 11:56:16 -05:00
Jeremiah Orians 577f19dea9
Upgraded to 14/24 working tests 2019-02-26 18:04:49 -05:00
Jeremiah Orians 69c319ef6c
Added working HEAP to knight-posix 2019-02-24 17:46:05 -05:00
Jeremiah Orians c6ac46292f
Added test05 for knight-posix 2019-02-24 09:58:47 -05:00
Jeremiah Orians a1309ae4b9
Added support for test03 for knight-posix 2019-02-24 06:48:31 -05:00
Jeremiah Orians 65f47417d4
Fixed test02 for knight-posix 2019-02-23 21:36:26 -05:00
Jeremiah Orians b085022577
Added initial draft of knight-posix support and first knight-posix test 2019-02-23 18:33:57 -05:00
Jeremiah Orians 6f6dc7b48d
Slow_Lisp prototype update 2018-11-10 09:55:09 -05:00
Jeremiah Orians 9a2c6b4019
Harmonized License headers and added missing license headers 2018-10-17 19:27:06 -04:00
Jeremiah Orians 56db0fcad4
Breaking change in M2-Planet 2018-10-17 16:08:04 -04:00
Jeremiah Orians 32f2adafda
Pull patches from janneke 2018-08-26 21:15:32 -04:00
Jeremiah Orians e249069cac
Release 1.0.0 2018-08-26 16:34:31 -04:00
Jeremiah Orians 951d259339
Minor reorganization 2018-08-20 20:41:37 -04:00
Jeremiah Orians 95b1fe029f
Broke out OUT and FUNCTION to silence a single GCC warning 2018-08-18 15:23:58 -04:00
Jeremiah Orians 51b8b275fd
More cleaning to simplify assembly bootstrap 2018-08-17 04:55:56 -04:00
Jeremiah Orians 162df4f378
Enhanced core to simplify implementation 2018-08-16 12:01:55 -04:00
Jeremiah Orians 2e1148fe3e
Release 0.3 2018-08-12 13:11:02 -04:00
Jeremiah Orians df451c1728
Code Clean up done during knight platform bootstrap work 2018-08-10 17:30:48 -04:00
Jeremiah Orians 929bfa968c
Good Catch Gio 2018-07-25 21:32:45 -04:00
Jeremiah Orians dc94afb558
Lots of clean and enhancements to simplify task of writing it in assembly. 2018-07-19 22:33:02 -04:00
Jeremiah Orians 64531def3b
Performance enhancement by elimination of string copying 2018-06-28 16:40:51 -04:00
Jeremiah Orians c454008656
Adding initial support for global initializers 2018-06-26 17:03:17 -04:00
Jeremiah Orians 94a986bf44
Made output even more deterministic 2018-06-08 15:43:36 -04:00
Jeremiah Orians 280b2ade52
bug clean up and new functionality 2018-06-01 20:05:27 -04:00
Jeremiah Orians cba66b015b
Catching up on enhancements 2018-05-26 16:33:00 -04:00
Jeremiah Orians 847184a0da
Added support for Local functions 2018-05-03 19:07:44 -04:00
Jeremiah Orians fdbb577784
Added support for passing of function pointers via FUNCTION 2018-05-02 20:56:44 -04:00
Jeremiah Orians 3f9808a19a
Added type promotion to allow progress on mes.c 2018-04-23 21:35:27 -04:00
Jeremiah Orians 589217b3b6
Minor cleanup and removal of unneeded whitespace 2018-03-05 19:13:20 -05:00
Jeremiah Orians 426a92ab09
Finally became self-hosting 2018-02-23 21:18:23 -05:00
Jeremiah Orians 35c9d4036f
Incorporate breaks into loops and reduce library dependencies 2018-01-31 23:14:40 -05:00
Jeremiah Orians f6752b2802
Added additional functionality such as mixed structs, do while loops,
gotos and tests for the new functionality
2018-01-24 20:00:22 -05:00
Jeremiah Orians 9a919d20ea
Minor reordering of tests and the addition of unary - and ! support 2018-01-21 14:42:09 -05:00
Jeremiah Orians 4602adb0b1
Converted from legacy M2-Planet Input.c Output.c to M2-Planet -f input.c ... -f inputN.c -o output.M1 2018-01-20 22:56:50 -05:00