mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-09-09 22:19:29 +00:00
compiler: fix 64-bit sin and cos on AVR
This commit is contained in:
@@ -201,6 +201,17 @@ func (b *builder) defineMathOp() bool {
|
|||||||
if !ok {
|
if !ok {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
if strings.HasPrefix(b.Triple, "avr") {
|
||||||
|
// LLVM assumes the traditional AVR ABI where double is 32 bits and
|
||||||
|
// therefore does not provide f64 runtime libcalls for sin and cos.
|
||||||
|
// TinyGo uses 64-bit doubles on AVR, which picolibc supports directly.
|
||||||
|
switch b.fn.Name() {
|
||||||
|
case "Cos":
|
||||||
|
llvmName = "cos"
|
||||||
|
case "Sin":
|
||||||
|
llvmName = "sin"
|
||||||
|
}
|
||||||
|
}
|
||||||
if strings.HasSuffix(b.Triple, "-wasi") || llvmutil.Version() < 19 {
|
if strings.HasSuffix(b.Triple, "-wasi") || llvmutil.Version() < 19 {
|
||||||
// We don't have a real libc for wasip2. Until that is fixed, we need to
|
// We don't have a real libc for wasip2. Until that is fixed, we need to
|
||||||
// limit math intrinsics on WASI to a subset supported natively in
|
// limit math intrinsics on WASI to a subset supported natively in
|
||||||
|
|||||||
+4
-4
@@ -370,10 +370,6 @@ func runPlatTests(options compileopts.Options, tests []string, t *testing.T) {
|
|||||||
// Too big for AVR. Doesn't fit in flash/RAM.
|
// Too big for AVR. Doesn't fit in flash/RAM.
|
||||||
continue
|
continue
|
||||||
|
|
||||||
case "math.go":
|
|
||||||
// LLVM fails to lower one of the required library calls.
|
|
||||||
continue
|
|
||||||
|
|
||||||
case "cgo/":
|
case "cgo/":
|
||||||
// CGo function pointers don't work on AVR (needs LLVM 16 and
|
// CGo function pointers don't work on AVR (needs LLVM 16 and
|
||||||
// some compiler changes).
|
// some compiler changes).
|
||||||
@@ -432,6 +428,10 @@ func runPlatTests(options compileopts.Options, tests []string, t *testing.T) {
|
|||||||
if name == "finalizerinvariants.go" || name == "finalizerlarge.go" {
|
if name == "finalizerinvariants.go" || name == "finalizerlarge.go" {
|
||||||
testOptions.Tags = append(append([]string(nil), options.Tags...), "runtime_asserts")
|
testOptions.Tags = append(append([]string(nil), options.Tags...), "runtime_asserts")
|
||||||
}
|
}
|
||||||
|
if testOptions.Target == "simavr" && name == "math.go" {
|
||||||
|
// This test exceeds simavr's default 384-byte goroutine stack.
|
||||||
|
testOptions.StackSize = 512
|
||||||
|
}
|
||||||
runTest(name, testOptions, t, nil, nil)
|
runTest(name, testOptions, t, nil, nil)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user