mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-05 11:37:46 +00:00
avr: drop GNU toolchain dependency
- Use compiler-rt and picolibc instead of avr-libc. - Use ld.lld instead of avr-ld (or avr-gcc). This makes it much easier to get started with TinyGo on AVR because installing these extra tools (gcc-avr, avr-libc) can be a hassle. It also opens the door for future improvements such as ThinLTO. There is a code size increase but I think it's worth it in the long run. The code size increase can hopefully be reduced with improvements to the LLVM AVR backend and to compiler-rt.
This commit is contained in:
committed by
Ron Evans
parent
b9bb605257
commit
df888acd5e
@@ -37,3 +37,39 @@ func procPin() {
|
||||
func procUnpin() {
|
||||
interrupt.Restore(procPinnedMask)
|
||||
}
|
||||
|
||||
// The following functions are workarounds for things missing in compiler-rt.
|
||||
// They will likely need special assembly implementations.
|
||||
|
||||
//export __mulsi3
|
||||
func __mulsi3(a, b uint32) uint32 {
|
||||
var r uint32
|
||||
for a != 0 {
|
||||
if a&1 != 0 {
|
||||
r += b
|
||||
}
|
||||
a >>= 1
|
||||
b <<= 1
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
//export __divsi3
|
||||
func __divsi3(a, b int32) int32
|
||||
|
||||
//export __udivsi3
|
||||
func __udivsi3(a, b uint32) uint32
|
||||
|
||||
//export __divmodsi4
|
||||
func __divmodsi4(a, b int32) uint64 {
|
||||
d := __divsi3(a, b)
|
||||
rem := a - (d * b)
|
||||
return uint64(uint32(d)) | uint64(uint32(rem))<<32
|
||||
}
|
||||
|
||||
//export __udivmodsi4
|
||||
func __udivmodsi4(a, b uint32) uint64 {
|
||||
d := __udivsi3(a, b)
|
||||
rem := a - (d * b)
|
||||
return uint64(d) | uint64(rem)<<32
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user