/
wmemmove.c.i.go
40 lines (38 loc) · 998 Bytes
/
wmemmove.c.i.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package libc
import unsafe "unsafe"
func wmemmove(d *uint32, s *uint32, n uint64) *uint32 {
var d0 *uint32 = d
if uintptr(unsafe.Pointer(d)) == uintptr(unsafe.Pointer((*uint32)(unsafe.Pointer(s)))) {
return d
}
if uint64(uintptr(unsafe.Pointer(d)))-uint64(uintptr(unsafe.Pointer(s))) < n*4 {
for func() (_cgo_ret uint64) {
_cgo_addr := &n
_cgo_ret = *_cgo_addr
*_cgo_addr--
return
}() != 0 {
*(*uint32)(unsafe.Pointer(uintptr(unsafe.Pointer(d)) + uintptr(n)*4)) = *(*uint32)(unsafe.Pointer(uintptr(unsafe.Pointer(s)) + uintptr(n)*4))
}
} else {
for func() (_cgo_ret uint64) {
_cgo_addr := &n
_cgo_ret = *_cgo_addr
*_cgo_addr--
return
}() != 0 {
*func() (_cgo_ret *uint32) {
_cgo_addr := &d
_cgo_ret = *_cgo_addr
*(*uintptr)(unsafe.Pointer(_cgo_addr)) += 4
return
}() = *func() (_cgo_ret *uint32) {
_cgo_addr := &s
_cgo_ret = *_cgo_addr
*(*uintptr)(unsafe.Pointer(_cgo_addr)) += 4
return
}()
}
}
return d0
}