mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-07-26 06:38:42 +00:00
sync/atomic: add And* and Or* compiler intrinsics needed for Go 1.23
This commit is contained in:
committed by
Ron Evans
parent
4d60d679d3
commit
b51cda9721
@@ -15,6 +15,16 @@ func (b *builder) createAtomicOp(name string) llvm.Value {
|
|||||||
oldVal := b.CreateAtomicRMW(llvm.AtomicRMWBinOpAdd, ptr, val, llvm.AtomicOrderingSequentiallyConsistent, true)
|
oldVal := b.CreateAtomicRMW(llvm.AtomicRMWBinOpAdd, ptr, val, llvm.AtomicOrderingSequentiallyConsistent, true)
|
||||||
// Return the new value, not the original value returned by atomicrmw.
|
// Return the new value, not the original value returned by atomicrmw.
|
||||||
return b.CreateAdd(oldVal, val, "")
|
return b.CreateAdd(oldVal, val, "")
|
||||||
|
case "AndInt32", "AndInt64", "AndUint32", "AndUint64", "AndUintptr":
|
||||||
|
ptr := b.getValue(b.fn.Params[0], getPos(b.fn))
|
||||||
|
val := b.getValue(b.fn.Params[1], getPos(b.fn))
|
||||||
|
oldVal := b.CreateAtomicRMW(llvm.AtomicRMWBinOpAnd, ptr, val, llvm.AtomicOrderingSequentiallyConsistent, true)
|
||||||
|
return oldVal
|
||||||
|
case "OrInt32", "OrInt64", "OrUint32", "OrUint64", "OrUintptr":
|
||||||
|
ptr := b.getValue(b.fn.Params[0], getPos(b.fn))
|
||||||
|
val := b.getValue(b.fn.Params[1], getPos(b.fn))
|
||||||
|
oldVal := b.CreateAtomicRMW(llvm.AtomicRMWBinOpOr, ptr, val, llvm.AtomicOrderingSequentiallyConsistent, true)
|
||||||
|
return oldVal
|
||||||
case "SwapInt32", "SwapInt64", "SwapUint32", "SwapUint64", "SwapUintptr", "SwapPointer":
|
case "SwapInt32", "SwapInt64", "SwapUint32", "SwapUint64", "SwapUintptr", "SwapPointer":
|
||||||
ptr := b.getValue(b.fn.Params[0], getPos(b.fn))
|
ptr := b.getValue(b.fn.Params[0], getPos(b.fn))
|
||||||
val := b.getValue(b.fn.Params[1], getPos(b.fn))
|
val := b.getValue(b.fn.Params[1], getPos(b.fn))
|
||||||
|
|||||||
Reference in New Issue
Block a user