Commit Graph

318 Commits

Author SHA1 Message Date
Ron Evans fc0ff3a987 avr: initial implementation for PWM
Signed-off-by: Ron Evans <ron@hybridgroup.com>

Edited slightly by Ayke van Laethem
2018-09-17 14:03:05 +02:00
Ayke van Laethem 94358959f5 compiler: fix unsafe.Sizeof and friends for AVR
This fixes runtime.printptr().
2018-09-16 20:42:10 +02:00
Ayke van Laethem e04f0868ed compiler: fix constant globals on AVR
Turn const globals into non-const globals, at least until pointers have
the correct address space attribute.
2018-09-16 16:31:38 +02:00
Ayke van Laethem a02426948b avr: implement .data section
This doesn't completely work for some reason as the first character of
.data is corrupted, but otherwise it works.
2018-09-16 16:26:04 +02:00
Ayke van Laethem 39e3fe28db avr: convert initialization from asm to Go
This increases code size by 1 instruction (2 bytes) because LLVM isn't
yet smart enough to recognize that it doesn't need to clear a register
to use 0: it can just use r1 which is always 0 according to the
convention. It makes initialization a lot easier to read, however.
2018-09-16 15:03:48 +02:00
Ayke van Laethem 0d8a7e1666 avr: link with the GCC runtime library
This allows the use of some compiler-generated builtins that are
hopefully compatible with LLVM. Example: println(uint8(foo))

Code size is unchanged normally but of course compiler builtins will
increase code size when actually used (for example with division).
2018-09-16 14:54:10 +02:00
Ayke van Laethem a25e598463 compiler: truncate output files before writing 2018-09-16 13:41:56 +02:00
Ayke van Laethem 35fe24981f runtime/unix: panic: call abort() instead of exit(2)
abort() will cause gdb to show a backtrace when running inside the
debugger, and abort() seems more appropriate anyway for critical errors.
2018-09-16 13:01:15 +02:00
Ayke van Laethem 1484bb5c2c all: basic support for the os package
The resulting binary is pretty big due to lacking optimizations
(probably because of interfaces), so that should be fixed.
2018-09-16 13:01:03 +02:00
Ayke van Laethem c237633d34 all: use a custom sync package
The sync package is strongly tied to the runtime, so it's easier to
implement a new one. Besides, it's pretty big so it's better to replace
it.
2018-09-15 18:51:51 +02:00
Ayke van Laethem 94b18e2d79 compiler: support integer convert in interpreter 2018-09-15 18:47:15 +02:00
Ayke van Laethem 1d2e0cd259 compiler: don't show DebugRef with -dumpssa 2018-09-15 18:45:46 +02:00
Ayke van Laethem 2a20c0c7f0 all: rewrite sleep function
time.Sleep now compiles on all systems, so lets use that.
Additionally, do a few improvements in time unit handling for the
scheduler. This should lead to somewhat longer sleep durations without
wrapping (on some platforms).

Some examples got smaller, some got bigger. In particular, code using
the scheduler got bigger and the blinky1 example got smaller (especially
on Arduino: 380 -> 314 bytes).
2018-09-15 01:58:54 +02:00
Ayke van Laethem 1ac67cf8de compiler: adding a few more ignored init calls
These calls are generated in the JavaScript target (syscall/js and
syscall with GOOS=js), but they are not used at the moment. So ignore
them until they're needed.
2018-09-15 01:04:19 +02:00
Ayke van Laethem 38efc5653d compiler: support compile-time hashmap with int keys 2018-09-15 01:03:22 +02:00
Ayke van Laethem 152e12e4b0 all: implement iterating over hashmaps
Still no support for hashmaps > 8 entries, but this kind of works.
2018-09-15 00:29:34 +02:00
Ayke van Laethem 5b4b6cfee2 compiler: use -dumpssa flag in interpreter
This is useful for debugging.
2018-09-14 23:29:33 +02:00
Ayke van Laethem 866a6edb5f compiler: fix word size for AVR
Using a word size less than 4 led to typechecker errors.
2018-09-14 21:36:51 +02:00
Ayke van Laethem 327076da39 examples/test: add slice-a-slice test 2018-09-14 21:02:29 +02:00
Ayke van Laethem 1387a1024d examples/test: small cleanup
I forgot to remove some commented out code...
2018-09-14 21:00:52 +02:00
Ayke van Laethem 112f6dc01a all: implement tinygo flash command
This will now just work:

    tinygo flash -target=arduino examples/blinky1
