tinygo/compiler
Ayke van Laethem edcece33ca transform: refactor interrupt lowering
Instead of doing everything in the interrupt lowering pass, generate
some more code in gen-device to declare interrupt handler functions and
do some work in the compiler so that interrupt lowering becomes a lot
simpler.

This has several benefits:

  - Overall code is smaller, in particular the interrupt lowering pass.
  - The code should be a bit less "magical" and instead a bit easier to
    read. In particular, instead of having a magic
    runtime.callInterruptHandler (that is fully written by the interrupt
    lowering pass), the runtime calls a generated function like
    device/sifive.InterruptHandler where this switch already exists in
    code.
  - Debug information is improved. This can be helpful during actual
    debugging but is also useful for other uses of DWARF debug
    information.

For an example on debug information improvement, this is what a
backtrace might look like before this commit:

    Breakpoint 1, 0x00000b46 in UART0_IRQHandler ()
    (gdb) bt
    #0  0x00000b46 in UART0_IRQHandler ()
    #1  <signal handler called>
    [..etc]

Notice that the debugger doesn't see the source code location where it
has stopped.

After this commit, breaking at the same line might look like this:

    Breakpoint 1, (*machine.UART).handleInterrupt (arg1=..., uart=<optimized out>) at /home/ayke/src/github.com/tinygo-org/tinygo/src/machine/machine_nrf.go:200
    200			uart.Receive(byte(nrf.UART0.RXD.Get()))
    (gdb) bt
    #0  (*machine.UART).handleInterrupt (arg1=..., uart=<optimized out>) at /home/ayke/src/github.com/tinygo-org/tinygo/src/machine/machine_nrf.go:200
    #1  UART0_IRQHandler () at /home/ayke/src/github.com/tinygo-org/tinygo/src/device/nrf/nrf51.go:176
    #2  <signal handler called>
    [..etc]

By now, the debugger sees an actual source location for UART0_IRQHandler
(in the generated file) and an inlined function.
2021-11-06 09:40:15 +01:00
..
ircheck compiler: move IR checker to separate package 2020-03-21 15:45:25 +01:00
llvmutil compiler: change symbol name for string and packed data constants 2021-11-03 16:28:04 +01:00
testdata targets: match LLVM triple to the one Clang uses 2021-11-05 09:42:00 +01:00
alias.go fix export math functions issue 2021-10-03 16:28:34 +02:00
asserts.go compiler: properly implement div and rem operations 2021-10-28 15:55:02 +02:00
atomic.go targets: match LLVM triple to the one Clang uses 2021-11-05 09:42:00 +01:00
calls.go all: fix staticcheck warnings 2021-09-27 15:47:12 +02:00
channel.go compiler: avoid zero-sized alloca in channel operations 2021-09-09 11:24:52 +02:00
compiler.go transform: refactor interrupt lowering 2021-11-06 09:40:15 +01:00
compiler_test.go compiler: add object layout information to heap allocations 2021-11-02 22:16:15 +01:00
defer.go compiler, runtime: add layout parameter to runtime.alloc 2021-11-02 22:16:15 +01:00
errors.go all: fix staticcheck warnings 2021-09-27 15:47:12 +02:00
func.go transform: refactor interrupt lowering 2021-11-06 09:40:15 +01:00
gc.go compiler: track the result of string concatenation 2020-04-02 14:04:25 +02:00
goroutine.go compiler: add support for the go keyword on interface methods 2021-10-31 14:17:25 +01:00
inlineasm.go all: fix staticcheck warnings 2021-09-27 15:47:12 +02:00
interface.go compiler: refactor when the optsize attribute is set 2021-11-03 13:40:13 +01:00
interrupt.go transform: refactor interrupt lowering 2021-11-06 09:40:15 +01:00
intrinsics.go compiler: move LLVM math builtin support into the compiler 2021-08-10 20:08:27 +02:00
llvm.go compiler: change symbol name for string and packed data constants 2021-11-03 16:28:04 +01:00
map.go compiler: refactor map operations to use the builder object 2020-03-25 20:17:46 +01:00
sizes.go reflect: implement Sizeof and Alignof for func values 2021-03-29 01:04:11 +02:00
symbol.go transform: refactor interrupt lowering 2021-11-06 09:40:15 +01:00
syscall.go compiler: implement syscall.rawSyscallNoError in inline assembly 2021-06-25 16:14:47 +02:00
volatile.go compiler: do not perform nil checking when indexing slices 2020-03-27 07:38:16 +01:00