diff --git a/cl/_testlibgo/_atomic/in.go b/cl/_testlibgo/atomic/in.go similarity index 100% rename from cl/_testlibgo/_atomic/in.go rename to cl/_testlibgo/atomic/in.go diff --git a/internal/build/build.go b/internal/build/build.go index c8744e42..552a71f1 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -413,7 +413,8 @@ type aPackage struct { type none struct{} var hasAltPkg = map[string]none{ - "math": {}, + "math": {}, + "sync/atomic": {}, } type importer = func(pkgPath string) *packages.Package diff --git a/internal/lib/sync/atomic/atomic.go b/internal/lib/sync/atomic/atomic.go new file mode 100644 index 00000000..f62c5356 --- /dev/null +++ b/internal/lib/sync/atomic/atomic.go @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2024 The GoPlus Authors (goplus.org). All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package atomic + +// llgo:skip init +import ( + _ "unsafe" +) + +const ( + LLGoPackage = true +) + +//go:linkname cAddInt64 llgo.atomicAdd +func cAddInt64(addr *int64, delta int64) (old int64) + +func AddInt64(addr *int64, delta int64) (new int64) { + return cAddInt64(addr, delta) + delta +}