Граф коммитов

191 коммит

Автор SHA1 Сообщение Дата
Ayke van Laethem
eed25c78df
Clean up ssa.Convert and ssa.ChangeType 2018-08-29 23:36:58 +02:00
Ayke van Laethem
8b95b869ab
Implement string concatenation 2018-08-29 22:10:46 +02:00
Ayke van Laethem
c912091f8b
Add integer key support to hashmap 2018-08-29 21:50:43 +02:00
Ayke van Laethem
8f7db8661b
Move string type to runtime in separate file 2018-08-29 20:55:09 +02:00
Ayke van Laethem
bf160d096b
Move lenType definition to runtime (partially) 2018-08-29 20:48:56 +02:00
Ayke van Laethem
abaae5b90d
Remove unnecessary compiler workaround
This workaround isn't needed anymore: the feature has been implemented
now.
2018-08-29 20:45:50 +02:00
Ayke van Laethem
7991243554
Remove CGo from machine module
It isn't necessary anymore but apparently the Go importer didn't
complain about an unused import.
2018-08-29 20:44:56 +02:00
Ayke van Laethem
d4f5700625
Remove use of CGo in the runtime
CGo depends on syscall, which (in the standard library) depends on sync,
which depends on the runtime. There are also other import cycles. To be
able to use the syscall package from upstream, stop using CGo.
2018-08-29 20:01:33 +02:00
Ayke van Laethem
d620f0d188
Implement multiple return values from functions
Use structs in LLVM as it appears LLVM has no support for multiple
return values (I should look into how Rust does it...).
2018-08-29 19:42:22 +02:00
Ayke van Laethem
ee10162564
Extra check on interface asserts
Interface asserts haven't been implemented yet. Don't produce incorrect
code in that case.
2018-08-27 00:50:03 +02:00
Ayke van Laethem
0c71ed81a4
Rename runtime.itfmethod -> runtime.interfaceMethod 2018-08-27 00:49:33 +02:00
Ayke van Laethem
64e478ef36
Switch to 16-bit typecodes and method IDs
It took Android some time to even hit the 64K limit for regular method
calls, so switching to 16-bit IDs should be fine for method IDs of
interfaces. At least for the time being. When this limit is ever hit,
I'll think of another way, probably involving some platform-dependent
interface code (e.g. microcontrollers won't need 64K of methods) or
detecting the limit at build time.

https://android-developers.googleblog.com/2014/12/google-play-services-and-dex-method.html

Code size isn't changed, probably because the compiler optimizes away
all method calls.
2018-08-27 00:32:30 +02:00
Ayke van Laethem
539de9db9e
Move interface method calls in Go from LLVM IR + documentation
This commit moves the itfmethod call implemented directly in LLVM IR to
a Go implementation in the runtime. Additionally, it fixes variable
names to be more obvious and adds a lot of documentation to explain how
interfaces actually work in TinyGo.

Code size changes for src/examples/hello:
nrf:  -144
unix: -93

I'm guessing this code size reduction is a result of removing the
'noinline' function attribute.
2018-08-26 23:40:11 +02:00
Ayke van Laethem
309de00fd6
Simplify function names by removing $async suffix 2018-08-26 21:45:28 +02:00
Ayke van Laethem
58e31fd470
Simplify a bit of code 2018-08-26 21:38:55 +02:00
Ayke van Laethem
de6c20f1bd
Implement untyped bool 2018-08-25 03:24:06 +02:00
Ayke van Laethem
c9e6a52d05
Implement constant slice
It's used somewhere in the sync package, but I'm not sure where.
2018-08-25 02:58:59 +02:00
Ayke van Laethem
9f2bcfe5e3
Implement global interface variable constant 2018-08-25 02:58:00 +02:00
Ayke van Laethem
c25b448758
Rewrite init() interpretation to a real interpreter
Instead of mostly heuristics, actually execute the init() instruction in
an interpreter to calculate initializers for globals. This is far more
flexible and extensible, and gives the option of extending the
interpreter to other code and make it a partial evaluator.
2018-08-25 02:07:01 +02:00
Ayke van Laethem
9b4ac0459b
Make strings constant
For some reason this was disabled.
2018-08-24 05:18:41 +02:00
Ayke van Laethem
f49ceddd73
Enable elimination of dead globals by marking them private
This eliminates most of the newly created dead globals.
2018-08-24 04:25:16 +02:00
Ayke van Laethem
5f28b07f75
Enable aggressive code size optimizations: -Oz 2018-08-24 03:35:39 +02:00
Ayke van Laethem
f9f92de1c3
Add a test for the unicode package
This massively increases .data size, possibly because loads of unused
globals are included. I'll need to investigate what's going on here. For
now, increase the RAM size for nrf chips (the nrf52 has 64kB of RAM).
2018-08-24 03:35:03 +02:00
Ayke van Laethem
36a5af9e6d
README: dead code elimination 2018-08-24 03:02:06 +02:00
Ayke van Laethem
ab3358e5a3
Add make fmt 2018-08-24 02:59:18 +02:00
Ayke van Laethem
fa12da95e2
Some documentation fixes 2018-08-24 02:56:09 +02:00
Ayke van Laethem
0defed9677
Resolve named types 2018-08-24 02:55:06 +02:00
Ayke van Laethem
1229667f7c
Support pointers in global variables 2018-08-24 02:54:37 +02:00
Ayke van Laethem
68b1100c89
Support maps bigger than 8 elements in .data 2018-08-24 02:53:23 +02:00
Ayke van Laethem
4ef271d4c6
Fix double addition in init map update 2018-08-24 02:48:59 +02:00
Ayke van Laethem
179cf74b01
Implement package-global maps (of max 8 entries) 2018-08-24 00:56:20 +02:00
Ayke van Laethem
2b78b6d7e8
Fix bug in runtime.memzero
Not the memory itself, but the byte after the memory was zeroed.
2018-08-23 23:45:39 +02:00
Ayke van Laethem
e884221fad
Implement len() for map types 2018-08-23 23:14:54 +02:00
Ayke van Laethem
005665aee6
Move hashmap creation to runtime 2018-08-23 23:13:38 +02:00
Ayke van Laethem
ae2fc3c8a7
Add support for package-level slice variables
They are initialized from .data and not at init time.
2018-08-23 22:08:03 +02:00
Ayke van Laethem
c99faf468d
Refactor initializing of global data
This makes it easier to add more types.
2018-08-23 22:04:48 +02:00
Ayke van Laethem
160d532498
Fix init functions
This was broken in commit 574c7ec047 and
broke the nrf port.
2018-08-23 21:59:09 +02:00
Ayke van Laethem
ea6355b39e
Make parseConvert not require frame parameter 2018-08-22 23:42:40 +02:00
Ayke van Laethem
d5c7c28135
Simplify some code 2018-08-22 05:14:15 +02:00
Ayke van Laethem
3a6ef38041
Preliminary implementation of a hashmap, unfinished
Missing features:
  * keys other than strings
  * more than 8 values in the hashmap
  * growing a map when needed
  * initial size hint
  * delete(m, key)
  * iterators (for range)
  * initializing global maps
  * ...more?
2018-08-22 04:50:24 +02:00
Ayke van Laethem
8fb9cd4e23
Implement shifting with a differently-sized integer 2018-08-22 04:35:25 +02:00
Ayke van Laethem
337e48270b
Implement comparing a pointer to nil 2018-08-22 04:33:09 +02:00
Ayke van Laethem
c3cb22030f
Implement == and != for strings 2018-08-22 00:56:11 +02:00
Ayke van Laethem
2777f8464e
Implement printing of booleans 2018-08-22 00:54:39 +02:00
Ayke van Laethem
a30ffa5c1e
Revert "Move coroutine passes from Makefile to compiler itself"
This reverts commit d9ca5f97fb.

There is a problem with coroutines that I haven't solved yet. Reverting
makes it work, for now.

Also, use a better coroutines flag for the LLVM opt tool.
2018-08-20 20:24:54 +02:00
Ayke van Laethem
df4ee6e733
passes: Fix bug in SimpleDCE
Main was included twice, leading to problems with coroutines.
2018-08-20 20:08:11 +02:00
Ayke van Laethem
6739ad07b2
Update nrfx submodule 2018-08-20 05:21:48 +02:00
Ayke van Laethem
d9ca5f97fb
Move coroutine passes from Makefile to compiler itself
This is much more convenient.
2018-08-20 04:31:01 +02:00
Ayke van Laethem
03c8a8bd3a
README: Add build guide 2018-08-20 04:19:54 +02:00
Ayke van Laethem
7460e10894
Add dead code elimination (DCE) pass
This should make it much easier (in the future) to use the standard
library when unused functions contain unimplemented features. But more
importantly, it makes later passes better and makes compiling faster by
not having to scan dead code.
2018-08-19 20:47:58 +02:00