tinygo/compiler
Ayke van Laethem 86f1e6aec4 compiler: properly implement div and rem operations
The division and remainder operations were lowered directly to LLVM IR.
This is wrong however because the Go specification defines exactly what
happens on a divide by zero or signed integer overflow and LLVM IR
itself treats those cases as undefined behavior. Therefore, this commit
implements divide by zero and signed integer overflow according to the
Go specification.

This does have an impact on the generated code, but it is surprisingly
small. I've used the drivers repo to test the code before and after, and
to my surprise most driver smoke tests are not changed at all. Those
that are, have only a small increase in code size. At the same time,
this change makes TinyGo more compliant to the Go specification.
2021-10-28 15:55:02 +02:00
..
ircheck compiler: move IR checker to separate package 2020-03-21 15:45:25 +01:00
llvmutil compiler: move settings to a separate Config struct 2021-01-29 14:49:58 +01:00
testdata compiler: properly implement div and rem operations 2021-10-28 15:55:02 +02: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 compiler: work around an ARM backend bug in LLVM 2021-02-03 14:49:41 +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 compiler: properly implement div and rem operations 2021-10-28 15:55:02 +02:00
compiler_test.go main: test other architectures by specifying a different GOARCH 2021-10-04 18:22:55 +02:00
defer.go builder, compiler: compile and cache packages in parallel 2021-03-21 11:51:35 +01:00
errors.go all: fix staticcheck warnings 2021-09-27 15:47:12 +02:00
func.go compiler: decouple func lowering from interface type codes 2021-04-12 12:07:42 +02:00
gc.go compiler: track the result of string concatenation 2020-04-02 14:04:25 +02:00
goroutine.go compiler: add nounwind attribute 2021-10-25 13:39:54 +02:00
inlineasm.go all: fix staticcheck warnings 2021-09-27 15:47:12 +02:00
interface.go compiler: add nounwind attribute 2021-10-25 13:39:54 +02:00
interrupt.go Support chained interrupt handlers 2021-05-25 20:44:49 +02:00
intrinsics.go compiler: move LLVM math builtin support into the compiler 2021-08-10 20:08:27 +02:00
llvm.go all: fix staticcheck warnings 2021-09-27 15:47:12 +02: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 compiler: add nounwind attribute 2021-10-25 13:39:54 +02: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