diff options
author | Ayke van Laethem <[email protected]> | 2024-06-22 17:13:04 +0200 |
---|---|---|
committer | Ron Evans <[email protected]> | 2024-06-25 09:27:31 +0200 |
commit | 6abaee464031bfe41a9421c6e5f6563903abbafb (patch) | |
tree | 80fa1857edd5d128829c378ad289b31fb31827c9 | |
parent | 1270a501044c97a4a2aa057f4fa87ef679478953 (diff) | |
download | tinygo-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.
-rw-r--r-- | compiler/atomic.go | 17 |
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, "") |