aboutsummaryrefslogtreecommitdiffhomepage
path: root/compiler
diff options
context:
space:
mode:
authorAyke van Laethem <[email protected]>2024-06-22 17:13:04 +0200
committerRon Evans <[email protected]>2024-06-25 09:27:31 +0200
commit6abaee464031bfe41a9421c6e5f6563903abbafb (patch)
tree80fa1857edd5d128829c378ad289b31fb31827c9 /compiler
parent1270a501044c97a4a2aa057f4fa87ef679478953 (diff)
downloadtinygo-6abaee464031bfe41a9421c6e5f6563903abbafb.tar.gz
tinygo-6abaee464031bfe41a9421c6e5f6563903abbafb.zip
compiler: remove old atomics workaround for AVR
The bug should have been fixed in any LLVM version that we currently support.
Diffstat (limited to 'compiler')
-rw-r--r--compiler/atomic.go17
1 files changed, 0 insertions, 17 deletions
diff --git a/compiler/atomic.go b/compiler/atomic.go
index 006da5ef8..4ba69c396 100644
--- a/compiler/atomic.go
+++ b/compiler/atomic.go
@@ -1,9 +1,6 @@
package compiler
import (
- "fmt"
- "strings"
-
"tinygo.org/x/go-llvm"
)
@@ -15,20 +12,6 @@ func (b *builder) createAtomicOp(name string) llvm.Value {
case "AddInt32", "AddInt64", "AddUint32", "AddUint64", "AddUintptr":
ptr := b.getValue(b.fn.Params[0], getPos(b.fn))
val := b.getValue(b.fn.Params[1], getPos(b.fn))
- if strings.HasPrefix(b.Triple, "avr") {
- // AtomicRMW does not work on AVR as intended:
- // - There are some register allocation issues (fixed by https://reviews.llvm.org/D97127 which is not yet in a usable LLVM release)
- // - The result is the new value instead of the old value
- vType := val.Type()
- name := fmt.Sprintf("__sync_fetch_and_add_%d", vType.IntTypeWidth()/8)
- fn := b.mod.NamedFunction(name)
- if fn.IsNil() {
- fn = llvm.AddFunction(b.mod, name, llvm.FunctionType(vType, []llvm.Type{ptr.Type(), vType}, false))
- }
- oldVal := b.createCall(fn.GlobalValueType(), fn, []llvm.Value{ptr, val}, "")
- // Return the new value, not the original value returned.
- return b.CreateAdd(oldVal, val, "")
- }
oldVal := b.CreateAtomicRMW(llvm.AtomicRMWBinOpAdd, ptr, val, llvm.AtomicOrderingSequentiallyConsistent, true)
// Return the new value, not the original value returned by atomicrmw.
return b.CreateAdd(oldVal, val, "")