2018-09-14 20:59:28 +02:00
Ayke van Laethem 6450daa3c8 runtime/cgo: go fmt 2018-09-14 20:58:00 +02:00
Ayke van Laethem 13633133a5 Makefile: simplify make fmt
There is no C source file anymore `go fmt` will complain about.
2018-09-14 20:57:21 +02:00
Ayke van Laethem 09cbd223c3 compiler: remove -runtime flag
It is not necessary anymore.
2018-09-14 20:56:48 +02:00
Ayke van Laethem c763e9f1a6 compiler: produce .hex files directly 2018-09-14 20:27:04 +02:00
Ayke van Laethem f41a8032e7 machine/dummy: add fake button pins 2018-09-14 17:01:16 +02:00
Ayke van Laethem 752332ff13 machine/nrf: implement reading GPIO pins 2018-09-14 16:59:28 +02:00
Ron Evans ab6757fe11 avr: implement Get() function on AVR, and leave stubs for NRF and dummy machines
Signed-off-by: Ron Evans <ron@hybridgroup.com>
2018-09-13 20:54:01 +02:00
Ayke van Laethem ec50db729d compiler: implement slicing slices 2018-09-13 20:49:35 +02:00
Ayke van Laethem 5b3ef2c02f compiler: fix unreachable type assert
The unreachable instruction is actually a block terminator so may only
be inserted at the end of a basic block. This is not always the case for
type asserts, so don't insert this instruction.

LLVM will hopefully optimize it anyway when it realizes anything after
the panic() call is unreachable.
2018-09-13 20:48:23 +02:00
Ayke van Laethem 9cd7c7f0ba compiler: fix phi nodes for type asserts
Type asserts insert more basic block, causing phi node values to be
invalid. Fix this by remembering the outgoing LLVM basic block.
2018-09-13 20:42:04 +02:00
Ayke van Laethem 57661a3c76 compiler: fix typeassert without comma-ok for unused types 2018-09-13 16:58:44 +02:00
Ron Evans d948abdf82 avr: correct register for Set() operation on pins 0-7
Signed-off-by: Ron Evans <ron@hybridgroup.com>
2018-09-13 12:03:04 +02:00
Ayke van Laethem 76e77917d8 targets: move target-specific files to this directory 2018-09-13 00:59:39 +02:00
Ayke van Laethem e389d38dec Makefile: improve gen-device* commands 2018-09-13 00:55:49 +02:00
Ayke van Laethem 18b3e8d156 gen-device: move to new tools directory 2018-09-13 00:55:18 +02:00
Ayke van Laethem a46ed465c5 README: defer has been fully implemented 2018-09-13 00:31:43 +02:00
Ayke van Laethem 422c848163 README: fix nrf example and add arduino example 2018-09-13 00:23:53 +02:00
Ayke van Laethem 7e7502a990 README: update build instructions 2018-09-13 00:23:45 +02:00
Ayke van Laethem 5e9e3bd1a0 Makefile: use the compiler driver directly 2018-09-12 23:55:13 +02:00
Ayke van Laethem 76a513802f targets/pca10040: support linking from within the compiler
This is kind of dirty with that huge list of linker params, but it works
and it produces smaller object files (probably because GCC is better
optimized for size).
2018-09-12 23:40:21 +02:00
Ayke van Laethem 8ce139284a all: remove last traces of the C runtime
This increases code size on the nrf, but it is a fixed increase and can
hopefully be reduced in the future.
The Makefile gets a lot smaller with this which is a huge advantage
(less build time complexity).
2018-09-12 23:26:30 +02:00
Ayke van Laethem f7f7d4cbbc runtime/nrf: translate nrf sleep function from C to Go
This is the last critical part of the C runtime.

Code size is reduced by 4 bytes for examples/blinky2 (probably due to
inlining) and is unchanged for examples/test.
2018-09-12 22:24:17 +02:00
Ayke van Laethem 67e33ac30e gen-device-svd: add _Pos and _Msk fields
Without these extra fields, it is impossible to read/write some register
bits correctly.
2018-09-12 22:06:42 +02:00
Ayke van Laethem 2788ab0172 all: rename __reg to __volatile
It is less magical now: it only marks loads and stores as volatile. So
the name '__reg' is a bit wrong now.
2018-09-12 22:05:41 +02:00
Ayke van Laethem 914cd56ca5 all: support Arduino in the compiler driver
This makes sure the compiler itself can build/link an ELF file that
works on an Arduino.
2018-09-12 20:55:50 +02:00
Ayke van Laethem 865520b571 compiler: act as a compiler driver (on unix systems)
As a final step, link the object file with the system compiler/linker.
TODO: cross compiling.
2018-09-12 19:59:13 +02:00
Ayke van Laethem 6ab2b30984 compiler: move output file type selection to main.go 2018-09-12 19:11:50 +02:00
Ayke van Laethem 9bec479041 all: make targets configurable with a JSON file
This is intentionally similar to the target specifications in Rust:
https://doc.rust-lang.org/nightly/nightly-rustc/rustc_target/spec/struct.TargetOptions.html
2018-09-12 18:28:39 +02:00
Ayke van Laethem 20c2552f8a compiler: add 'run' command for bytecode interpretation 2018-09-12 17:26:56 +02:00