detached 1491ef7

purego: add Objective-C runtime bindings (#11)

commit
1491ef70dbf7295267f2db9ac6dc112232844eb2
author
TotallyGamerJet · · 2022-07-24 15:27 UTC
committer
GitHub · · 2022-07-24 15:27 UTC
parent
0a71637
signature
GPG Unverified4AEE18F83AFDEB23 The key is unknown
16 files · +6673 -24
M README.md +9 -0
@@ -2,3 +2,12 @@
22 [![Go Reference](https://pkg.go.dev/badge/github.com/ebitengine/purego?GOOS=darwin.svg)](https://pkg.go.dev/github.com/ebitengine/purego?GOOS=darwin)
33
44 A library for calling C functions from Go without Cgo.
5+
6+### External Code
7+
8+Purego uses code that originates from the Go runtime. These files are under the BSD-3
9+License that can be found [in the Go Source](https://github.com/golang/go/blob/master/LICENSE).
10+This is a list of the copied files:
11+
12+* `zcallback_darwin_*.s` from package `runtime`
13+* `internal/abi/abi_*.h` from package `runtime/cgo`⏎̸
@@ -2,3 +2,12 @@
2 [![Go Reference](https://pkg.go.dev/badge/github.com/ebitengine/purego?GOOS=darwin.svg)](https://pkg.go.dev/github.com/ebitengine/purego?GOOS=darwin)2 [![Go Reference](https://pkg.go.dev/badge/github.com/ebitengine/purego?GOOS=darwin.svg)](https://pkg.go.dev/github.com/ebitengine/purego?GOOS=darwin)
3 3
4 A library for calling C functions from Go without Cgo.4 A library for calling C functions from Go without Cgo.
5+
6+### External Code
7+
8+Purego uses code that originates from the Go runtime. These files are under the BSD-3
9+License that can be found [in the Go Source](https://github.com/golang/go/blob/master/LICENSE).
10+This is a list of the copied files:
11+
12+* `zcallback_darwin_*.s` from package `runtime`
13+* `internal/abi/abi_*.h` from package `runtime/cgo`⏎̸
M dlfcn.go +5 -17
@@ -1,5 +1,5 @@
11 // SPDX-License-Identifier: Apache-2.0
2-// SPDX-FileCopyrightText: 2022 The Ebiten Authors
2+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
33
44 //go:build darwin
55 // +build darwin
@@ -9,35 +9,23 @@ package purego
99 import (
1010 "runtime"
1111 "unsafe"
12+
13+ "github.com/ebitengine/purego/internal/strings"
1214 )
1315
1416 const RTLD_GLOBAL = 0x8
1517
1618 const RTLD_DEFAULT = ^uintptr(1)
1719
18-// hasSuffix tests whether the string s ends with suffix.
19-func hasSuffix(s, suffix string) bool {
20- return len(s) >= len(suffix) && s[len(s)-len(suffix):] == suffix
21-}
22-
23-func cString(name string) *byte {
24- if hasSuffix(name, "\x00") {
25- return &(*(*[]byte)(unsafe.Pointer(&name)))[0]
26- }
27- var b = make([]byte, len(name)+1)
28- copy(b, name)
29- return &b[0]
30-}
31-
3220 func Dlopen(name string, mode int) uintptr {
33- bs := cString(name)
21+ bs := strings.CString(name)
3422 ret, _, _ := SyscallN(dlopenABI0, uintptr(unsafe.Pointer(bs)), uintptr(mode), 0)
3523 runtime.KeepAlive(bs)
3624 return ret
3725 }
3826
3927 func Dlsym(handle uintptr, name string) uintptr {
40- bs := cString(name)
28+ bs := strings.CString(name)
4129 ret, _, _ := SyscallN(dlsymABI0, handle, uintptr(unsafe.Pointer(bs)), 0)
4230 runtime.KeepAlive(bs)
4331 return ret
@@ -1,5 +1,5 @@
1 // SPDX-License-Identifier: Apache-2.01 // SPDX-License-Identifier: Apache-2.0
2-// SPDX-FileCopyrightText: 2022 The Ebiten Authors2+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
3 3
4 //go:build darwin4 //go:build darwin
5 // +build darwin5 // +build darwin
@@ -9,35 +9,23 @@ package purego
9 import (9 import (
10 "runtime"10 "runtime"
11 "unsafe"11 "unsafe"
12+
13+ "github.com/ebitengine/purego/internal/strings"
12 )14 )
13 15
14 const RTLD_GLOBAL = 0x816 const RTLD_GLOBAL = 0x8
15 17
16 const RTLD_DEFAULT = ^uintptr(1)18 const RTLD_DEFAULT = ^uintptr(1)
17 19
18-// hasSuffix tests whether the string s ends with suffix.
19-func hasSuffix(s, suffix string) bool {
20- return len(s) >= len(suffix) && s[len(s)-len(suffix):] == suffix
21-}
22-
23-func cString(name string) *byte {
24- if hasSuffix(name, "\x00") {
25- return &(*(*[]byte)(unsafe.Pointer(&name)))[0]
26- }
27- var b = make([]byte, len(name)+1)
28- copy(b, name)
29- return &b[0]
30-}
31-
32 func Dlopen(name string, mode int) uintptr {20 func Dlopen(name string, mode int) uintptr {
33- bs := cString(name)21+ bs := strings.CString(name)
34 ret, _, _ := SyscallN(dlopenABI0, uintptr(unsafe.Pointer(bs)), uintptr(mode), 0)22 ret, _, _ := SyscallN(dlopenABI0, uintptr(unsafe.Pointer(bs)), uintptr(mode), 0)
35 runtime.KeepAlive(bs)23 runtime.KeepAlive(bs)
36 return ret24 return ret
37 }25 }
38 26
39 func Dlsym(handle uintptr, name string) uintptr {27 func Dlsym(handle uintptr, name string) uintptr {
40- bs := cString(name)28+ bs := strings.CString(name)
41 ret, _, _ := SyscallN(dlsymABI0, handle, uintptr(unsafe.Pointer(bs)), 0)29 ret, _, _ := SyscallN(dlsymABI0, handle, uintptr(unsafe.Pointer(bs)), 0)
42 runtime.KeepAlive(bs)30 runtime.KeepAlive(bs)
43 return ret31 return ret
M dlfcn_darwin.go +1 -1
@@ -1,5 +1,5 @@
11 // SPDX-License-Identifier: Apache-2.0
2-// SPDX-FileCopyrightText: 2022 The Ebiten Authors
2+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
33
44 package purego
55
@@ -1,5 +1,5 @@
1 // SPDX-License-Identifier: Apache-2.01 // SPDX-License-Identifier: Apache-2.0
2-// SPDX-FileCopyrightText: 2022 The Ebiten Authors2+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
3 3
4 package purego4 package purego
5 5
M dlfcn_stubs.s +1 -1
@@ -1,5 +1,5 @@
11 // SPDX-License-Identifier: Apache-2.0
2-// SPDX-FileCopyrightText: 2022 The Ebiten Authors
2+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
33
44 //go:build darwin
55 // +build darwin
@@ -1,5 +1,5 @@
1 // SPDX-License-Identifier: Apache-2.01 // SPDX-License-Identifier: Apache-2.0
2-// SPDX-FileCopyrightText: 2022 The Ebiten Authors2+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
3 3
4 //go:build darwin4 //go:build darwin
5 // +build darwin5 // +build darwin
M go_runtime.go +1 -1
@@ -1,5 +1,5 @@
11 // SPDX-License-Identifier: Apache-2.0
2-// SPDX-FileCopyrightText: 2022 The Ebiten Authors
2+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
33
44 //go:build darwin
55 // +build darwin
@@ -1,5 +1,5 @@
1 // SPDX-License-Identifier: Apache-2.01 // SPDX-License-Identifier: Apache-2.0
2-// SPDX-FileCopyrightText: 2022 The Ebiten Authors2+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
3 3
4 //go:build darwin4 //go:build darwin
5 // +build darwin5 // +build darwin
A internal/abi/abi_amd64.h +99 -0
@@ -0,0 +1,99 @@
1+// Copyright 2021 The Go Authors. All rights reserved.
2+// Use of this source code is governed by a BSD-style
3+// license that can be found in the LICENSE file.
4+
5+// Macros for transitioning from the host ABI to Go ABI0.
6+//
7+// These save the frame pointer, so in general, functions that use
8+// these should have zero frame size to suppress the automatic frame
9+// pointer, though it's harmless to not do this.
10+
11+#ifdef GOOS_windows
12+
13+// REGS_HOST_TO_ABI0_STACK is the stack bytes used by
14+// PUSH_REGS_HOST_TO_ABI0.
15+#define REGS_HOST_TO_ABI0_STACK (28*8 + 8)
16+
17+// PUSH_REGS_HOST_TO_ABI0 prepares for transitioning from
18+// the host ABI to Go ABI0 code. It saves all registers that are
19+// callee-save in the host ABI and caller-save in Go ABI0 and prepares
20+// for entry to Go.
21+//
22+// Save DI SI BP BX R12 R13 R14 R15 X6-X15 registers and the DF flag.
23+// Clear the DF flag for the Go ABI.
24+// MXCSR matches the Go ABI, so we don't have to set that,
25+// and Go doesn't modify it, so we don't have to save it.
26+#define PUSH_REGS_HOST_TO_ABI0() \
27+ PUSHFQ \
28+ CLD \
29+ ADJSP $(REGS_HOST_TO_ABI0_STACK - 8) \
30+ MOVQ DI, (0*0)(SP) \
31+ MOVQ SI, (1*8)(SP) \
32+ MOVQ BP, (2*8)(SP) \
33+ MOVQ BX, (3*8)(SP) \
34+ MOVQ R12, (4*8)(SP) \
35+ MOVQ R13, (5*8)(SP) \
36+ MOVQ R14, (6*8)(SP) \
37+ MOVQ R15, (7*8)(SP) \
38+ MOVUPS X6, (8*8)(SP) \
39+ MOVUPS X7, (10*8)(SP) \
40+ MOVUPS X8, (12*8)(SP) \
41+ MOVUPS X9, (14*8)(SP) \
42+ MOVUPS X10, (16*8)(SP) \
43+ MOVUPS X11, (18*8)(SP) \
44+ MOVUPS X12, (20*8)(SP) \
45+ MOVUPS X13, (22*8)(SP) \
46+ MOVUPS X14, (24*8)(SP) \
47+ MOVUPS X15, (26*8)(SP)
48+
49+#define POP_REGS_HOST_TO_ABI0() \
50+ MOVQ (0*0)(SP), DI \
51+ MOVQ (1*8)(SP), SI \
52+ MOVQ (2*8)(SP), BP \
53+ MOVQ (3*8)(SP), BX \
54+ MOVQ (4*8)(SP), R12 \
55+ MOVQ (5*8)(SP), R13 \
56+ MOVQ (6*8)(SP), R14 \
57+ MOVQ (7*8)(SP), R15 \
58+ MOVUPS (8*8)(SP), X6 \
59+ MOVUPS (10*8)(SP), X7 \
60+ MOVUPS (12*8)(SP), X8 \
61+ MOVUPS (14*8)(SP), X9 \
62+ MOVUPS (16*8)(SP), X10 \
63+ MOVUPS (18*8)(SP), X11 \
64+ MOVUPS (20*8)(SP), X12 \
65+ MOVUPS (22*8)(SP), X13 \
66+ MOVUPS (24*8)(SP), X14 \
67+ MOVUPS (26*8)(SP), X15 \
68+ ADJSP $-(REGS_HOST_TO_ABI0_STACK - 8) \
69+ POPFQ
70+
71+#else
72+// SysV ABI
73+
74+#define REGS_HOST_TO_ABI0_STACK (6*8)
75+
76+// SysV MXCSR matches the Go ABI, so we don't have to set that,
77+// and Go doesn't modify it, so we don't have to save it.
78+// Both SysV and Go require DF to be cleared, so that's already clear.
79+// The SysV and Go frame pointer conventions are compatible.
80+#define PUSH_REGS_HOST_TO_ABI0() \
81+ ADJSP $(REGS_HOST_TO_ABI0_STACK) \
82+ MOVQ BP, (5*8)(SP) \
83+ LEAQ (5*8)(SP), BP \
84+ MOVQ BX, (0*8)(SP) \
85+ MOVQ R12, (1*8)(SP) \
86+ MOVQ R13, (2*8)(SP) \
87+ MOVQ R14, (3*8)(SP) \
88+ MOVQ R15, (4*8)(SP)
89+
90+#define POP_REGS_HOST_TO_ABI0() \
91+ MOVQ (0*8)(SP), BX \
92+ MOVQ (1*8)(SP), R12 \
93+ MOVQ (2*8)(SP), R13 \
94+ MOVQ (3*8)(SP), R14 \
95+ MOVQ (4*8)(SP), R15 \
96+ MOVQ (5*8)(SP), BP \
97+ ADJSP $-(REGS_HOST_TO_ABI0_STACK)
98+
99+#endif
@@ -0,0 +1,99 @@
1+// Copyright 2021 The Go Authors. All rights reserved.
2+// Use of this source code is governed by a BSD-style
3+// license that can be found in the LICENSE file.
4+
5+// Macros for transitioning from the host ABI to Go ABI0.
6+//
7+// These save the frame pointer, so in general, functions that use
8+// these should have zero frame size to suppress the automatic frame
9+// pointer, though it's harmless to not do this.
10+
11+#ifdef GOOS_windows
12+
13+// REGS_HOST_TO_ABI0_STACK is the stack bytes used by
14+// PUSH_REGS_HOST_TO_ABI0.
15+#define REGS_HOST_TO_ABI0_STACK (28*8 + 8)
16+
17+// PUSH_REGS_HOST_TO_ABI0 prepares for transitioning from
18+// the host ABI to Go ABI0 code. It saves all registers that are
19+// callee-save in the host ABI and caller-save in Go ABI0 and prepares
20+// for entry to Go.
21+//
22+// Save DI SI BP BX R12 R13 R14 R15 X6-X15 registers and the DF flag.
23+// Clear the DF flag for the Go ABI.
24+// MXCSR matches the Go ABI, so we don't have to set that,
25+// and Go doesn't modify it, so we don't have to save it.
26+#define PUSH_REGS_HOST_TO_ABI0() \
27+ PUSHFQ \
28+ CLD \
29+ ADJSP $(REGS_HOST_TO_ABI0_STACK - 8) \
30+ MOVQ DI, (0*0)(SP) \
31+ MOVQ SI, (1*8)(SP) \
32+ MOVQ BP, (2*8)(SP) \
33+ MOVQ BX, (3*8)(SP) \
34+ MOVQ R12, (4*8)(SP) \
35+ MOVQ R13, (5*8)(SP) \
36+ MOVQ R14, (6*8)(SP) \
37+ MOVQ R15, (7*8)(SP) \
38+ MOVUPS X6, (8*8)(SP) \
39+ MOVUPS X7, (10*8)(SP) \
40+ MOVUPS X8, (12*8)(SP) \
41+ MOVUPS X9, (14*8)(SP) \
42+ MOVUPS X10, (16*8)(SP) \
43+ MOVUPS X11, (18*8)(SP) \
44+ MOVUPS X12, (20*8)(SP) \
45+ MOVUPS X13, (22*8)(SP) \
46+ MOVUPS X14, (24*8)(SP) \
47+ MOVUPS X15, (26*8)(SP)
48+
49+#define POP_REGS_HOST_TO_ABI0() \
50+ MOVQ (0*0)(SP), DI \
51+ MOVQ (1*8)(SP), SI \
52+ MOVQ (2*8)(SP), BP \
53+ MOVQ (3*8)(SP), BX \
54+ MOVQ (4*8)(SP), R12 \
55+ MOVQ (5*8)(SP), R13 \
56+ MOVQ (6*8)(SP), R14 \
57+ MOVQ (7*8)(SP), R15 \
58+ MOVUPS (8*8)(SP), X6 \
59+ MOVUPS (10*8)(SP), X7 \
60+ MOVUPS (12*8)(SP), X8 \
61+ MOVUPS (14*8)(SP), X9 \
62+ MOVUPS (16*8)(SP), X10 \
63+ MOVUPS (18*8)(SP), X11 \
64+ MOVUPS (20*8)(SP), X12 \
65+ MOVUPS (22*8)(SP), X13 \
66+ MOVUPS (24*8)(SP), X14 \
67+ MOVUPS (26*8)(SP), X15 \
68+ ADJSP $-(REGS_HOST_TO_ABI0_STACK - 8) \
69+ POPFQ
70+
71+#else
72+// SysV ABI
73+
74+#define REGS_HOST_TO_ABI0_STACK (6*8)
75+
76+// SysV MXCSR matches the Go ABI, so we don't have to set that,
77+// and Go doesn't modify it, so we don't have to save it.
78+// Both SysV and Go require DF to be cleared, so that's already clear.
79+// The SysV and Go frame pointer conventions are compatible.
80+#define PUSH_REGS_HOST_TO_ABI0() \
81+ ADJSP $(REGS_HOST_TO_ABI0_STACK) \
82+ MOVQ BP, (5*8)(SP) \
83+ LEAQ (5*8)(SP), BP \
84+ MOVQ BX, (0*8)(SP) \
85+ MOVQ R12, (1*8)(SP) \
86+ MOVQ R13, (2*8)(SP) \
87+ MOVQ R14, (3*8)(SP) \
88+ MOVQ R15, (4*8)(SP)
89+
90+#define POP_REGS_HOST_TO_ABI0() \
91+ MOVQ (0*8)(SP), BX \
92+ MOVQ (1*8)(SP), R12 \
93+ MOVQ (2*8)(SP), R13 \
94+ MOVQ (3*8)(SP), R14 \
95+ MOVQ (4*8)(SP), R15 \
96+ MOVQ (5*8)(SP), BP \
97+ ADJSP $-(REGS_HOST_TO_ABI0_STACK)
98+
99+#endif
A internal/abi/abi_arm64.h +39 -0
@@ -0,0 +1,39 @@
1+// Copyright 2021 The Go Authors. All rights reserved.
2+// Use of this source code is governed by a BSD-style
3+// license that can be found in the LICENSE file.
4+
5+// Macros for transitioning from the host ABI to Go ABI0.
6+//
7+// These macros save and restore the callee-saved registers
8+// from the stack, but they don't adjust stack pointer, so
9+// the user should prepare stack space in advance.
10+// SAVE_R19_TO_R28(offset) saves R19 ~ R28 to the stack space
11+// of ((offset)+0*8)(RSP) ~ ((offset)+9*8)(RSP).
12+//
13+// SAVE_F8_TO_F15(offset) saves F8 ~ F15 to the stack space
14+// of ((offset)+0*8)(RSP) ~ ((offset)+7*8)(RSP).
15+//
16+// R29 is not saved because Go will save and restore it.
17+
18+#define SAVE_R19_TO_R28(offset) \
19+ STP (R19, R20), ((offset)+0*8)(RSP) \
20+ STP (R21, R22), ((offset)+2*8)(RSP) \
21+ STP (R23, R24), ((offset)+4*8)(RSP) \
22+ STP (R25, R26), ((offset)+6*8)(RSP) \
23+ STP (R27, g), ((offset)+8*8)(RSP)
24+#define RESTORE_R19_TO_R28(offset) \
25+ LDP ((offset)+0*8)(RSP), (R19, R20) \
26+ LDP ((offset)+2*8)(RSP), (R21, R22) \
27+ LDP ((offset)+4*8)(RSP), (R23, R24) \
28+ LDP ((offset)+6*8)(RSP), (R25, R26) \
29+ LDP ((offset)+8*8)(RSP), (R27, g) /* R28 */
30+#define SAVE_F8_TO_F15(offset) \
31+ FSTPD (F8, F9), ((offset)+0*8)(RSP) \
32+ FSTPD (F10, F11), ((offset)+2*8)(RSP) \
33+ FSTPD (F12, F13), ((offset)+4*8)(RSP) \
34+ FSTPD (F14, F15), ((offset)+6*8)(RSP)
35+#define RESTORE_F8_TO_F15(offset) \
36+ FLDPD ((offset)+0*8)(RSP), (F8, F9) \
37+ FLDPD ((offset)+2*8)(RSP), (F10, F11) \
38+ FLDPD ((offset)+4*8)(RSP), (F12, F13) \
39+ FLDPD ((offset)+6*8)(RSP), (F14, F15)
@@ -0,0 +1,39 @@
1+// Copyright 2021 The Go Authors. All rights reserved.
2+// Use of this source code is governed by a BSD-style
3+// license that can be found in the LICENSE file.
4+
5+// Macros for transitioning from the host ABI to Go ABI0.
6+//
7+// These macros save and restore the callee-saved registers
8+// from the stack, but they don't adjust stack pointer, so
9+// the user should prepare stack space in advance.
10+// SAVE_R19_TO_R28(offset) saves R19 ~ R28 to the stack space
11+// of ((offset)+0*8)(RSP) ~ ((offset)+9*8)(RSP).
12+//
13+// SAVE_F8_TO_F15(offset) saves F8 ~ F15 to the stack space
14+// of ((offset)+0*8)(RSP) ~ ((offset)+7*8)(RSP).
15+//
16+// R29 is not saved because Go will save and restore it.
17+
18+#define SAVE_R19_TO_R28(offset) \
19+ STP (R19, R20), ((offset)+0*8)(RSP) \
20+ STP (R21, R22), ((offset)+2*8)(RSP) \
21+ STP (R23, R24), ((offset)+4*8)(RSP) \
22+ STP (R25, R26), ((offset)+6*8)(RSP) \
23+ STP (R27, g), ((offset)+8*8)(RSP)
24+#define RESTORE_R19_TO_R28(offset) \
25+ LDP ((offset)+0*8)(RSP), (R19, R20) \
26+ LDP ((offset)+2*8)(RSP), (R21, R22) \
27+ LDP ((offset)+4*8)(RSP), (R23, R24) \
28+ LDP ((offset)+6*8)(RSP), (R25, R26) \
29+ LDP ((offset)+8*8)(RSP), (R27, g) /* R28 */
30+#define SAVE_F8_TO_F15(offset) \
31+ FSTPD (F8, F9), ((offset)+0*8)(RSP) \
32+ FSTPD (F10, F11), ((offset)+2*8)(RSP) \
33+ FSTPD (F12, F13), ((offset)+4*8)(RSP) \
34+ FSTPD (F14, F15), ((offset)+6*8)(RSP)
35+#define RESTORE_F8_TO_F15(offset) \
36+ FLDPD ((offset)+0*8)(RSP), (F8, F9) \
37+ FLDPD ((offset)+2*8)(RSP), (F10, F11) \
38+ FLDPD ((offset)+4*8)(RSP), (F12, F13) \
39+ FLDPD ((offset)+6*8)(RSP), (F14, F15)
A internal/strings/strings.go +21 -0
@@ -0,0 +1,21 @@
1+// SPDX-License-Identifier: Apache-2.0
2+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
3+
4+package strings
5+
6+import "unsafe"
7+
8+// hasSuffix tests whether the string s ends with suffix.
9+func hasSuffix(s, suffix string) bool {
10+ return len(s) >= len(suffix) && s[len(s)-len(suffix):] == suffix
11+}
12+
13+// CString converts a go string to *byte that can be passed to C code.
14+func CString(name string) *byte {
15+ if hasSuffix(name, "\x00") {
16+ return &(*(*[]byte)(unsafe.Pointer(&name)))[0]
17+ }
18+ var b = make([]byte, len(name)+1)
19+ copy(b, name)
20+ return &b[0]
21+}
@@ -0,0 +1,21 @@
1+// SPDX-License-Identifier: Apache-2.0
2+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
3+
4+package strings
5+
6+import "unsafe"
7+
8+// hasSuffix tests whether the string s ends with suffix.
9+func hasSuffix(s, suffix string) bool {
10+ return len(s) >= len(suffix) && s[len(s)-len(suffix):] == suffix
11+}
12+
13+// CString converts a go string to *byte that can be passed to C code.
14+func CString(name string) *byte {
15+ if hasSuffix(name, "\x00") {
16+ return &(*(*[]byte)(unsafe.Pointer(&name)))[0]
17+ }
18+ var b = make([]byte, len(name)+1)
19+ copy(b, name)
20+ return &b[0]
21+}
A objc/objc_runtime_darwin.go +190 -0
@@ -0,0 +1,190 @@
1+// SPDX-License-Identifier: Apache-2.0
2+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
3+
4+// Package objc is a low-level pure Go objective-c runtime. This package is easy to use incorrectly, so it is best
5+// to use a wrapper that provides the functionality you need in a safer way.
6+package objc
7+
8+import (
9+ "fmt"
10+ "reflect"
11+ "runtime"
12+ "unsafe"
13+
14+ "github.com/ebitengine/purego"
15+ "github.com/ebitengine/purego/internal/strings"
16+)
17+
18+//TODO: support try/catch?
19+//https://stackoverflow.com/questions/7062599/example-of-how-objective-cs-try-catch-implementation-is-executed-at-runtime
20+
21+var (
22+ objc = purego.Dlopen("/usr/lib/libobjc.A.dylib", purego.RTLD_GLOBAL)
23+
24+ objc_msgSend = purego.Dlsym(objc, "objc_msgSend")
25+ objc_msgSendSuper2 = purego.Dlsym(objc, "objc_msgSendSuper2")
26+ objc_getClass = purego.Dlsym(objc, "objc_getClass")
27+ objc_allocateClassPair = purego.Dlsym(objc, "objc_allocateClassPair")
28+ objc_registerClassPair = purego.Dlsym(objc, "objc_registerClassPair")
29+ sel_registerName = purego.Dlsym(objc, "sel_registerName")
30+ class_getSuperclass = purego.Dlsym(objc, "class_getSuperclass")
31+ class_addMethod = purego.Dlsym(objc, "class_addMethod")
32+ object_getClass = purego.Dlsym(objc, "object_getClass")
33+)
34+
35+// ID is an opaque pointer to some Objective-C object
36+type ID uintptr
37+
38+// Class returns the class of the object.
39+func (id ID) Class() Class {
40+ ret, _, _ := purego.SyscallN(object_getClass, uintptr(id))
41+ return Class(ret)
42+}
43+
44+// Send is a convenience method for sending messages to objects.
45+func (id ID) Send(sel SEL, args ...interface{}) ID {
46+ tmp := createArgs(id, sel, args...)
47+ ret, _, _ := purego.SyscallN(objc_msgSend, tmp...)
48+ return ID(ret)
49+}
50+
51+// objc_super data structure is generated by the Objective-C compiler when it encounters the super keyword
52+// as the receiver of a message. It specifies the class definition of the particular superclass that should
53+// be messaged.
54+type objc_super struct {
55+ receiver ID
56+ superClass Class
57+}
58+
59+// SendSuper is a convenience method for sending message to object's super
60+func (id ID) SendSuper(sel SEL, args ...interface{}) ID {
61+ var super = &objc_super{
62+ receiver: id,
63+ superClass: id.Class(),
64+ }
65+ tmp := createArgs(0, sel, args...)
66+ tmp[0] = uintptr(unsafe.Pointer(super)) // if createArgs splits the stack the pointer would be wrong
67+ ret, _, _ := purego.SyscallN(objc_msgSendSuper2, tmp...)
68+ return ID(ret)
69+}
70+
71+func createArgs(cls ID, sel SEL, args ...interface{}) (out []uintptr) {
72+ out = make([]uintptr, 2, len(args)+2)
73+ out[0] = uintptr(cls)
74+ out[1] = uintptr(sel)
75+ for _, a := range args {
76+ switch v := a.(type) {
77+ case ID:
78+ out = append(out, uintptr(v))
79+ case Class:
80+ out = append(out, uintptr(v))
81+ case SEL:
82+ out = append(out, uintptr(v))
83+ case _IMP:
84+ out = append(out, uintptr(v))
85+ case bool:
86+ if v {
87+ out = append(out, uintptr(1))
88+ } else {
89+ out = append(out, uintptr(0))
90+ }
91+ case unsafe.Pointer:
92+ out = append(out, uintptr(v))
93+ case uintptr:
94+ out = append(out, v)
95+ case int:
96+ out = append(out, uintptr(v))
97+ case uint:
98+ out = append(out, uintptr(v))
99+ default:
100+ panic(fmt.Sprintf("objc: unknown type %T", v))
101+ }
102+ }
103+ return out
104+}
105+
106+// SEL is an opaque type that represents a method selector
107+type SEL uintptr
108+
109+// RegisterName registers a method with the Objective-C runtime system, maps the method name to a selector,
110+// and returns the selector value.
111+func RegisterName(name string) SEL {
112+ n := strings.CString(name)
113+ ret, _, _ := purego.SyscallN(sel_registerName, uintptr(unsafe.Pointer(n)))
114+ runtime.KeepAlive(n)
115+ return SEL(ret)
116+}
117+
118+// Class is an opaque type that represents an Objective-C class.
119+type Class uintptr
120+
121+// GetClass returns the Class object for the named class, or nil if the class is not registered with the Objective-C runtime.
122+func GetClass(name string) Class {
123+ n := strings.CString(name)
124+ ret, _, _ := purego.SyscallN(objc_getClass, uintptr(unsafe.Pointer(n)))
125+ runtime.KeepAlive(n)
126+ return Class(ret)
127+}
128+
129+// AllocateClassPair creates a new class and metaclass. Then returns the new class, or Nil if the class could not be created
130+func AllocateClassPair(super Class, name string, extraBytes uintptr) Class {
131+ n := strings.CString(name)
132+ ret, _, _ := purego.SyscallN(objc_allocateClassPair, uintptr(super), uintptr(unsafe.Pointer(n)), extraBytes)
133+ runtime.KeepAlive(n)
134+ return Class(ret)
135+}
136+
137+// SuperClass returns the superclass of a class.
138+// You should usually use NSObject‘s superclass method instead of this function.
139+func (c Class) SuperClass() Class {
140+ ret, _, _ := purego.SyscallN(class_getSuperclass, uintptr(c))
141+ return Class(ret)
142+}
143+
144+// AddMethod adds a new method to a class with a given name and implementation.
145+// The types argument is a string containing the mapping of parameters and return type.
146+// Since the function must take at least two arguments—self and _cmd, the second and third
147+// characters must be “@:” (the first character is the return type).
148+func (c Class) AddMethod(name SEL, imp _IMP, types string) bool {
149+ t := strings.CString(types)
150+ ret, _, _ := purego.SyscallN(class_addMethod, uintptr(c), uintptr(name), uintptr(imp), uintptr(unsafe.Pointer(t)))
151+ runtime.KeepAlive(t)
152+ return byte(ret) != 0
153+}
154+
155+// Register registers a class that was allocated using objc_allocateClassPair.
156+// It can now be used to make objects by sending it either alloc and init or new.
157+func (c Class) Register() {
158+ purego.SyscallN(objc_registerClassPair, uintptr(c))
159+}
160+
161+// _IMP is unexported so that the only way to make this type is by providing a Go function and casting
162+// it with the IMP function
163+type _IMP uintptr
164+
165+// IMP takes a Go function that takes (id, SEL) as its first two arguments. It returns an _IMP function
166+// pointer that can be called by Objective-C code. The function pointer is never deallocated.
167+func IMP(fn interface{}) _IMP {
168+ // this is only here so that it is easier to port C code to Go.
169+ // this is not guaranteed to be here forever so make sure to port your callbacks to Go
170+ // If you have a C function pointer cast it to a uintptr before passing it
171+ // to this function.
172+ if x, ok := fn.(uintptr); ok {
173+ return _IMP(x)
174+ }
175+ val := reflect.ValueOf(fn)
176+ if val.Kind() != reflect.Func {
177+ panic("objc: not a function")
178+ }
179+ // IMP is stricter than a normal callback
180+ // id (*IMP)(id, SEL, ...)
181+ switch {
182+ case val.Type().NumIn() < 2:
183+ fallthrough
184+ case val.Type().In(0).Kind() != reflect.Uintptr:
185+ fallthrough
186+ case val.Type().In(1).Kind() != reflect.Uintptr:
187+ panic("objc: IMP must take a (id, SEL) as its first two arguments")
188+ }
189+ return _IMP(purego.NewCallback(fn))
190+}
@@ -0,0 +1,190 @@
1+// SPDX-License-Identifier: Apache-2.0
2+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
3+
4+// Package objc is a low-level pure Go objective-c runtime. This package is easy to use incorrectly, so it is best
5+// to use a wrapper that provides the functionality you need in a safer way.
6+package objc
7+
8+import (
9+ "fmt"
10+ "reflect"
11+ "runtime"
12+ "unsafe"
13+
14+ "github.com/ebitengine/purego"
15+ "github.com/ebitengine/purego/internal/strings"
16+)
17+
18+//TODO: support try/catch?
19+//https://stackoverflow.com/questions/7062599/example-of-how-objective-cs-try-catch-implementation-is-executed-at-runtime
20+
21+var (
22+ objc = purego.Dlopen("/usr/lib/libobjc.A.dylib", purego.RTLD_GLOBAL)
23+
24+ objc_msgSend = purego.Dlsym(objc, "objc_msgSend")
25+ objc_msgSendSuper2 = purego.Dlsym(objc, "objc_msgSendSuper2")
26+ objc_getClass = purego.Dlsym(objc, "objc_getClass")
27+ objc_allocateClassPair = purego.Dlsym(objc, "objc_allocateClassPair")
28+ objc_registerClassPair = purego.Dlsym(objc, "objc_registerClassPair")
29+ sel_registerName = purego.Dlsym(objc, "sel_registerName")
30+ class_getSuperclass = purego.Dlsym(objc, "class_getSuperclass")
31+ class_addMethod = purego.Dlsym(objc, "class_addMethod")
32+ object_getClass = purego.Dlsym(objc, "object_getClass")
33+)
34+
35+// ID is an opaque pointer to some Objective-C object
36+type ID uintptr
37+
38+// Class returns the class of the object.
39+func (id ID) Class() Class {
40+ ret, _, _ := purego.SyscallN(object_getClass, uintptr(id))
41+ return Class(ret)
42+}
43+
44+// Send is a convenience method for sending messages to objects.
45+func (id ID) Send(sel SEL, args ...interface{}) ID {
46+ tmp := createArgs(id, sel, args...)
47+ ret, _, _ := purego.SyscallN(objc_msgSend, tmp...)
48+ return ID(ret)
49+}
50+
51+// objc_super data structure is generated by the Objective-C compiler when it encounters the super keyword
52+// as the receiver of a message. It specifies the class definition of the particular superclass that should
53+// be messaged.
54+type objc_super struct {
55+ receiver ID
56+ superClass Class
57+}
58+
59+// SendSuper is a convenience method for sending message to object's super
60+func (id ID) SendSuper(sel SEL, args ...interface{}) ID {
61+ var super = &objc_super{
62+ receiver: id,
63+ superClass: id.Class(),
64+ }
65+ tmp := createArgs(0, sel, args...)
66+ tmp[0] = uintptr(unsafe.Pointer(super)) // if createArgs splits the stack the pointer would be wrong
67+ ret, _, _ := purego.SyscallN(objc_msgSendSuper2, tmp...)
68+ return ID(ret)
69+}
70+
71+func createArgs(cls ID, sel SEL, args ...interface{}) (out []uintptr) {
72+ out = make([]uintptr, 2, len(args)+2)
73+ out[0] = uintptr(cls)
74+ out[1] = uintptr(sel)
75+ for _, a := range args {
76+ switch v := a.(type) {
77+ case ID:
78+ out = append(out, uintptr(v))
79+ case Class:
80+ out = append(out, uintptr(v))
81+ case SEL:
82+ out = append(out, uintptr(v))
83+ case _IMP:
84+ out = append(out, uintptr(v))
85+ case bool:
86+ if v {
87+ out = append(out, uintptr(1))
88+ } else {
89+ out = append(out, uintptr(0))
90+ }
91+ case unsafe.Pointer:
92+ out = append(out, uintptr(v))
93+ case uintptr:
94+ out = append(out, v)
95+ case int:
96+ out = append(out, uintptr(v))
97+ case uint:
98+ out = append(out, uintptr(v))
99+ default:
100+ panic(fmt.Sprintf("objc: unknown type %T", v))
101+ }
102+ }
103+ return out
104+}
105+
106+// SEL is an opaque type that represents a method selector
107+type SEL uintptr
108+
109+// RegisterName registers a method with the Objective-C runtime system, maps the method name to a selector,
110+// and returns the selector value.
111+func RegisterName(name string) SEL {
112+ n := strings.CString(name)
113+ ret, _, _ := purego.SyscallN(sel_registerName, uintptr(unsafe.Pointer(n)))
114+ runtime.KeepAlive(n)
115+ return SEL(ret)
116+}
117+
118+// Class is an opaque type that represents an Objective-C class.
119+type Class uintptr
120+
121+// GetClass returns the Class object for the named class, or nil if the class is not registered with the Objective-C runtime.
122+func GetClass(name string) Class {
123+ n := strings.CString(name)
124+ ret, _, _ := purego.SyscallN(objc_getClass, uintptr(unsafe.Pointer(n)))
125+ runtime.KeepAlive(n)
126+ return Class(ret)
127+}
128+
129+// AllocateClassPair creates a new class and metaclass. Then returns the new class, or Nil if the class could not be created
130+func AllocateClassPair(super Class, name string, extraBytes uintptr) Class {
131+ n := strings.CString(name)
132+ ret, _, _ := purego.SyscallN(objc_allocateClassPair, uintptr(super), uintptr(unsafe.Pointer(n)), extraBytes)
133+ runtime.KeepAlive(n)
134+ return Class(ret)
135+}
136+
137+// SuperClass returns the superclass of a class.
138+// You should usually use NSObject‘s superclass method instead of this function.
139+func (c Class) SuperClass() Class {
140+ ret, _, _ := purego.SyscallN(class_getSuperclass, uintptr(c))
141+ return Class(ret)
142+}
143+
144+// AddMethod adds a new method to a class with a given name and implementation.
145+// The types argument is a string containing the mapping of parameters and return type.
146+// Since the function must take at least two arguments—self and _cmd, the second and third
147+// characters must be “@:” (the first character is the return type).
148+func (c Class) AddMethod(name SEL, imp _IMP, types string) bool {
149+ t := strings.CString(types)
150+ ret, _, _ := purego.SyscallN(class_addMethod, uintptr(c), uintptr(name), uintptr(imp), uintptr(unsafe.Pointer(t)))
151+ runtime.KeepAlive(t)
152+ return byte(ret) != 0
153+}
154+
155+// Register registers a class that was allocated using objc_allocateClassPair.
156+// It can now be used to make objects by sending it either alloc and init or new.
157+func (c Class) Register() {
158+ purego.SyscallN(objc_registerClassPair, uintptr(c))
159+}
160+
161+// _IMP is unexported so that the only way to make this type is by providing a Go function and casting
162+// it with the IMP function
163+type _IMP uintptr
164+
165+// IMP takes a Go function that takes (id, SEL) as its first two arguments. It returns an _IMP function
166+// pointer that can be called by Objective-C code. The function pointer is never deallocated.
167+func IMP(fn interface{}) _IMP {
168+ // this is only here so that it is easier to port C code to Go.
169+ // this is not guaranteed to be here forever so make sure to port your callbacks to Go
170+ // If you have a C function pointer cast it to a uintptr before passing it
171+ // to this function.
172+ if x, ok := fn.(uintptr); ok {
173+ return _IMP(x)
174+ }
175+ val := reflect.ValueOf(fn)
176+ if val.Kind() != reflect.Func {
177+ panic("objc: not a function")
178+ }
179+ // IMP is stricter than a normal callback
180+ // id (*IMP)(id, SEL, ...)
181+ switch {
182+ case val.Type().NumIn() < 2:
183+ fallthrough
184+ case val.Type().In(0).Kind() != reflect.Uintptr:
185+ fallthrough
186+ case val.Type().In(1).Kind() != reflect.Uintptr:
187+ panic("objc: IMP must take a (id, SEL) as its first two arguments")
188+ }
189+ return _IMP(purego.NewCallback(fn))
190+}
M sys_darwin_amd64.s +65 -1
@@ -1,8 +1,10 @@
11 // SPDX-License-Identifier: Apache-2.0
2-// SPDX-FileCopyrightText: 2022 The Ebiten Authors
2+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
33
44 #include "textflag.h"
5+#include "internal/abi/abi_amd64.h"
56 #include "go_asm.h"
7+#include "funcdata.h"
68
79 // syscall9X calls a function in libc on behalf of the syscall package.
810 // syscall9X takes a pointer to a struct like:
@@ -69,3 +71,65 @@ TEXT syscall9X(SB), NOSPLIT, $0
6971 MOVQ BP, SP
7072 POPQ BP
7173 RET
74+
75+// runtime·cgocallback expects a call to the ABIInternal function
76+// However, the tag <ABIInternal> is only available in the runtime :(
77+// This is a small wrapper function that moves the parameter from AX to the stack
78+// where the Go function can find it. It then calls callbackWrap
79+TEXT callbackWrapInternal<>(SB), $0-0
80+ MOVQ AX, 0(SP)
81+ CALL ·callbackWrap(SB)
82+ RET
83+
84+TEXT callbackasm1(SB), NOSPLIT, $0
85+ // remove return address from stack, we are not returning to callbackasm, but to its caller.
86+ MOVQ 0(SP), AX
87+ ADDQ $8, SP
88+
89+ // make space for first six arguments below the frame
90+ // TODO: check to make sure that arguments 7 and above are right after these six
91+ ADJSP $6*8, SP
92+ MOVQ DI, 0(SP)
93+ MOVQ SI, 8(SP)
94+ MOVQ DX, 16(SP)
95+ MOVQ CX, 24(SP)
96+ MOVQ R8, 32(SP)
97+ MOVQ R9, 40(SP)
98+ LEAQ (SP), R8 // R8 = address of args vector
99+
100+ // determine index into runtime·cbs table
101+ MOVQ $callbackasm(SB), DX
102+ SUBQ DX, AX
103+ MOVQ $0, DX
104+ MOVQ $5, CX // divide by 5 because each call instruction in ·callbacks is 5 bytes long
105+ DIVL CX
106+ SUBQ $1, AX // subtract 1 because return PC is to the next slot
107+
108+ // Switch from the host ABI to the Go ABI.
109+ PUSH_REGS_HOST_TO_ABI0()
110+
111+ // Create a struct callbackArgs on our stack to be passed as
112+ // the "frame" to cgocallback and on to callbackWrap.
113+ // $24 to make enough room for the arguments to runtime.cgocallback
114+ SUBQ $(24+callbackArgs__size), SP
115+ MOVQ AX, (24+callbackArgs_index)(SP) // callback index
116+ MOVQ R8, (24+callbackArgs_args)(SP) // address of args vector
117+ MOVQ $0, (24+callbackArgs_result)(SP) // result
118+ LEAQ 24(SP), AX // take the address of callbackArgs
119+
120+ // Call cgocallback, which will call callbackWrap(frame).
121+ MOVQ $0, 16(SP) // context
122+ MOVQ AX, 8(SP) // frame (address of callbackArgs)
123+ MOVQ $callbackWrapInternal<>(SB), BX
124+ MOVQ BX, 0(SP) // PC of function value to call (callbackWrap)
125+ CALL runtime·cgocallback(SB) // runtime.cgocallback(fn, frame, ctxt uintptr)
126+
127+ // Get callback result.
128+ MOVQ (24+callbackArgs_result)(SP), AX
129+ ADDQ $(24+callbackArgs__size), SP // remove callbackArgs struct
130+
131+ POP_REGS_HOST_TO_ABI0()
132+
133+ ADJSP $-6*8, SP // remove arguments
134+
135+ RET
@@ -1,8 +1,10 @@
1 // SPDX-License-Identifier: Apache-2.01 // SPDX-License-Identifier: Apache-2.0
2-// SPDX-FileCopyrightText: 2022 The Ebiten Authors2+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
3 3
4 #include "textflag.h"4 #include "textflag.h"
5+#include "internal/abi/abi_amd64.h"
5 #include "go_asm.h"6 #include "go_asm.h"
7+#include "funcdata.h"
6 8
7 // syscall9X calls a function in libc on behalf of the syscall package.9 // syscall9X calls a function in libc on behalf of the syscall package.
8 // syscall9X takes a pointer to a struct like:10 // syscall9X takes a pointer to a struct like:
@@ -69,3 +71,65 @@ TEXT syscall9X(SB), NOSPLIT, $0
69 MOVQ BP, SP71 MOVQ BP, SP
70 POPQ BP72 POPQ BP
71 RET73 RET
74+
75+// runtime·cgocallback expects a call to the ABIInternal function
76+// However, the tag <ABIInternal> is only available in the runtime :(
77+// This is a small wrapper function that moves the parameter from AX to the stack
78+// where the Go function can find it. It then calls callbackWrap
79+TEXT callbackWrapInternal<>(SB), $0-0
80+ MOVQ AX, 0(SP)
81+ CALL ·callbackWrap(SB)
82+ RET
83+
84+TEXT callbackasm1(SB), NOSPLIT, $0
85+ // remove return address from stack, we are not returning to callbackasm, but to its caller.
86+ MOVQ 0(SP), AX
87+ ADDQ $8, SP
88+
89+ // make space for first six arguments below the frame
90+ // TODO: check to make sure that arguments 7 and above are right after these six
91+ ADJSP $6*8, SP
92+ MOVQ DI, 0(SP)
93+ MOVQ SI, 8(SP)
94+ MOVQ DX, 16(SP)
95+ MOVQ CX, 24(SP)
96+ MOVQ R8, 32(SP)
97+ MOVQ R9, 40(SP)
98+ LEAQ (SP), R8 // R8 = address of args vector
99+
100+ // determine index into runtime·cbs table
101+ MOVQ $callbackasm(SB), DX
102+ SUBQ DX, AX
103+ MOVQ $0, DX
104+ MOVQ $5, CX // divide by 5 because each call instruction in ·callbacks is 5 bytes long
105+ DIVL CX
106+ SUBQ $1, AX // subtract 1 because return PC is to the next slot
107+
108+ // Switch from the host ABI to the Go ABI.
109+ PUSH_REGS_HOST_TO_ABI0()
110+
111+ // Create a struct callbackArgs on our stack to be passed as
112+ // the "frame" to cgocallback and on to callbackWrap.
113+ // $24 to make enough room for the arguments to runtime.cgocallback
114+ SUBQ $(24+callbackArgs__size), SP
115+ MOVQ AX, (24+callbackArgs_index)(SP) // callback index
116+ MOVQ R8, (24+callbackArgs_args)(SP) // address of args vector
117+ MOVQ $0, (24+callbackArgs_result)(SP) // result
118+ LEAQ 24(SP), AX // take the address of callbackArgs
119+
120+ // Call cgocallback, which will call callbackWrap(frame).
121+ MOVQ $0, 16(SP) // context
122+ MOVQ AX, 8(SP) // frame (address of callbackArgs)
123+ MOVQ $callbackWrapInternal<>(SB), BX
124+ MOVQ BX, 0(SP) // PC of function value to call (callbackWrap)
125+ CALL runtime·cgocallback(SB) // runtime.cgocallback(fn, frame, ctxt uintptr)
126+
127+ // Get callback result.
128+ MOVQ (24+callbackArgs_result)(SP), AX
129+ ADDQ $(24+callbackArgs__size), SP // remove callbackArgs struct
130+
131+ POP_REGS_HOST_TO_ABI0()
132+
133+ ADJSP $-6*8, SP // remove arguments
134+
135+ RET
M sys_darwin_arm64.s +73 -1
@@ -1,8 +1,10 @@
11 // SPDX-License-Identifier: Apache-2.0
2-// SPDX-FileCopyrightText: 2022 The Ebiten Authors
2+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
33
44 #include "textflag.h"
55 #include "go_asm.h"
6+#include "funcdata.h"
7+#include "internal/abi/abi_arm64.h"
68
79 // syscall9X calls a function in libc on behalf of the syscall package.
810 // syscall9X takes a pointer to a struct like:
@@ -60,3 +62,73 @@ TEXT syscall9X(SB), NOSPLIT, $0
6062 MOVD R0, syscall9Args_r1(R2) // save r1
6163 MOVD R1, syscall9Args_r2(R2) // save r2
6264 RET
65+
66+// runtime·cgocallback expects a call to the ABIInternal function
67+// However, the tag <ABIInternal> is only available in the runtime :(
68+// This is a small wrapper function that moves the parameter from R0 to the stack
69+// where the Go function can find it. It then branches without link.
70+TEXT callbackWrapInternal<>(SB), NOSPLIT, $0-0
71+ MOVD R0, 8(RSP)
72+ B ·callbackWrap(SB)
73+ RET
74+
75+TEXT callbackasm1(SB), NOSPLIT, $208-0
76+ NO_LOCAL_POINTERS
77+
78+ // On entry, the trampoline in zcallback_windows_arm64.s left
79+ // the callback index in R12 (which is volatile in the C ABI).
80+
81+ // Save callback register arguments R0-R7.
82+ // We do this at the top of the frame so they're contiguous with stack arguments.
83+ // The 7*8 setting up R14 looks like a bug but is not: the eighth word
84+ // is the space the assembler reserved for our caller's frame pointer,
85+ // but we are not called from Go so that space is ours to use,
86+ // and we must to be contiguous with the stack arguments.
87+ MOVD $arg0-(7*8)(SP), R14
88+ STP (R0, R1), (0*8)(R14)
89+ STP (R2, R3), (2*8)(R14)
90+ STP (R4, R5), (4*8)(R14)
91+ STP (R6, R7), (6*8)(R14)
92+
93+ // Create a struct callbackArgs on our stack.
94+ MOVD $cbargs-(18*8+callbackArgs__size)(SP), R13
95+ MOVD R12, callbackArgs_index(R13) // callback index
96+ MOVD R14, R0
97+ MOVD R0, callbackArgs_args(R13) // address of args vector
98+ MOVD $0, R0
99+ MOVD R0, callbackArgs_result(R13) // result
100+
101+ // Move parameters into registers
102+ MOVD $callbackWrapInternal<>(SB), R0 // fn unsafe.Pointer
103+ MOVD R13, R1 // frame (&callbackArgs{...})
104+ MOVD $0, R3 // ctxt uintptr
105+
106+ // We still need to save all callee save register as before, and then
107+ // push 3 args for fn (R0, R1, R3), skipping R2.
108+ // Also note that at procedure entry in gc world, 8(RSP) will be the
109+ // first arg.
110+ SUB $(8*24), RSP
111+ STP (R0, R1), (8*1)(RSP)
112+ MOVD R3, (8*3)(RSP)
113+
114+ // Push C callee-save registers R19-R28.
115+ // LR, FP already saved.
116+ SAVE_R19_TO_R28(8*4)
117+ SAVE_F8_TO_F15(8*14)
118+ STP (R29, R30), (8*22)(RSP)
119+
120+ // Initialize Go ABI environment
121+ BL runtime·load_g(SB)
122+ BL runtime·cgocallback(SB)
123+
124+ RESTORE_R19_TO_R28(8*4)
125+ RESTORE_F8_TO_F15(8*14)
126+ LDP (8*22)(RSP), (R29, R30)
127+
128+ ADD $(8*24), RSP
129+
130+ // Get callback result.
131+ MOVD $cbargs-(18*8+callbackArgs__size)(SP), R13
132+ MOVD callbackArgs_result(R13), R0
133+
134+ RET
@@ -1,8 +1,10 @@
1 // SPDX-License-Identifier: Apache-2.01 // SPDX-License-Identifier: Apache-2.0
2-// SPDX-FileCopyrightText: 2022 The Ebiten Authors2+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
3 3
4 #include "textflag.h"4 #include "textflag.h"
5 #include "go_asm.h"5 #include "go_asm.h"
6+#include "funcdata.h"
7+#include "internal/abi/abi_arm64.h"
6 8
7 // syscall9X calls a function in libc on behalf of the syscall package.9 // syscall9X calls a function in libc on behalf of the syscall package.
8 // syscall9X takes a pointer to a struct like:10 // syscall9X takes a pointer to a struct like:
@@ -60,3 +62,73 @@ TEXT syscall9X(SB), NOSPLIT, $0
60 MOVD R0, syscall9Args_r1(R2) // save r162 MOVD R0, syscall9Args_r1(R2) // save r1
61 MOVD R1, syscall9Args_r2(R2) // save r263 MOVD R1, syscall9Args_r2(R2) // save r2
62 RET64 RET
65+
66+// runtime·cgocallback expects a call to the ABIInternal function
67+// However, the tag <ABIInternal> is only available in the runtime :(
68+// This is a small wrapper function that moves the parameter from R0 to the stack
69+// where the Go function can find it. It then branches without link.
70+TEXT callbackWrapInternal<>(SB), NOSPLIT, $0-0
71+ MOVD R0, 8(RSP)
72+ B ·callbackWrap(SB)
73+ RET
74+
75+TEXT callbackasm1(SB), NOSPLIT, $208-0
76+ NO_LOCAL_POINTERS
77+
78+ // On entry, the trampoline in zcallback_windows_arm64.s left
79+ // the callback index in R12 (which is volatile in the C ABI).
80+
81+ // Save callback register arguments R0-R7.
82+ // We do this at the top of the frame so they're contiguous with stack arguments.
83+ // The 7*8 setting up R14 looks like a bug but is not: the eighth word
84+ // is the space the assembler reserved for our caller's frame pointer,
85+ // but we are not called from Go so that space is ours to use,
86+ // and we must to be contiguous with the stack arguments.
87+ MOVD $arg0-(7*8)(SP), R14
88+ STP (R0, R1), (0*8)(R14)
89+ STP (R2, R3), (2*8)(R14)
90+ STP (R4, R5), (4*8)(R14)
91+ STP (R6, R7), (6*8)(R14)
92+
93+ // Create a struct callbackArgs on our stack.
94+ MOVD $cbargs-(18*8+callbackArgs__size)(SP), R13
95+ MOVD R12, callbackArgs_index(R13) // callback index
96+ MOVD R14, R0
97+ MOVD R0, callbackArgs_args(R13) // address of args vector
98+ MOVD $0, R0
99+ MOVD R0, callbackArgs_result(R13) // result
100+
101+ // Move parameters into registers
102+ MOVD $callbackWrapInternal<>(SB), R0 // fn unsafe.Pointer
103+ MOVD R13, R1 // frame (&callbackArgs{...})
104+ MOVD $0, R3 // ctxt uintptr
105+
106+ // We still need to save all callee save register as before, and then
107+ // push 3 args for fn (R0, R1, R3), skipping R2.
108+ // Also note that at procedure entry in gc world, 8(RSP) will be the
109+ // first arg.
110+ SUB $(8*24), RSP
111+ STP (R0, R1), (8*1)(RSP)
112+ MOVD R3, (8*3)(RSP)
113+
114+ // Push C callee-save registers R19-R28.
115+ // LR, FP already saved.
116+ SAVE_R19_TO_R28(8*4)
117+ SAVE_F8_TO_F15(8*14)
118+ STP (R29, R30), (8*22)(RSP)
119+
120+ // Initialize Go ABI environment
121+ BL runtime·load_g(SB)
122+ BL runtime·cgocallback(SB)
123+
124+ RESTORE_R19_TO_R28(8*4)
125+ RESTORE_F8_TO_F15(8*14)
126+ LDP (8*22)(RSP), (R29, R30)
127+
128+ ADD $(8*24), RSP
129+
130+ // Get callback result.
131+ MOVD $cbargs-(18*8+callbackArgs__size)(SP), R13
132+ MOVD callbackArgs_result(R13), R0
133+
134+ RET
M syscall.go +1 -1
@@ -1,5 +1,5 @@
11 // SPDX-License-Identifier: Apache-2.0
2-// SPDX-FileCopyrightText: 2022 The Ebiten Authors
2+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
33
44 //go:build darwin || windows
55 // +build darwin windows
@@ -1,5 +1,5 @@
1 // SPDX-License-Identifier: Apache-2.01 // SPDX-License-Identifier: Apache-2.0
2-// SPDX-FileCopyrightText: 2022 The Ebiten Authors2+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
3 3
4 //go:build darwin || windows4 //go:build darwin || windows
5 // +build darwin windows5 // +build darwin windows
M syscall_darwin.go +126 -1
@@ -1,6 +1,14 @@
1+// SPDX-License-Identifier: Apache-2.0
2+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
3+
14 package purego
25
3-import "unsafe"
6+import (
7+ "reflect"
8+ "runtime"
9+ "sync"
10+ "unsafe"
11+)
412
513 func callc(fn uintptr, args unsafe.Pointer) {
614 runtime_entersyscall()
@@ -18,3 +26,120 @@ func syscall_syscall9X(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2,
1826 callc(syscall9XABI0, unsafe.Pointer(&args))
1927 return args.r1, args.r2, args.err
2028 }
29+
30+// NewCallback converts a Go function to a function pointer conforming to the C calling convention
31+// This is useful when interoperating with C code requiring callbacks. The argument is expected to be a
32+// function with zero or one uintptr-sized result. The function must not have arguments with size larger than the size
33+// of uintptr. Only a limited number of callbacks may be created in a single Go process, and any memory allocated
34+// for these callbacks is never released. At least 2000 callbacks can always be created. Although this function
35+// provides similar functionality to windows.NewCallback it is distinct.
36+func NewCallback(fn interface{}) uintptr {
37+ return compileCallback(fn)
38+}
39+
40+// maxCb is the maximum number of callbacks
41+// only increase this if you have added more to the callbackasm function
42+const maxCB = 2000
43+
44+var cbs struct {
45+ lock sync.Mutex
46+ numFn int // the number of functions currently in cbs.funcs
47+ funcs [maxCB]reflect.Value // the saved callbacks
48+}
49+
50+type callbackArgs struct {
51+ index uintptr
52+ // args points to the argument block.
53+ //
54+ // For cdecl and stdcall, all arguments are on the stack.
55+ //
56+ // For fastcall, the trampoline spills register arguments to
57+ // the reserved spill slots below the stack arguments,
58+ // resulting in a layout equivalent to stdcall.
59+ //
60+ // For arm, the trampoline stores the register arguments just
61+ // below the stack arguments, so again we can treat it as one
62+ // big stack arguments frame.
63+ args unsafe.Pointer
64+ // Below are out-args from callbackWrap
65+ result uintptr
66+}
67+
68+func compileCallback(fn interface{}) uintptr {
69+ val := reflect.ValueOf(fn)
70+ if val.Kind() != reflect.Func {
71+ panic("purego: type is not a function")
72+ }
73+ ty := val.Type()
74+ for i := 0; i < ty.NumIn(); i++ {
75+ in := ty.In(i)
76+ switch in.Kind() {
77+ case reflect.Struct, reflect.Float32, reflect.Float64,
78+ reflect.Interface, reflect.Func, reflect.Slice,
79+ reflect.Chan, reflect.Complex64, reflect.Complex128,
80+ reflect.String, reflect.Map, reflect.Invalid:
81+ panic("purego: unsupported argument type: " + in.Kind().String())
82+ }
83+ }
84+ if ty.NumOut() > 1 || ty.NumOut() == 1 && ty.Out(0).Size() != ptrSize {
85+ panic("purego: callbacks can only have one pointer-sized return")
86+ }
87+ cbs.lock.Lock()
88+ defer cbs.lock.Unlock()
89+ if cbs.numFn >= maxCB {
90+ panic("purego: the maximum number of callbacks has been reached")
91+ }
92+ cbs.funcs[cbs.numFn] = val
93+ cbs.numFn++
94+ return callbackasmAddr(cbs.numFn - 1)
95+}
96+
97+const ptrSize = unsafe.Sizeof((*int)(nil))
98+
99+const callbackMaxFrame = 64 * ptrSize
100+
101+// callbackasmABI0 is implemented in zcallback_GOOS_GOARCH.s
102+var callbackasmABI0 uintptr
103+
104+// callbackWrap is called by assembly code which determines which Go function to call.
105+// This function takes the arguments and passes them to the Go function and returns the result.
106+func callbackWrap(a *callbackArgs) {
107+ cbs.lock.Lock()
108+ fn := cbs.funcs[a.index]
109+ cbs.lock.Unlock()
110+ fnType := fn.Type()
111+ args := make([]reflect.Value, fnType.NumIn())
112+ frame := (*[callbackMaxFrame]uintptr)(a.args)
113+ for i := range args {
114+ //TODO: support float32 and float64
115+ args[i] = reflect.NewAt(fnType.In(i), unsafe.Pointer(&frame[i])).Elem()
116+ }
117+ ret := fn.Call(args)
118+ if len(ret) > 0 {
119+ a.result = uintptr(ret[0].Uint())
120+ }
121+}
122+
123+// callbackasmAddr returns address of runtime.callbackasm
124+// function adjusted by i.
125+// On x86 and amd64, runtime.callbackasm is a series of CALL instructions,
126+// and we want callback to arrive at
127+// correspondent call instruction instead of start of
128+// runtime.callbackasm.
129+// On ARM, runtime.callbackasm is a series of mov and branch instructions.
130+// R12 is loaded with the callback index. Each entry is two instructions,
131+// hence 8 bytes.
132+func callbackasmAddr(i int) uintptr {
133+ var entrySize int
134+ switch runtime.GOARCH {
135+ default:
136+ panic("purego: unsupported architecture")
137+ case "386", "amd64":
138+ entrySize = 5
139+ case "arm", "arm64":
140+ // On ARM and ARM64, each entry is a MOV instruction
141+ // followed by a branch instruction
142+ entrySize = 8
143+ }
144+ return callbackasmABI0 + uintptr(i*entrySize)
145+}
@@ -1,6 +1,14 @@
1+// SPDX-License-Identifier: Apache-2.0
2+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
3+
1 package purego4 package purego
2 5
3-import "unsafe"6+import (
7+ "reflect"
8+ "runtime"
9+ "sync"
10+ "unsafe"
11+)
4 12
5 func callc(fn uintptr, args unsafe.Pointer) {13 func callc(fn uintptr, args unsafe.Pointer) {
6 runtime_entersyscall()14 runtime_entersyscall()
@@ -18,3 +26,120 @@ func syscall_syscall9X(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2,
18 callc(syscall9XABI0, unsafe.Pointer(&args))26 callc(syscall9XABI0, unsafe.Pointer(&args))
19 return args.r1, args.r2, args.err27 return args.r1, args.r2, args.err
20 }28 }
29+
30+// NewCallback converts a Go function to a function pointer conforming to the C calling convention
31+// This is useful when interoperating with C code requiring callbacks. The argument is expected to be a
32+// function with zero or one uintptr-sized result. The function must not have arguments with size larger than the size
33+// of uintptr. Only a limited number of callbacks may be created in a single Go process, and any memory allocated
34+// for these callbacks is never released. At least 2000 callbacks can always be created. Although this function
35+// provides similar functionality to windows.NewCallback it is distinct.
36+func NewCallback(fn interface{}) uintptr {
37+ return compileCallback(fn)
38+}
39+
40+// maxCb is the maximum number of callbacks
41+// only increase this if you have added more to the callbackasm function
42+const maxCB = 2000
43+
44+var cbs struct {
45+ lock sync.Mutex
46+ numFn int // the number of functions currently in cbs.funcs
47+ funcs [maxCB]reflect.Value // the saved callbacks
48+}
49+
50+type callbackArgs struct {
51+ index uintptr
52+ // args points to the argument block.
53+ //
54+ // For cdecl and stdcall, all arguments are on the stack.
55+ //
56+ // For fastcall, the trampoline spills register arguments to
57+ // the reserved spill slots below the stack arguments,
58+ // resulting in a layout equivalent to stdcall.
59+ //
60+ // For arm, the trampoline stores the register arguments just
61+ // below the stack arguments, so again we can treat it as one
62+ // big stack arguments frame.
63+ args unsafe.Pointer
64+ // Below are out-args from callbackWrap
65+ result uintptr
66+}
67+
68+func compileCallback(fn interface{}) uintptr {
69+ val := reflect.ValueOf(fn)
70+ if val.Kind() != reflect.Func {
71+ panic("purego: type is not a function")
72+ }
73+ ty := val.Type()
74+ for i := 0; i < ty.NumIn(); i++ {
75+ in := ty.In(i)
76+ switch in.Kind() {
77+ case reflect.Struct, reflect.Float32, reflect.Float64,
78+ reflect.Interface, reflect.Func, reflect.Slice,
79+ reflect.Chan, reflect.Complex64, reflect.Complex128,
80+ reflect.String, reflect.Map, reflect.Invalid:
81+ panic("purego: unsupported argument type: " + in.Kind().String())
82+ }
83+ }
84+ if ty.NumOut() > 1 || ty.NumOut() == 1 && ty.Out(0).Size() != ptrSize {
85+ panic("purego: callbacks can only have one pointer-sized return")
86+ }
87+ cbs.lock.Lock()
88+ defer cbs.lock.Unlock()
89+ if cbs.numFn >= maxCB {
90+ panic("purego: the maximum number of callbacks has been reached")
91+ }
92+ cbs.funcs[cbs.numFn] = val
93+ cbs.numFn++
94+ return callbackasmAddr(cbs.numFn - 1)
95+}
96+
97+const ptrSize = unsafe.Sizeof((*int)(nil))
98+
99+const callbackMaxFrame = 64 * ptrSize
100+
101+// callbackasmABI0 is implemented in zcallback_GOOS_GOARCH.s
102+var callbackasmABI0 uintptr
103+
104+// callbackWrap is called by assembly code which determines which Go function to call.
105+// This function takes the arguments and passes them to the Go function and returns the result.
106+func callbackWrap(a *callbackArgs) {
107+ cbs.lock.Lock()
108+ fn := cbs.funcs[a.index]
109+ cbs.lock.Unlock()
110+ fnType := fn.Type()
111+ args := make([]reflect.Value, fnType.NumIn())
112+ frame := (*[callbackMaxFrame]uintptr)(a.args)
113+ for i := range args {
114+ //TODO: support float32 and float64
115+ args[i] = reflect.NewAt(fnType.In(i), unsafe.Pointer(&frame[i])).Elem()
116+ }
117+ ret := fn.Call(args)
118+ if len(ret) > 0 {
119+ a.result = uintptr(ret[0].Uint())
120+ }
121+}
122+
123+// callbackasmAddr returns address of runtime.callbackasm
124+// function adjusted by i.
125+// On x86 and amd64, runtime.callbackasm is a series of CALL instructions,
126+// and we want callback to arrive at
127+// correspondent call instruction instead of start of
128+// runtime.callbackasm.
129+// On ARM, runtime.callbackasm is a series of mov and branch instructions.
130+// R12 is loaded with the callback index. Each entry is two instructions,
131+// hence 8 bytes.
132+func callbackasmAddr(i int) uintptr {
133+ var entrySize int
134+ switch runtime.GOARCH {
135+ default:
136+ panic("purego: unsupported architecture")
137+ case "386", "amd64":
138+ entrySize = 5
139+ case "arm", "arm64":
140+ // On ARM and ARM64, each entry is a MOV instruction
141+ // followed by a branch instruction
142+ entrySize = 8
143+ }
144+ return callbackasmABI0 + uintptr(i*entrySize)
145+}
M syscall_windows.go +14 -0
@@ -1,3 +1,6 @@
1+// SPDX-License-Identifier: Apache-2.0
2+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
3+
14 package purego
25
36 import (
@@ -9,3 +12,14 @@ func syscall_syscall9X(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2,
912 r1, r2, errno := syscall.Syscall9(fn, 9, a1, a2, a3, a4, a5, a6, a7, a8, a9)
1013 return r1, r2, uintptr(errno)
1114 }
15+
16+// NewCallback converts a Go function to a function pointer conforming to the stdcall calling convention.
17+// This is useful when interoperating with Windows code requiring callbacks. The argument is expected to be a
18+// function with one uintptr-sized result. The function must not have arguments with size larger than the
19+// size of uintptr. Only a limited number of callbacks may be created in a single Go process, and any memory
20+// allocated for these callbacks is never released. Between NewCallback and NewCallbackCDecl, at least 1024
21+// callbacks can always be created. Although this function is similiar to the darwin version it may act
22+// differently.
23+func NewCallback(fn interface{}) uintptr {
24+ return syscall.NewCallback(fn)
25+}
@@ -1,3 +1,6 @@
1+// SPDX-License-Identifier: Apache-2.0
2+// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
3+
1 package purego4 package purego
2 5
3 import (6 import (
@@ -9,3 +12,14 @@ func syscall_syscall9X(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2,
9 r1, r2, errno := syscall.Syscall9(fn, 9, a1, a2, a3, a4, a5, a6, a7, a8, a9)12 r1, r2, errno := syscall.Syscall9(fn, 9, a1, a2, a3, a4, a5, a6, a7, a8, a9)
10 return r1, r2, uintptr(errno)13 return r1, r2, uintptr(errno)
11 }14 }
15+
16+// NewCallback converts a Go function to a function pointer conforming to the stdcall calling convention.
17+// This is useful when interoperating with Windows code requiring callbacks. The argument is expected to be a
18+// function with one uintptr-sized result. The function must not have arguments with size larger than the
19+// size of uintptr. Only a limited number of callbacks may be created in a single Go process, and any memory
20+// allocated for these callbacks is never released. Between NewCallback and NewCallbackCDecl, at least 1024
21+// callbacks can always be created. Although this function is similiar to the darwin version it may act
22+// differently.
23+func NewCallback(fn interface{}) uintptr {
24+ return syscall.NewCallback(fn)
25+}
A zcallback_darwin_amd64.s +2014 -0
@@ -0,0 +1,2014 @@
1+// Code generated by wincallback.go using 'go generate'. DO NOT EDIT.
2+
3+// runtime·callbackasm is called by external code to
4+// execute Go implemented callback function. It is not
5+// called from the start, instead runtime·compilecallback
6+// always returns address into runtime·callbackasm offset
7+// appropriately so different callbacks start with different
8+// CALL instruction in runtime·callbackasm. This determines
9+// which Go callback function is executed later on.
10+#include "textflag.h"
11+
12+GLOBL ·callbackasmABI0(SB), NOPTR|RODATA, $8
13+DATA ·callbackasmABI0(SB)/8, $callbackasm(SB)
14+TEXT callbackasm(SB), 7, $0
15+ CALL callbackasm1(SB)
16+ CALL callbackasm1(SB)
17+ CALL callbackasm1(SB)
18+ CALL callbackasm1(SB)
19+ CALL callbackasm1(SB)
20+ CALL callbackasm1(SB)
21+ CALL callbackasm1(SB)
22+ CALL callbackasm1(SB)
23+ CALL callbackasm1(SB)
24+ CALL callbackasm1(SB)
25+ CALL callbackasm1(SB)
26+ CALL callbackasm1(SB)
27+ CALL callbackasm1(SB)
28+ CALL callbackasm1(SB)
29+ CALL callbackasm1(SB)
30+ CALL callbackasm1(SB)
31+ CALL callbackasm1(SB)
32+ CALL callbackasm1(SB)
33+ CALL callbackasm1(SB)
34+ CALL callbackasm1(SB)
35+ CALL callbackasm1(SB)
36+ CALL callbackasm1(SB)
37+ CALL callbackasm1(SB)
38+ CALL callbackasm1(SB)
39+ CALL callbackasm1(SB)
40+ CALL callbackasm1(SB)
41+ CALL callbackasm1(SB)
42+ CALL callbackasm1(SB)
43+ CALL callbackasm1(SB)
44+ CALL callbackasm1(SB)
45+ CALL callbackasm1(SB)
46+ CALL callbackasm1(SB)
47+ CALL callbackasm1(SB)
48+ CALL callbackasm1(SB)
49+ CALL callbackasm1(SB)
50+ CALL callbackasm1(SB)
51+ CALL callbackasm1(SB)
52+ CALL callbackasm1(SB)
53+ CALL callbackasm1(SB)
54+ CALL callbackasm1(SB)
55+ CALL callbackasm1(SB)
56+ CALL callbackasm1(SB)
57+ CALL callbackasm1(SB)
58+ CALL callbackasm1(SB)
59+ CALL callbackasm1(SB)
60+ CALL callbackasm1(SB)
61+ CALL callbackasm1(SB)
62+ CALL callbackasm1(SB)
63+ CALL callbackasm1(SB)
64+ CALL callbackasm1(SB)
65+ CALL callbackasm1(SB)
66+ CALL callbackasm1(SB)
67+ CALL callbackasm1(SB)
68+ CALL callbackasm1(SB)
69+ CALL callbackasm1(SB)
70+ CALL callbackasm1(SB)
71+ CALL callbackasm1(SB)
72+ CALL callbackasm1(SB)
73+ CALL callbackasm1(SB)
74+ CALL callbackasm1(SB)
75+ CALL callbackasm1(SB)
76+ CALL callbackasm1(SB)
77+ CALL callbackasm1(SB)
78+ CALL callbackasm1(SB)
79+ CALL callbackasm1(SB)
80+ CALL callbackasm1(SB)
81+ CALL callbackasm1(SB)
82+ CALL callbackasm1(SB)
83+ CALL callbackasm1(SB)
84+ CALL callbackasm1(SB)
85+ CALL callbackasm1(SB)
86+ CALL callbackasm1(SB)
87+ CALL callbackasm1(SB)
88+ CALL callbackasm1(SB)
89+ CALL callbackasm1(SB)
90+ CALL callbackasm1(SB)
91+ CALL callbackasm1(SB)
92+ CALL callbackasm1(SB)
93+ CALL callbackasm1(SB)
94+ CALL callbackasm1(SB)
95+ CALL callbackasm1(SB)
96+ CALL callbackasm1(SB)
97+ CALL callbackasm1(SB)
98+ CALL callbackasm1(SB)
99+ CALL callbackasm1(SB)
100+ CALL callbackasm1(SB)
101+ CALL callbackasm1(SB)
102+ CALL callbackasm1(SB)
103+ CALL callbackasm1(SB)
104+ CALL callbackasm1(SB)
105+ CALL callbackasm1(SB)
106+ CALL callbackasm1(SB)
107+ CALL callbackasm1(SB)
108+ CALL callbackasm1(SB)
109+ CALL callbackasm1(SB)
110+ CALL callbackasm1(SB)
111+ CALL callbackasm1(SB)
112+ CALL callbackasm1(SB)
113+ CALL callbackasm1(SB)
114+ CALL callbackasm1(SB)
115+ CALL callbackasm1(SB)
116+ CALL callbackasm1(SB)
117+ CALL callbackasm1(SB)
118+ CALL callbackasm1(SB)
119+ CALL callbackasm1(SB)
120+ CALL callbackasm1(SB)
121+ CALL callbackasm1(SB)
122+ CALL callbackasm1(SB)
123+ CALL callbackasm1(SB)
124+ CALL callbackasm1(SB)
125+ CALL callbackasm1(SB)
126+ CALL callbackasm1(SB)
127+ CALL callbackasm1(SB)
128+ CALL callbackasm1(SB)
129+ CALL callbackasm1(SB)
130+ CALL callbackasm1(SB)
131+ CALL callbackasm1(SB)
132+ CALL callbackasm1(SB)
133+ CALL callbackasm1(SB)
134+ CALL callbackasm1(SB)
135+ CALL callbackasm1(SB)
136+ CALL callbackasm1(SB)
137+ CALL callbackasm1(SB)
138+ CALL callbackasm1(SB)
139+ CALL callbackasm1(SB)
140+ CALL callbackasm1(SB)
141+ CALL callbackasm1(SB)
142+ CALL callbackasm1(SB)
143+ CALL callbackasm1(SB)
144+ CALL callbackasm1(SB)
145+ CALL callbackasm1(SB)
146+ CALL callbackasm1(SB)
147+ CALL callbackasm1(SB)
148+ CALL callbackasm1(SB)
149+ CALL callbackasm1(SB)
150+ CALL callbackasm1(SB)
151+ CALL callbackasm1(SB)
152+ CALL callbackasm1(SB)
153+ CALL callbackasm1(SB)
154+ CALL callbackasm1(SB)
155+ CALL callbackasm1(SB)
156+ CALL callbackasm1(SB)
157+ CALL callbackasm1(SB)
158+ CALL callbackasm1(SB)
159+ CALL callbackasm1(SB)
160+ CALL callbackasm1(SB)
161+ CALL callbackasm1(SB)
162+ CALL callbackasm1(SB)
163+ CALL callbackasm1(SB)
164+ CALL callbackasm1(SB)
165+ CALL callbackasm1(SB)
166+ CALL callbackasm1(SB)
167+ CALL callbackasm1(SB)
168+ CALL callbackasm1(SB)
169+ CALL callbackasm1(SB)
170+ CALL callbackasm1(SB)
171+ CALL callbackasm1(SB)
172+ CALL callbackasm1(SB)
173+ CALL callbackasm1(SB)
174+ CALL callbackasm1(SB)
175+ CALL callbackasm1(SB)
176+ CALL callbackasm1(SB)
177+ CALL callbackasm1(SB)
178+ CALL callbackasm1(SB)
179+ CALL callbackasm1(SB)
180+ CALL callbackasm1(SB)
181+ CALL callbackasm1(SB)
182+ CALL callbackasm1(SB)
183+ CALL callbackasm1(SB)
184+ CALL callbackasm1(SB)
185+ CALL callbackasm1(SB)
186+ CALL callbackasm1(SB)
187+ CALL callbackasm1(SB)
188+ CALL callbackasm1(SB)
189+ CALL callbackasm1(SB)
190+ CALL callbackasm1(SB)
191+ CALL callbackasm1(SB)
192+ CALL callbackasm1(SB)
193+ CALL callbackasm1(SB)
194+ CALL callbackasm1(SB)
195+ CALL callbackasm1(SB)
196+ CALL callbackasm1(SB)
197+ CALL callbackasm1(SB)
198+ CALL callbackasm1(SB)
199+ CALL callbackasm1(SB)
200+ CALL callbackasm1(SB)
201+ CALL callbackasm1(SB)
202+ CALL callbackasm1(SB)
203+ CALL callbackasm1(SB)
204+ CALL callbackasm1(SB)
205+ CALL callbackasm1(SB)
206+ CALL callbackasm1(SB)
207+ CALL callbackasm1(SB)
208+ CALL callbackasm1(SB)
209+ CALL callbackasm1(SB)
210+ CALL callbackasm1(SB)
211+ CALL callbackasm1(SB)
212+ CALL callbackasm1(SB)
213+ CALL callbackasm1(SB)
214+ CALL callbackasm1(SB)
215+ CALL callbackasm1(SB)
216+ CALL callbackasm1(SB)
217+ CALL callbackasm1(SB)
218+ CALL callbackasm1(SB)
219+ CALL callbackasm1(SB)
220+ CALL callbackasm1(SB)
221+ CALL callbackasm1(SB)
222+ CALL callbackasm1(SB)
223+ CALL callbackasm1(SB)
224+ CALL callbackasm1(SB)
225+ CALL callbackasm1(SB)
226+ CALL callbackasm1(SB)
227+ CALL callbackasm1(SB)
228+ CALL callbackasm1(SB)
229+ CALL callbackasm1(SB)
230+ CALL callbackasm1(SB)
231+ CALL callbackasm1(SB)
232+ CALL callbackasm1(SB)
233+ CALL callbackasm1(SB)
234+ CALL callbackasm1(SB)
235+ CALL callbackasm1(SB)
236+ CALL callbackasm1(SB)
237+ CALL callbackasm1(SB)
238+ CALL callbackasm1(SB)
239+ CALL callbackasm1(SB)
240+ CALL callbackasm1(SB)
241+ CALL callbackasm1(SB)
242+ CALL callbackasm1(SB)
243+ CALL callbackasm1(SB)
244+ CALL callbackasm1(SB)
245+ CALL callbackasm1(SB)
246+ CALL callbackasm1(SB)
247+ CALL callbackasm1(SB)
248+ CALL callbackasm1(SB)
249+ CALL callbackasm1(SB)
250+ CALL callbackasm1(SB)
251+ CALL callbackasm1(SB)
252+ CALL callbackasm1(SB)
253+ CALL callbackasm1(SB)
254+ CALL callbackasm1(SB)
255+ CALL callbackasm1(SB)
256+ CALL callbackasm1(SB)
257+ CALL callbackasm1(SB)
258+ CALL callbackasm1(SB)
259+ CALL callbackasm1(SB)
260+ CALL callbackasm1(SB)
261+ CALL callbackasm1(SB)
262+ CALL callbackasm1(SB)
263+ CALL callbackasm1(SB)
264+ CALL callbackasm1(SB)
265+ CALL callbackasm1(SB)
266+ CALL callbackasm1(SB)
267+ CALL callbackasm1(SB)
268+ CALL callbackasm1(SB)
269+ CALL callbackasm1(SB)
270+ CALL callbackasm1(SB)
271+ CALL callbackasm1(SB)
272+ CALL callbackasm1(SB)
273+ CALL callbackasm1(SB)
274+ CALL callbackasm1(SB)
275+ CALL callbackasm1(SB)
276+ CALL callbackasm1(SB)
277+ CALL callbackasm1(SB)
278+ CALL callbackasm1(SB)
279+ CALL callbackasm1(SB)
280+ CALL callbackasm1(SB)
281+ CALL callbackasm1(SB)
282+ CALL callbackasm1(SB)
283+ CALL callbackasm1(SB)
284+ CALL callbackasm1(SB)
285+ CALL callbackasm1(SB)
286+ CALL callbackasm1(SB)
287+ CALL callbackasm1(SB)
288+ CALL callbackasm1(SB)
289+ CALL callbackasm1(SB)
290+ CALL callbackasm1(SB)
291+ CALL callbackasm1(SB)
292+ CALL callbackasm1(SB)
293+ CALL callbackasm1(SB)
294+ CALL callbackasm1(SB)
295+ CALL callbackasm1(SB)
296+ CALL callbackasm1(SB)
297+ CALL callbackasm1(SB)
298+ CALL callbackasm1(SB)
299+ CALL callbackasm1(SB)
300+ CALL callbackasm1(SB)
301+ CALL callbackasm1(SB)
302+ CALL callbackasm1(SB)
303+ CALL callbackasm1(SB)
304+ CALL callbackasm1(SB)
305+ CALL callbackasm1(SB)
306+ CALL callbackasm1(SB)
307+ CALL callbackasm1(SB)
308+ CALL callbackasm1(SB)
309+ CALL callbackasm1(SB)
310+ CALL callbackasm1(SB)
311+ CALL callbackasm1(SB)
312+ CALL callbackasm1(SB)
313+ CALL callbackasm1(SB)
314+ CALL callbackasm1(SB)
315+ CALL callbackasm1(SB)
316+ CALL callbackasm1(SB)
317+ CALL callbackasm1(SB)
318+ CALL callbackasm1(SB)
319+ CALL callbackasm1(SB)
320+ CALL callbackasm1(SB)
321+ CALL callbackasm1(SB)
322+ CALL callbackasm1(SB)
323+ CALL callbackasm1(SB)
324+ CALL callbackasm1(SB)
325+ CALL callbackasm1(SB)
326+ CALL callbackasm1(SB)
327+ CALL callbackasm1(SB)
328+ CALL callbackasm1(SB)
329+ CALL callbackasm1(SB)
330+ CALL callbackasm1(SB)
331+ CALL callbackasm1(SB)
332+ CALL callbackasm1(SB)
333+ CALL callbackasm1(SB)
334+ CALL callbackasm1(SB)
335+ CALL callbackasm1(SB)
336+ CALL callbackasm1(SB)
337+ CALL callbackasm1(SB)
338+ CALL callbackasm1(SB)
339+ CALL callbackasm1(SB)
340+ CALL callbackasm1(SB)
341+ CALL callbackasm1(SB)
342+ CALL callbackasm1(SB)
343+ CALL callbackasm1(SB)
344+ CALL callbackasm1(SB)
345+ CALL callbackasm1(SB)
346+ CALL callbackasm1(SB)
347+ CALL callbackasm1(SB)
348+ CALL callbackasm1(SB)
349+ CALL callbackasm1(SB)
350+ CALL callbackasm1(SB)
351+ CALL callbackasm1(SB)
352+ CALL callbackasm1(SB)
353+ CALL callbackasm1(SB)
354+ CALL callbackasm1(SB)
355+ CALL callbackasm1(SB)
356+ CALL callbackasm1(SB)
357+ CALL callbackasm1(SB)
358+ CALL callbackasm1(SB)
359+ CALL callbackasm1(SB)
360+ CALL callbackasm1(SB)
361+ CALL callbackasm1(SB)
362+ CALL callbackasm1(SB)
363+ CALL callbackasm1(SB)
364+ CALL callbackasm1(SB)
365+ CALL callbackasm1(SB)
366+ CALL callbackasm1(SB)
367+ CALL callbackasm1(SB)
368+ CALL callbackasm1(SB)
369+ CALL callbackasm1(SB)
370+ CALL callbackasm1(SB)
371+ CALL callbackasm1(SB)
372+ CALL callbackasm1(SB)
373+ CALL callbackasm1(SB)
374+ CALL callbackasm1(SB)
375+ CALL callbackasm1(SB)
376+ CALL callbackasm1(SB)
377+ CALL callbackasm1(SB)
378+ CALL callbackasm1(SB)
379+ CALL callbackasm1(SB)
380+ CALL callbackasm1(SB)
381+ CALL callbackasm1(SB)
382+ CALL callbackasm1(SB)
383+ CALL callbackasm1(SB)
384+ CALL callbackasm1(SB)
385+ CALL callbackasm1(SB)
386+ CALL callbackasm1(SB)
387+ CALL callbackasm1(SB)
388+ CALL callbackasm1(SB)
389+ CALL callbackasm1(SB)
390+ CALL callbackasm1(SB)
391+ CALL callbackasm1(SB)
392+ CALL callbackasm1(SB)
393+ CALL callbackasm1(SB)
394+ CALL callbackasm1(SB)
395+ CALL callbackasm1(SB)
396+ CALL callbackasm1(SB)
397+ CALL callbackasm1(SB)
398+ CALL callbackasm1(SB)
399+ CALL callbackasm1(SB)
400+ CALL callbackasm1(SB)
401+ CALL callbackasm1(SB)
402+ CALL callbackasm1(SB)
403+ CALL callbackasm1(SB)
404+ CALL callbackasm1(SB)
405+ CALL callbackasm1(SB)
406+ CALL callbackasm1(SB)
407+ CALL callbackasm1(SB)
408+ CALL callbackasm1(SB)
409+ CALL callbackasm1(SB)
410+ CALL callbackasm1(SB)
411+ CALL callbackasm1(SB)
412+ CALL callbackasm1(SB)
413+ CALL callbackasm1(SB)
414+ CALL callbackasm1(SB)
415+ CALL callbackasm1(SB)
416+ CALL callbackasm1(SB)
417+ CALL callbackasm1(SB)
418+ CALL callbackasm1(SB)
419+ CALL callbackasm1(SB)
420+ CALL callbackasm1(SB)
421+ CALL callbackasm1(SB)
422+ CALL callbackasm1(SB)
423+ CALL callbackasm1(SB)
424+ CALL callbackasm1(SB)
425+ CALL callbackasm1(SB)
426+ CALL callbackasm1(SB)
427+ CALL callbackasm1(SB)
428+ CALL callbackasm1(SB)
429+ CALL callbackasm1(SB)
430+ CALL callbackasm1(SB)
431+ CALL callbackasm1(SB)
432+ CALL callbackasm1(SB)
433+ CALL callbackasm1(SB)
434+ CALL callbackasm1(SB)
435+ CALL callbackasm1(SB)
436+ CALL callbackasm1(SB)
437+ CALL callbackasm1(SB)
438+ CALL callbackasm1(SB)
439+ CALL callbackasm1(SB)
440+ CALL callbackasm1(SB)
441+ CALL callbackasm1(SB)
442+ CALL callbackasm1(SB)
443+ CALL callbackasm1(SB)
444+ CALL callbackasm1(SB)
445+ CALL callbackasm1(SB)
446+ CALL callbackasm1(SB)
447+ CALL callbackasm1(SB)
448+ CALL callbackasm1(SB)
449+ CALL callbackasm1(SB)
450+ CALL callbackasm1(SB)
451+ CALL callbackasm1(SB)
452+ CALL callbackasm1(SB)
453+ CALL callbackasm1(SB)
454+ CALL callbackasm1(SB)
455+ CALL callbackasm1(SB)
456+ CALL callbackasm1(SB)
457+ CALL callbackasm1(SB)
458+ CALL callbackasm1(SB)
459+ CALL callbackasm1(SB)
460+ CALL callbackasm1(SB)
461+ CALL callbackasm1(SB)
462+ CALL callbackasm1(SB)
463+ CALL callbackasm1(SB)
464+ CALL callbackasm1(SB)
465+ CALL callbackasm1(SB)
466+ CALL callbackasm1(SB)
467+ CALL callbackasm1(SB)
468+ CALL callbackasm1(SB)
469+ CALL callbackasm1(SB)
470+ CALL callbackasm1(SB)
471+ CALL callbackasm1(SB)
472+ CALL callbackasm1(SB)
473+ CALL callbackasm1(SB)
474+ CALL callbackasm1(SB)
475+ CALL callbackasm1(SB)
476+ CALL callbackasm1(SB)
477+ CALL callbackasm1(SB)
478+ CALL callbackasm1(SB)
479+ CALL callbackasm1(SB)
480+ CALL callbackasm1(SB)
481+ CALL callbackasm1(SB)
482+ CALL callbackasm1(SB)
483+ CALL callbackasm1(SB)
484+ CALL callbackasm1(SB)
485+ CALL callbackasm1(SB)
486+ CALL callbackasm1(SB)
487+ CALL callbackasm1(SB)
488+ CALL callbackasm1(SB)
489+ CALL callbackasm1(SB)
490+ CALL callbackasm1(SB)
491+ CALL callbackasm1(SB)
492+ CALL callbackasm1(SB)
493+ CALL callbackasm1(SB)
494+ CALL callbackasm1(SB)
495+ CALL callbackasm1(SB)
496+ CALL callbackasm1(SB)
497+ CALL callbackasm1(SB)
498+ CALL callbackasm1(SB)
499+ CALL callbackasm1(SB)
500+ CALL callbackasm1(SB)
501+ CALL callbackasm1(SB)
502+ CALL callbackasm1(SB)
503+ CALL callbackasm1(SB)
504+ CALL callbackasm1(SB)
505+ CALL callbackasm1(SB)
506+ CALL callbackasm1(SB)
507+ CALL callbackasm1(SB)
508+ CALL callbackasm1(SB)
509+ CALL callbackasm1(SB)
510+ CALL callbackasm1(SB)
511+ CALL callbackasm1(SB)
512+ CALL callbackasm1(SB)
513+ CALL callbackasm1(SB)
514+ CALL callbackasm1(SB)
515+ CALL callbackasm1(SB)
516+ CALL callbackasm1(SB)
517+ CALL callbackasm1(SB)
518+ CALL callbackasm1(SB)
519+ CALL callbackasm1(SB)
520+ CALL callbackasm1(SB)
521+ CALL callbackasm1(SB)
522+ CALL callbackasm1(SB)
523+ CALL callbackasm1(SB)
524+ CALL callbackasm1(SB)
525+ CALL callbackasm1(SB)
526+ CALL callbackasm1(SB)
527+ CALL callbackasm1(SB)
528+ CALL callbackasm1(SB)
529+ CALL callbackasm1(SB)
530+ CALL callbackasm1(SB)
531+ CALL callbackasm1(SB)
532+ CALL callbackasm1(SB)
533+ CALL callbackasm1(SB)
534+ CALL callbackasm1(SB)
535+ CALL callbackasm1(SB)
536+ CALL callbackasm1(SB)
537+ CALL callbackasm1(SB)
538+ CALL callbackasm1(SB)
539+ CALL callbackasm1(SB)
540+ CALL callbackasm1(SB)
541+ CALL callbackasm1(SB)
542+ CALL callbackasm1(SB)
543+ CALL callbackasm1(SB)
544+ CALL callbackasm1(SB)
545+ CALL callbackasm1(SB)
546+ CALL callbackasm1(SB)
547+ CALL callbackasm1(SB)
548+ CALL callbackasm1(SB)
549+ CALL callbackasm1(SB)
550+ CALL callbackasm1(SB)
551+ CALL callbackasm1(SB)
552+ CALL callbackasm1(SB)
553+ CALL callbackasm1(SB)
554+ CALL callbackasm1(SB)
555+ CALL callbackasm1(SB)
556+ CALL callbackasm1(SB)
557+ CALL callbackasm1(SB)
558+ CALL callbackasm1(SB)
559+ CALL callbackasm1(SB)
560+ CALL callbackasm1(SB)
561+ CALL callbackasm1(SB)
562+ CALL callbackasm1(SB)
563+ CALL callbackasm1(SB)
564+ CALL callbackasm1(SB)
565+ CALL callbackasm1(SB)
566+ CALL callbackasm1(SB)
567+ CALL callbackasm1(SB)
568+ CALL callbackasm1(SB)
569+ CALL callbackasm1(SB)
570+ CALL callbackasm1(SB)
571+ CALL callbackasm1(SB)
572+ CALL callbackasm1(SB)
573+ CALL callbackasm1(SB)
574+ CALL callbackasm1(SB)
575+ CALL callbackasm1(SB)
576+ CALL callbackasm1(SB)
577+ CALL callbackasm1(SB)
578+ CALL callbackasm1(SB)
579+ CALL callbackasm1(SB)
580+ CALL callbackasm1(SB)
581+ CALL callbackasm1(SB)
582+ CALL callbackasm1(SB)
583+ CALL callbackasm1(SB)
584+ CALL callbackasm1(SB)
585+ CALL callbackasm1(SB)
586+ CALL callbackasm1(SB)
587+ CALL callbackasm1(SB)
588+ CALL callbackasm1(SB)
589+ CALL callbackasm1(SB)
590+ CALL callbackasm1(SB)
591+ CALL callbackasm1(SB)
592+ CALL callbackasm1(SB)
593+ CALL callbackasm1(SB)
594+ CALL callbackasm1(SB)
595+ CALL callbackasm1(SB)
596+ CALL callbackasm1(SB)
597+ CALL callbackasm1(SB)
598+ CALL callbackasm1(SB)
599+ CALL callbackasm1(SB)
600+ CALL callbackasm1(SB)
601+ CALL callbackasm1(SB)
602+ CALL callbackasm1(SB)
603+ CALL callbackasm1(SB)
604+ CALL callbackasm1(SB)
605+ CALL callbackasm1(SB)
606+ CALL callbackasm1(SB)
607+ CALL callbackasm1(SB)
608+ CALL callbackasm1(SB)
609+ CALL callbackasm1(SB)
610+ CALL callbackasm1(SB)
611+ CALL callbackasm1(SB)
612+ CALL callbackasm1(SB)
613+ CALL callbackasm1(SB)
614+ CALL callbackasm1(SB)
615+ CALL callbackasm1(SB)
616+ CALL callbackasm1(SB)
617+ CALL callbackasm1(SB)
618+ CALL callbackasm1(SB)
619+ CALL callbackasm1(SB)
620+ CALL callbackasm1(SB)
621+ CALL callbackasm1(SB)
622+ CALL callbackasm1(SB)
623+ CALL callbackasm1(SB)
624+ CALL callbackasm1(SB)
625+ CALL callbackasm1(SB)
626+ CALL callbackasm1(SB)
627+ CALL callbackasm1(SB)
628+ CALL callbackasm1(SB)
629+ CALL callbackasm1(SB)
630+ CALL callbackasm1(SB)
631+ CALL callbackasm1(SB)
632+ CALL callbackasm1(SB)
633+ CALL callbackasm1(SB)
634+ CALL callbackasm1(SB)
635+ CALL callbackasm1(SB)
636+ CALL callbackasm1(SB)
637+ CALL callbackasm1(SB)
638+ CALL callbackasm1(SB)
639+ CALL callbackasm1(SB)
640+ CALL callbackasm1(SB)
641+ CALL callbackasm1(SB)
642+ CALL callbackasm1(SB)
643+ CALL callbackasm1(SB)
644+ CALL callbackasm1(SB)
645+ CALL callbackasm1(SB)
646+ CALL callbackasm1(SB)
647+ CALL callbackasm1(SB)
648+ CALL callbackasm1(SB)
649+ CALL callbackasm1(SB)
650+ CALL callbackasm1(SB)
651+ CALL callbackasm1(SB)
652+ CALL callbackasm1(SB)
653+ CALL callbackasm1(SB)
654+ CALL callbackasm1(SB)
655+ CALL callbackasm1(SB)
656+ CALL callbackasm1(SB)
657+ CALL callbackasm1(SB)
658+ CALL callbackasm1(SB)
659+ CALL callbackasm1(SB)
660+ CALL callbackasm1(SB)
661+ CALL callbackasm1(SB)
662+ CALL callbackasm1(SB)
663+ CALL callbackasm1(SB)
664+ CALL callbackasm1(SB)
665+ CALL callbackasm1(SB)
666+ CALL callbackasm1(SB)
667+ CALL callbackasm1(SB)
668+ CALL callbackasm1(SB)
669+ CALL callbackasm1(SB)
670+ CALL callbackasm1(SB)
671+ CALL callbackasm1(SB)
672+ CALL callbackasm1(SB)
673+ CALL callbackasm1(SB)
674+ CALL callbackasm1(SB)
675+ CALL callbackasm1(SB)
676+ CALL callbackasm1(SB)
677+ CALL callbackasm1(SB)
678+ CALL callbackasm1(SB)
679+ CALL callbackasm1(SB)
680+ CALL callbackasm1(SB)
681+ CALL callbackasm1(SB)
682+ CALL callbackasm1(SB)
683+ CALL callbackasm1(SB)
684+ CALL callbackasm1(SB)
685+ CALL callbackasm1(SB)
686+ CALL callbackasm1(SB)
687+ CALL callbackasm1(SB)
688+ CALL callbackasm1(SB)
689+ CALL callbackasm1(SB)
690+ CALL callbackasm1(SB)
691+ CALL callbackasm1(SB)
692+ CALL callbackasm1(SB)
693+ CALL callbackasm1(SB)
694+ CALL callbackasm1(SB)
695+ CALL callbackasm1(SB)
696+ CALL callbackasm1(SB)
697+ CALL callbackasm1(SB)
698+ CALL callbackasm1(SB)
699+ CALL callbackasm1(SB)
700+ CALL callbackasm1(SB)
701+ CALL callbackasm1(SB)
702+ CALL callbackasm1(SB)
703+ CALL callbackasm1(SB)
704+ CALL callbackasm1(SB)
705+ CALL callbackasm1(SB)
706+ CALL callbackasm1(SB)
707+ CALL callbackasm1(SB)
708+ CALL callbackasm1(SB)
709+ CALL callbackasm1(SB)
710+ CALL callbackasm1(SB)
711+ CALL callbackasm1(SB)
712+ CALL callbackasm1(SB)
713+ CALL callbackasm1(SB)
714+ CALL callbackasm1(SB)
715+ CALL callbackasm1(SB)
716+ CALL callbackasm1(SB)
717+ CALL callbackasm1(SB)
718+ CALL callbackasm1(SB)
719+ CALL callbackasm1(SB)
720+ CALL callbackasm1(SB)
721+ CALL callbackasm1(SB)
722+ CALL callbackasm1(SB)
723+ CALL callbackasm1(SB)
724+ CALL callbackasm1(SB)
725+ CALL callbackasm1(SB)
726+ CALL callbackasm1(SB)
727+ CALL callbackasm1(SB)
728+ CALL callbackasm1(SB)
729+ CALL callbackasm1(SB)
730+ CALL callbackasm1(SB)
731+ CALL callbackasm1(SB)
732+ CALL callbackasm1(SB)
733+ CALL callbackasm1(SB)
734+ CALL callbackasm1(SB)
735+ CALL callbackasm1(SB)
736+ CALL callbackasm1(SB)
737+ CALL callbackasm1(SB)
738+ CALL callbackasm1(SB)
739+ CALL callbackasm1(SB)
740+ CALL callbackasm1(SB)
741+ CALL callbackasm1(SB)
742+ CALL callbackasm1(SB)
743+ CALL callbackasm1(SB)
744+ CALL callbackasm1(SB)
745+ CALL callbackasm1(SB)
746+ CALL callbackasm1(SB)
747+ CALL callbackasm1(SB)
748+ CALL callbackasm1(SB)
749+ CALL callbackasm1(SB)
750+ CALL callbackasm1(SB)
751+ CALL callbackasm1(SB)
752+ CALL callbackasm1(SB)
753+ CALL callbackasm1(SB)
754+ CALL callbackasm1(SB)
755+ CALL callbackasm1(SB)
756+ CALL callbackasm1(SB)
757+ CALL callbackasm1(SB)
758+ CALL callbackasm1(SB)
759+ CALL callbackasm1(SB)
760+ CALL callbackasm1(SB)
761+ CALL callbackasm1(SB)
762+ CALL callbackasm1(SB)
763+ CALL callbackasm1(SB)
764+ CALL callbackasm1(SB)
765+ CALL callbackasm1(SB)
766+ CALL callbackasm1(SB)
767+ CALL callbackasm1(SB)
768+ CALL callbackasm1(SB)
769+ CALL callbackasm1(SB)
770+ CALL callbackasm1(SB)
771+ CALL callbackasm1(SB)
772+ CALL callbackasm1(SB)
773+ CALL callbackasm1(SB)
774+ CALL callbackasm1(SB)
775+ CALL callbackasm1(SB)
776+ CALL callbackasm1(SB)
777+ CALL callbackasm1(SB)
778+ CALL callbackasm1(SB)
779+ CALL callbackasm1(SB)
780+ CALL callbackasm1(SB)
781+ CALL callbackasm1(SB)
782+ CALL callbackasm1(SB)
783+ CALL callbackasm1(SB)
784+ CALL callbackasm1(SB)
785+ CALL callbackasm1(SB)
786+ CALL callbackasm1(SB)
787+ CALL callbackasm1(SB)
788+ CALL callbackasm1(SB)
789+ CALL callbackasm1(SB)
790+ CALL callbackasm1(SB)
791+ CALL callbackasm1(SB)
792+ CALL callbackasm1(SB)
793+ CALL callbackasm1(SB)
794+ CALL callbackasm1(SB)
795+ CALL callbackasm1(SB)
796+ CALL callbackasm1(SB)
797+ CALL callbackasm1(SB)
798+ CALL callbackasm1(SB)
799+ CALL callbackasm1(SB)
800+ CALL callbackasm1(SB)
801+ CALL callbackasm1(SB)
802+ CALL callbackasm1(SB)
803+ CALL callbackasm1(SB)
804+ CALL callbackasm1(SB)
805+ CALL callbackasm1(SB)
806+ CALL callbackasm1(SB)
807+ CALL callbackasm1(SB)
808+ CALL callbackasm1(SB)
809+ CALL callbackasm1(SB)
810+ CALL callbackasm1(SB)
811+ CALL callbackasm1(SB)
812+ CALL callbackasm1(SB)
813+ CALL callbackasm1(SB)
814+ CALL callbackasm1(SB)
815+ CALL callbackasm1(SB)
816+ CALL callbackasm1(SB)
817+ CALL callbackasm1(SB)
818+ CALL callbackasm1(SB)
819+ CALL callbackasm1(SB)
820+ CALL callbackasm1(SB)
821+ CALL callbackasm1(SB)
822+ CALL callbackasm1(SB)
823+ CALL callbackasm1(SB)
824+ CALL callbackasm1(SB)
825+ CALL callbackasm1(SB)
826+ CALL callbackasm1(SB)
827+ CALL callbackasm1(SB)
828+ CALL callbackasm1(SB)
829+ CALL callbackasm1(SB)
830+ CALL callbackasm1(SB)
831+ CALL callbackasm1(SB)
832+ CALL callbackasm1(SB)
833+ CALL callbackasm1(SB)
834+ CALL callbackasm1(SB)
835+ CALL callbackasm1(SB)
836+ CALL callbackasm1(SB)
837+ CALL callbackasm1(SB)
838+ CALL callbackasm1(SB)
839+ CALL callbackasm1(SB)
840+ CALL callbackasm1(SB)
841+ CALL callbackasm1(SB)
842+ CALL callbackasm1(SB)
843+ CALL callbackasm1(SB)
844+ CALL callbackasm1(SB)
845+ CALL callbackasm1(SB)
846+ CALL callbackasm1(SB)
847+ CALL callbackasm1(SB)
848+ CALL callbackasm1(SB)
849+ CALL callbackasm1(SB)
850+ CALL callbackasm1(SB)
851+ CALL callbackasm1(SB)
852+ CALL callbackasm1(SB)
853+ CALL callbackasm1(SB)
854+ CALL callbackasm1(SB)
855+ CALL callbackasm1(SB)
856+ CALL callbackasm1(SB)
857+ CALL callbackasm1(SB)
858+ CALL callbackasm1(SB)
859+ CALL callbackasm1(SB)
860+ CALL callbackasm1(SB)
861+ CALL callbackasm1(SB)
862+ CALL callbackasm1(SB)
863+ CALL callbackasm1(SB)
864+ CALL callbackasm1(SB)
865+ CALL callbackasm1(SB)
866+ CALL callbackasm1(SB)
867+ CALL callbackasm1(SB)
868+ CALL callbackasm1(SB)
869+ CALL callbackasm1(SB)
870+ CALL callbackasm1(SB)
871+ CALL callbackasm1(SB)
872+ CALL callbackasm1(SB)
873+ CALL callbackasm1(SB)
874+ CALL callbackasm1(SB)
875+ CALL callbackasm1(SB)
876+ CALL callbackasm1(SB)
877+ CALL callbackasm1(SB)
878+ CALL callbackasm1(SB)
879+ CALL callbackasm1(SB)
880+ CALL callbackasm1(SB)
881+ CALL callbackasm1(SB)
882+ CALL callbackasm1(SB)
883+ CALL callbackasm1(SB)
884+ CALL callbackasm1(SB)
885+ CALL callbackasm1(SB)
886+ CALL callbackasm1(SB)
887+ CALL callbackasm1(SB)
888+ CALL callbackasm1(SB)
889+ CALL callbackasm1(SB)
890+ CALL callbackasm1(SB)
891+ CALL callbackasm1(SB)
892+ CALL callbackasm1(SB)
893+ CALL callbackasm1(SB)
894+ CALL callbackasm1(SB)
895+ CALL callbackasm1(SB)
896+ CALL callbackasm1(SB)
897+ CALL callbackasm1(SB)
898+ CALL callbackasm1(SB)
899+ CALL callbackasm1(SB)
900+ CALL callbackasm1(SB)
901+ CALL callbackasm1(SB)
902+ CALL callbackasm1(SB)
903+ CALL callbackasm1(SB)
904+ CALL callbackasm1(SB)
905+ CALL callbackasm1(SB)
906+ CALL callbackasm1(SB)
907+ CALL callbackasm1(SB)
908+ CALL callbackasm1(SB)
909+ CALL callbackasm1(SB)
910+ CALL callbackasm1(SB)
911+ CALL callbackasm1(SB)
912+ CALL callbackasm1(SB)
913+ CALL callbackasm1(SB)
914+ CALL callbackasm1(SB)
915+ CALL callbackasm1(SB)
916+ CALL callbackasm1(SB)
917+ CALL callbackasm1(SB)
918+ CALL callbackasm1(SB)
919+ CALL callbackasm1(SB)
920+ CALL callbackasm1(SB)
921+ CALL callbackasm1(SB)
922+ CALL callbackasm1(SB)
923+ CALL callbackasm1(SB)
924+ CALL callbackasm1(SB)
925+ CALL callbackasm1(SB)
926+ CALL callbackasm1(SB)
927+ CALL callbackasm1(SB)
928+ CALL callbackasm1(SB)
929+ CALL callbackasm1(SB)
930+ CALL callbackasm1(SB)
931+ CALL callbackasm1(SB)
932+ CALL callbackasm1(SB)
933+ CALL callbackasm1(SB)
934+ CALL callbackasm1(SB)
935+ CALL callbackasm1(SB)
936+ CALL callbackasm1(SB)
937+ CALL callbackasm1(SB)
938+ CALL callbackasm1(SB)
939+ CALL callbackasm1(SB)
940+ CALL callbackasm1(SB)
941+ CALL callbackasm1(SB)
942+ CALL callbackasm1(SB)
943+ CALL callbackasm1(SB)
944+ CALL callbackasm1(SB)
945+ CALL callbackasm1(SB)
946+ CALL callbackasm1(SB)
947+ CALL callbackasm1(SB)
948+ CALL callbackasm1(SB)
949+ CALL callbackasm1(SB)
950+ CALL callbackasm1(SB)
951+ CALL callbackasm1(SB)
952+ CALL callbackasm1(SB)
953+ CALL callbackasm1(SB)
954+ CALL callbackasm1(SB)
955+ CALL callbackasm1(SB)
956+ CALL callbackasm1(SB)
957+ CALL callbackasm1(SB)
958+ CALL callbackasm1(SB)
959+ CALL callbackasm1(SB)
960+ CALL callbackasm1(SB)
961+ CALL callbackasm1(SB)
962+ CALL callbackasm1(SB)
963+ CALL callbackasm1(SB)
964+ CALL callbackasm1(SB)
965+ CALL callbackasm1(SB)
966+ CALL callbackasm1(SB)
967+ CALL callbackasm1(SB)
968+ CALL callbackasm1(SB)
969+ CALL callbackasm1(SB)
970+ CALL callbackasm1(SB)
971+ CALL callbackasm1(SB)
972+ CALL callbackasm1(SB)
973+ CALL callbackasm1(SB)
974+ CALL callbackasm1(SB)
975+ CALL callbackasm1(SB)
976+ CALL callbackasm1(SB)
977+ CALL callbackasm1(SB)
978+ CALL callbackasm1(SB)
979+ CALL callbackasm1(SB)
980+ CALL callbackasm1(SB)
981+ CALL callbackasm1(SB)
982+ CALL callbackasm1(SB)
983+ CALL callbackasm1(SB)
984+ CALL callbackasm1(SB)
985+ CALL callbackasm1(SB)
986+ CALL callbackasm1(SB)
987+ CALL callbackasm1(SB)
988+ CALL callbackasm1(SB)
989+ CALL callbackasm1(SB)
990+ CALL callbackasm1(SB)
991+ CALL callbackasm1(SB)
992+ CALL callbackasm1(SB)
993+ CALL callbackasm1(SB)
994+ CALL callbackasm1(SB)
995+ CALL callbackasm1(SB)
996+ CALL callbackasm1(SB)
997+ CALL callbackasm1(SB)
998+ CALL callbackasm1(SB)
999+ CALL callbackasm1(SB)
1000+ CALL callbackasm1(SB)
1001+ CALL callbackasm1(SB)
1002+ CALL callbackasm1(SB)
1003+ CALL callbackasm1(SB)
1004+ CALL callbackasm1(SB)
1005+ CALL callbackasm1(SB)
1006+ CALL callbackasm1(SB)
1007+ CALL callbackasm1(SB)
1008+ CALL callbackasm1(SB)
1009+ CALL callbackasm1(SB)
1010+ CALL callbackasm1(SB)
1011+ CALL callbackasm1(SB)
1012+ CALL callbackasm1(SB)
1013+ CALL callbackasm1(SB)
1014+ CALL callbackasm1(SB)
1015+ CALL callbackasm1(SB)
1016+ CALL callbackasm1(SB)
1017+ CALL callbackasm1(SB)
1018+ CALL callbackasm1(SB)
1019+ CALL callbackasm1(SB)
1020+ CALL callbackasm1(SB)
1021+ CALL callbackasm1(SB)
1022+ CALL callbackasm1(SB)
1023+ CALL callbackasm1(SB)
1024+ CALL callbackasm1(SB)
1025+ CALL callbackasm1(SB)
1026+ CALL callbackasm1(SB)
1027+ CALL callbackasm1(SB)
1028+ CALL callbackasm1(SB)
1029+ CALL callbackasm1(SB)
1030+ CALL callbackasm1(SB)
1031+ CALL callbackasm1(SB)
1032+ CALL callbackasm1(SB)
1033+ CALL callbackasm1(SB)
1034+ CALL callbackasm1(SB)
1035+ CALL callbackasm1(SB)
1036+ CALL callbackasm1(SB)
1037+ CALL callbackasm1(SB)
1038+ CALL callbackasm1(SB)
1039+ CALL callbackasm1(SB)
1040+ CALL callbackasm1(SB)
1041+ CALL callbackasm1(SB)
1042+ CALL callbackasm1(SB)
1043+ CALL callbackasm1(SB)
1044+ CALL callbackasm1(SB)
1045+ CALL callbackasm1(SB)
1046+ CALL callbackasm1(SB)
1047+ CALL callbackasm1(SB)
1048+ CALL callbackasm1(SB)
1049+ CALL callbackasm1(SB)
1050+ CALL callbackasm1(SB)
1051+ CALL callbackasm1(SB)
1052+ CALL callbackasm1(SB)
1053+ CALL callbackasm1(SB)
1054+ CALL callbackasm1(SB)
1055+ CALL callbackasm1(SB)
1056+ CALL callbackasm1(SB)
1057+ CALL callbackasm1(SB)
1058+ CALL callbackasm1(SB)
1059+ CALL callbackasm1(SB)
1060+ CALL callbackasm1(SB)
1061+ CALL callbackasm1(SB)
1062+ CALL callbackasm1(SB)
1063+ CALL callbackasm1(SB)
1064+ CALL callbackasm1(SB)
1065+ CALL callbackasm1(SB)
1066+ CALL callbackasm1(SB)
1067+ CALL callbackasm1(SB)
1068+ CALL callbackasm1(SB)
1069+ CALL callbackasm1(SB)
1070+ CALL callbackasm1(SB)
1071+ CALL callbackasm1(SB)
1072+ CALL callbackasm1(SB)
1073+ CALL callbackasm1(SB)
1074+ CALL callbackasm1(SB)
1075+ CALL callbackasm1(SB)
1076+ CALL callbackasm1(SB)
1077+ CALL callbackasm1(SB)
1078+ CALL callbackasm1(SB)
1079+ CALL callbackasm1(SB)
1080+ CALL callbackasm1(SB)
1081+ CALL callbackasm1(SB)
1082+ CALL callbackasm1(SB)
1083+ CALL callbackasm1(SB)
1084+ CALL callbackasm1(SB)
1085+ CALL callbackasm1(SB)
1086+ CALL callbackasm1(SB)
1087+ CALL callbackasm1(SB)
1088+ CALL callbackasm1(SB)
1089+ CALL callbackasm1(SB)
1090+ CALL callbackasm1(SB)
1091+ CALL callbackasm1(SB)
1092+ CALL callbackasm1(SB)
1093+ CALL callbackasm1(SB)
1094+ CALL callbackasm1(SB)
1095+ CALL callbackasm1(SB)
1096+ CALL callbackasm1(SB)
1097+ CALL callbackasm1(SB)
1098+ CALL callbackasm1(SB)
1099+ CALL callbackasm1(SB)
1100+ CALL callbackasm1(SB)
1101+ CALL callbackasm1(SB)
1102+ CALL callbackasm1(SB)
1103+ CALL callbackasm1(SB)
1104+ CALL callbackasm1(SB)
1105+ CALL callbackasm1(SB)
1106+ CALL callbackasm1(SB)
1107+ CALL callbackasm1(SB)
1108+ CALL callbackasm1(SB)
1109+ CALL callbackasm1(SB)
1110+ CALL callbackasm1(SB)
1111+ CALL callbackasm1(SB)
1112+ CALL callbackasm1(SB)
1113+ CALL callbackasm1(SB)
1114+ CALL callbackasm1(SB)
1115+ CALL callbackasm1(SB)
1116+ CALL callbackasm1(SB)
1117+ CALL callbackasm1(SB)
1118+ CALL callbackasm1(SB)
1119+ CALL callbackasm1(SB)
1120+ CALL callbackasm1(SB)
1121+ CALL callbackasm1(SB)
1122+ CALL callbackasm1(SB)
1123+ CALL callbackasm1(SB)
1124+ CALL callbackasm1(SB)
1125+ CALL callbackasm1(SB)
1126+ CALL callbackasm1(SB)
1127+ CALL callbackasm1(SB)
1128+ CALL callbackasm1(SB)
1129+ CALL callbackasm1(SB)
1130+ CALL callbackasm1(SB)
1131+ CALL callbackasm1(SB)
1132+ CALL callbackasm1(SB)
1133+ CALL callbackasm1(SB)
1134+ CALL callbackasm1(SB)
1135+ CALL callbackasm1(SB)
1136+ CALL callbackasm1(SB)
1137+ CALL callbackasm1(SB)
1138+ CALL callbackasm1(SB)
1139+ CALL callbackasm1(SB)
1140+ CALL callbackasm1(SB)
1141+ CALL callbackasm1(SB)
1142+ CALL callbackasm1(SB)
1143+ CALL callbackasm1(SB)
1144+ CALL callbackasm1(SB)
1145+ CALL callbackasm1(SB)
1146+ CALL callbackasm1(SB)
1147+ CALL callbackasm1(SB)
1148+ CALL callbackasm1(SB)
1149+ CALL callbackasm1(SB)
1150+ CALL callbackasm1(SB)
1151+ CALL callbackasm1(SB)
1152+ CALL callbackasm1(SB)
1153+ CALL callbackasm1(SB)
1154+ CALL callbackasm1(SB)
1155+ CALL callbackasm1(SB)
1156+ CALL callbackasm1(SB)
1157+ CALL callbackasm1(SB)
1158+ CALL callbackasm1(SB)
1159+ CALL callbackasm1(SB)
1160+ CALL callbackasm1(SB)
1161+ CALL callbackasm1(SB)
1162+ CALL callbackasm1(SB)
1163+ CALL callbackasm1(SB)
1164+ CALL callbackasm1(SB)
1165+ CALL callbackasm1(SB)
1166+ CALL callbackasm1(SB)
1167+ CALL callbackasm1(SB)
1168+ CALL callbackasm1(SB)
1169+ CALL callbackasm1(SB)
1170+ CALL callbackasm1(SB)
1171+ CALL callbackasm1(SB)
1172+ CALL callbackasm1(SB)
1173+ CALL callbackasm1(SB)
1174+ CALL callbackasm1(SB)
1175+ CALL callbackasm1(SB)
1176+ CALL callbackasm1(SB)
1177+ CALL callbackasm1(SB)
1178+ CALL callbackasm1(SB)
1179+ CALL callbackasm1(SB)
1180+ CALL callbackasm1(SB)
1181+ CALL callbackasm1(SB)
1182+ CALL callbackasm1(SB)
1183+ CALL callbackasm1(SB)
1184+ CALL callbackasm1(SB)
1185+ CALL callbackasm1(SB)
1186+ CALL callbackasm1(SB)
1187+ CALL callbackasm1(SB)
1188+ CALL callbackasm1(SB)
1189+ CALL callbackasm1(SB)
1190+ CALL callbackasm1(SB)
1191+ CALL callbackasm1(SB)
1192+ CALL callbackasm1(SB)
1193+ CALL callbackasm1(SB)
1194+ CALL callbackasm1(SB)
1195+ CALL callbackasm1(SB)
1196+ CALL callbackasm1(SB)
1197+ CALL callbackasm1(SB)
1198+ CALL callbackasm1(SB)
1199+ CALL callbackasm1(SB)
1200+ CALL callbackasm1(SB)
1201+ CALL callbackasm1(SB)
1202+ CALL callbackasm1(SB)
1203+ CALL callbackasm1(SB)
1204+ CALL callbackasm1(SB)
1205+ CALL callbackasm1(SB)
1206+ CALL callbackasm1(SB)
1207+ CALL callbackasm1(SB)
1208+ CALL callbackasm1(SB)
1209+ CALL callbackasm1(SB)
1210+ CALL callbackasm1(SB)
1211+ CALL callbackasm1(SB)
1212+ CALL callbackasm1(SB)
1213+ CALL callbackasm1(SB)
1214+ CALL callbackasm1(SB)
1215+ CALL callbackasm1(SB)
1216+ CALL callbackasm1(SB)
1217+ CALL callbackasm1(SB)
1218+ CALL callbackasm1(SB)
1219+ CALL callbackasm1(SB)
1220+ CALL callbackasm1(SB)
1221+ CALL callbackasm1(SB)
1222+ CALL callbackasm1(SB)
1223+ CALL callbackasm1(SB)
1224+ CALL callbackasm1(SB)
1225+ CALL callbackasm1(SB)
1226+ CALL callbackasm1(SB)
1227+ CALL callbackasm1(SB)
1228+ CALL callbackasm1(SB)
1229+ CALL callbackasm1(SB)
1230+ CALL callbackasm1(SB)
1231+ CALL callbackasm1(SB)
1232+ CALL callbackasm1(SB)
1233+ CALL callbackasm1(SB)
1234+ CALL callbackasm1(SB)
1235+ CALL callbackasm1(SB)
1236+ CALL callbackasm1(SB)
1237+ CALL callbackasm1(SB)
1238+ CALL callbackasm1(SB)
1239+ CALL callbackasm1(SB)
1240+ CALL callbackasm1(SB)
1241+ CALL callbackasm1(SB)
1242+ CALL callbackasm1(SB)
1243+ CALL callbackasm1(SB)
1244+ CALL callbackasm1(SB)
1245+ CALL callbackasm1(SB)
1246+ CALL callbackasm1(SB)
1247+ CALL callbackasm1(SB)
1248+ CALL callbackasm1(SB)
1249+ CALL callbackasm1(SB)
1250+ CALL callbackasm1(SB)
1251+ CALL callbackasm1(SB)
1252+ CALL callbackasm1(SB)
1253+ CALL callbackasm1(SB)
1254+ CALL callbackasm1(SB)
1255+ CALL callbackasm1(SB)
1256+ CALL callbackasm1(SB)
1257+ CALL callbackasm1(SB)
1258+ CALL callbackasm1(SB)
1259+ CALL callbackasm1(SB)
1260+ CALL callbackasm1(SB)
1261+ CALL callbackasm1(SB)
1262+ CALL callbackasm1(SB)
1263+ CALL callbackasm1(SB)
1264+ CALL callbackasm1(SB)
1265+ CALL callbackasm1(SB)
1266+ CALL callbackasm1(SB)
1267+ CALL callbackasm1(SB)
1268+ CALL callbackasm1(SB)
1269+ CALL callbackasm1(SB)
1270+ CALL callbackasm1(SB)
1271+ CALL callbackasm1(SB)
1272+ CALL callbackasm1(SB)
1273+ CALL callbackasm1(SB)
1274+ CALL callbackasm1(SB)
1275+ CALL callbackasm1(SB)
1276+ CALL callbackasm1(SB)
1277+ CALL callbackasm1(SB)
1278+ CALL callbackasm1(SB)
1279+ CALL callbackasm1(SB)
1280+ CALL callbackasm1(SB)
1281+ CALL callbackasm1(SB)
1282+ CALL callbackasm1(SB)
1283+ CALL callbackasm1(SB)
1284+ CALL callbackasm1(SB)
1285+ CALL callbackasm1(SB)
1286+ CALL callbackasm1(SB)
1287+ CALL callbackasm1(SB)
1288+ CALL callbackasm1(SB)
1289+ CALL callbackasm1(SB)
1290+ CALL callbackasm1(SB)
1291+ CALL callbackasm1(SB)
1292+ CALL callbackasm1(SB)
1293+ CALL callbackasm1(SB)
1294+ CALL callbackasm1(SB)
1295+ CALL callbackasm1(SB)
1296+ CALL callbackasm1(SB)
1297+ CALL callbackasm1(SB)
1298+ CALL callbackasm1(SB)
1299+ CALL callbackasm1(SB)
1300+ CALL callbackasm1(SB)
1301+ CALL callbackasm1(SB)
1302+ CALL callbackasm1(SB)
1303+ CALL callbackasm1(SB)
1304+ CALL callbackasm1(SB)
1305+ CALL callbackasm1(SB)
1306+ CALL callbackasm1(SB)
1307+ CALL callbackasm1(SB)
1308+ CALL callbackasm1(SB)
1309+ CALL callbackasm1(SB)
1310+ CALL callbackasm1(SB)
1311+ CALL callbackasm1(SB)
1312+ CALL callbackasm1(SB)
1313+ CALL callbackasm1(SB)
1314+ CALL callbackasm1(SB)
1315+ CALL callbackasm1(SB)
1316+ CALL callbackasm1(SB)
1317+ CALL callbackasm1(SB)
1318+ CALL callbackasm1(SB)
1319+ CALL callbackasm1(SB)
1320+ CALL callbackasm1(SB)
1321+ CALL callbackasm1(SB)
1322+ CALL callbackasm1(SB)
1323+ CALL callbackasm1(SB)
1324+ CALL callbackasm1(SB)
1325+ CALL callbackasm1(SB)
1326+ CALL callbackasm1(SB)
1327+ CALL callbackasm1(SB)
1328+ CALL callbackasm1(SB)
1329+ CALL callbackasm1(SB)
1330+ CALL callbackasm1(SB)
1331+ CALL callbackasm1(SB)
1332+ CALL callbackasm1(SB)
1333+ CALL callbackasm1(SB)
1334+ CALL callbackasm1(SB)
1335+ CALL callbackasm1(SB)
1336+ CALL callbackasm1(SB)
1337+ CALL callbackasm1(SB)
1338+ CALL callbackasm1(SB)
1339+ CALL callbackasm1(SB)
1340+ CALL callbackasm1(SB)
1341+ CALL callbackasm1(SB)
1342+ CALL callbackasm1(SB)
1343+ CALL callbackasm1(SB)
1344+ CALL callbackasm1(SB)
1345+ CALL callbackasm1(SB)
1346+ CALL callbackasm1(SB)
1347+ CALL callbackasm1(SB)
1348+ CALL callbackasm1(SB)
1349+ CALL callbackasm1(SB)
1350+ CALL callbackasm1(SB)
1351+ CALL callbackasm1(SB)
1352+ CALL callbackasm1(SB)
1353+ CALL callbackasm1(SB)
1354+ CALL callbackasm1(SB)
1355+ CALL callbackasm1(SB)
1356+ CALL callbackasm1(SB)
1357+ CALL callbackasm1(SB)
1358+ CALL callbackasm1(SB)
1359+ CALL callbackasm1(SB)
1360+ CALL callbackasm1(SB)
1361+ CALL callbackasm1(SB)
1362+ CALL callbackasm1(SB)
1363+ CALL callbackasm1(SB)
1364+ CALL callbackasm1(SB)
1365+ CALL callbackasm1(SB)
1366+ CALL callbackasm1(SB)
1367+ CALL callbackasm1(SB)
1368+ CALL callbackasm1(SB)
1369+ CALL callbackasm1(SB)
1370+ CALL callbackasm1(SB)
1371+ CALL callbackasm1(SB)
1372+ CALL callbackasm1(SB)
1373+ CALL callbackasm1(SB)
1374+ CALL callbackasm1(SB)
1375+ CALL callbackasm1(SB)
1376+ CALL callbackasm1(SB)
1377+ CALL callbackasm1(SB)
1378+ CALL callbackasm1(SB)
1379+ CALL callbackasm1(SB)
1380+ CALL callbackasm1(SB)
1381+ CALL callbackasm1(SB)
1382+ CALL callbackasm1(SB)
1383+ CALL callbackasm1(SB)
1384+ CALL callbackasm1(SB)
1385+ CALL callbackasm1(SB)
1386+ CALL callbackasm1(SB)
1387+ CALL callbackasm1(SB)
1388+ CALL callbackasm1(SB)
1389+ CALL callbackasm1(SB)
1390+ CALL callbackasm1(SB)
1391+ CALL callbackasm1(SB)
1392+ CALL callbackasm1(SB)
1393+ CALL callbackasm1(SB)
1394+ CALL callbackasm1(SB)
1395+ CALL callbackasm1(SB)
1396+ CALL callbackasm1(SB)
1397+ CALL callbackasm1(SB)
1398+ CALL callbackasm1(SB)
1399+ CALL callbackasm1(SB)
1400+ CALL callbackasm1(SB)
1401+ CALL callbackasm1(SB)
1402+ CALL callbackasm1(SB)
1403+ CALL callbackasm1(SB)
1404+ CALL callbackasm1(SB)
1405+ CALL callbackasm1(SB)
1406+ CALL callbackasm1(SB)
1407+ CALL callbackasm1(SB)
1408+ CALL callbackasm1(SB)
1409+ CALL callbackasm1(SB)
1410+ CALL callbackasm1(SB)
1411+ CALL callbackasm1(SB)
1412+ CALL callbackasm1(SB)
1413+ CALL callbackasm1(SB)
1414+ CALL callbackasm1(SB)
1415+ CALL callbackasm1(SB)
1416+ CALL callbackasm1(SB)
1417+ CALL callbackasm1(SB)
1418+ CALL callbackasm1(SB)
1419+ CALL callbackasm1(SB)
1420+ CALL callbackasm1(SB)
1421+ CALL callbackasm1(SB)
1422+ CALL callbackasm1(SB)
1423+ CALL callbackasm1(SB)
1424+ CALL callbackasm1(SB)
1425+ CALL callbackasm1(SB)
1426+ CALL callbackasm1(SB)
1427+ CALL callbackasm1(SB)
1428+ CALL callbackasm1(SB)
1429+ CALL callbackasm1(SB)
1430+ CALL callbackasm1(SB)
1431+ CALL callbackasm1(SB)
1432+ CALL callbackasm1(SB)
1433+ CALL callbackasm1(SB)
1434+ CALL callbackasm1(SB)
1435+ CALL callbackasm1(SB)
1436+ CALL callbackasm1(SB)
1437+ CALL callbackasm1(SB)
1438+ CALL callbackasm1(SB)
1439+ CALL callbackasm1(SB)
1440+ CALL callbackasm1(SB)
1441+ CALL callbackasm1(SB)
1442+ CALL callbackasm1(SB)
1443+ CALL callbackasm1(SB)
1444+ CALL callbackasm1(SB)
1445+ CALL callbackasm1(SB)
1446+ CALL callbackasm1(SB)
1447+ CALL callbackasm1(SB)
1448+ CALL callbackasm1(SB)
1449+ CALL callbackasm1(SB)
1450+ CALL callbackasm1(SB)
1451+ CALL callbackasm1(SB)
1452+ CALL callbackasm1(SB)
1453+ CALL callbackasm1(SB)
1454+ CALL callbackasm1(SB)
1455+ CALL callbackasm1(SB)
1456+ CALL callbackasm1(SB)
1457+ CALL callbackasm1(SB)
1458+ CALL callbackasm1(SB)
1459+ CALL callbackasm1(SB)
1460+ CALL callbackasm1(SB)
1461+ CALL callbackasm1(SB)
1462+ CALL callbackasm1(SB)
1463+ CALL callbackasm1(SB)
1464+ CALL callbackasm1(SB)
1465+ CALL callbackasm1(SB)
1466+ CALL callbackasm1(SB)
1467+ CALL callbackasm1(SB)
1468+ CALL callbackasm1(SB)
1469+ CALL callbackasm1(SB)
1470+ CALL callbackasm1(SB)
1471+ CALL callbackasm1(SB)
1472+ CALL callbackasm1(SB)
1473+ CALL callbackasm1(SB)
1474+ CALL callbackasm1(SB)
1475+ CALL callbackasm1(SB)
1476+ CALL callbackasm1(SB)
1477+ CALL callbackasm1(SB)
1478+ CALL callbackasm1(SB)
1479+ CALL callbackasm1(SB)
1480+ CALL callbackasm1(SB)
1481+ CALL callbackasm1(SB)
1482+ CALL callbackasm1(SB)
1483+ CALL callbackasm1(SB)
1484+ CALL callbackasm1(SB)
1485+ CALL callbackasm1(SB)
1486+ CALL callbackasm1(SB)
1487+ CALL callbackasm1(SB)
1488+ CALL callbackasm1(SB)
1489+ CALL callbackasm1(SB)
1490+ CALL callbackasm1(SB)
1491+ CALL callbackasm1(SB)
1492+ CALL callbackasm1(SB)
1493+ CALL callbackasm1(SB)
1494+ CALL callbackasm1(SB)
1495+ CALL callbackasm1(SB)
1496+ CALL callbackasm1(SB)
1497+ CALL callbackasm1(SB)
1498+ CALL callbackasm1(SB)
1499+ CALL callbackasm1(SB)
1500+ CALL callbackasm1(SB)
1501+ CALL callbackasm1(SB)
1502+ CALL callbackasm1(SB)
1503+ CALL callbackasm1(SB)
1504+ CALL callbackasm1(SB)
1505+ CALL callbackasm1(SB)
1506+ CALL callbackasm1(SB)
1507+ CALL callbackasm1(SB)
1508+ CALL callbackasm1(SB)
1509+ CALL callbackasm1(SB)
1510+ CALL callbackasm1(SB)
1511+ CALL callbackasm1(SB)
1512+ CALL callbackasm1(SB)
1513+ CALL callbackasm1(SB)
1514+ CALL callbackasm1(SB)
1515+ CALL callbackasm1(SB)
1516+ CALL callbackasm1(SB)
1517+ CALL callbackasm1(SB)
1518+ CALL callbackasm1(SB)
1519+ CALL callbackasm1(SB)
1520+ CALL callbackasm1(SB)
1521+ CALL callbackasm1(SB)
1522+ CALL callbackasm1(SB)
1523+ CALL callbackasm1(SB)
1524+ CALL callbackasm1(SB)
1525+ CALL callbackasm1(SB)
1526+ CALL callbackasm1(SB)
1527+ CALL callbackasm1(SB)
1528+ CALL callbackasm1(SB)
1529+ CALL callbackasm1(SB)
1530+ CALL callbackasm1(SB)
1531+ CALL callbackasm1(SB)
1532+ CALL callbackasm1(SB)
1533+ CALL callbackasm1(SB)
1534+ CALL callbackasm1(SB)
1535+ CALL callbackasm1(SB)
1536+ CALL callbackasm1(SB)
1537+ CALL callbackasm1(SB)
1538+ CALL callbackasm1(SB)
1539+ CALL callbackasm1(SB)
1540+ CALL callbackasm1(SB)
1541+ CALL callbackasm1(SB)
1542+ CALL callbackasm1(SB)
1543+ CALL callbackasm1(SB)
1544+ CALL callbackasm1(SB)
1545+ CALL callbackasm1(SB)
1546+ CALL callbackasm1(SB)
1547+ CALL callbackasm1(SB)
1548+ CALL callbackasm1(SB)
1549+ CALL callbackasm1(SB)
1550+ CALL callbackasm1(SB)
1551+ CALL callbackasm1(SB)
1552+ CALL callbackasm1(SB)
1553+ CALL callbackasm1(SB)
1554+ CALL callbackasm1(SB)
1555+ CALL callbackasm1(SB)
1556+ CALL callbackasm1(SB)
1557+ CALL callbackasm1(SB)
1558+ CALL callbackasm1(SB)
1559+ CALL callbackasm1(SB)
1560+ CALL callbackasm1(SB)
1561+ CALL callbackasm1(SB)
1562+ CALL callbackasm1(SB)
1563+ CALL callbackasm1(SB)
1564+ CALL callbackasm1(SB)
1565+ CALL callbackasm1(SB)
1566+ CALL callbackasm1(SB)
1567+ CALL callbackasm1(SB)
1568+ CALL callbackasm1(SB)
1569+ CALL callbackasm1(SB)
1570+ CALL callbackasm1(SB)
1571+ CALL callbackasm1(SB)
1572+ CALL callbackasm1(SB)
1573+ CALL callbackasm1(SB)
1574+ CALL callbackasm1(SB)
1575+ CALL callbackasm1(SB)
1576+ CALL callbackasm1(SB)
1577+ CALL callbackasm1(SB)
1578+ CALL callbackasm1(SB)
1579+ CALL callbackasm1(SB)
1580+ CALL callbackasm1(SB)
1581+ CALL callbackasm1(SB)
1582+ CALL callbackasm1(SB)
1583+ CALL callbackasm1(SB)
1584+ CALL callbackasm1(SB)
1585+ CALL callbackasm1(SB)
1586+ CALL callbackasm1(SB)
1587+ CALL callbackasm1(SB)
1588+ CALL callbackasm1(SB)
1589+ CALL callbackasm1(SB)
1590+ CALL callbackasm1(SB)
1591+ CALL callbackasm1(SB)
1592+ CALL callbackasm1(SB)
1593+ CALL callbackasm1(SB)
1594+ CALL callbackasm1(SB)
1595+ CALL callbackasm1(SB)
1596+ CALL callbackasm1(SB)
1597+ CALL callbackasm1(SB)
1598+ CALL callbackasm1(SB)
1599+ CALL callbackasm1(SB)
1600+ CALL callbackasm1(SB)
1601+ CALL callbackasm1(SB)
1602+ CALL callbackasm1(SB)
1603+ CALL callbackasm1(SB)
1604+ CALL callbackasm1(SB)
1605+ CALL callbackasm1(SB)
1606+ CALL callbackasm1(SB)
1607+ CALL callbackasm1(SB)
1608+ CALL callbackasm1(SB)
1609+ CALL callbackasm1(SB)
1610+ CALL callbackasm1(SB)
1611+ CALL callbackasm1(SB)
1612+ CALL callbackasm1(SB)
1613+ CALL callbackasm1(SB)
1614+ CALL callbackasm1(SB)
1615+ CALL callbackasm1(SB)
1616+ CALL callbackasm1(SB)
1617+ CALL callbackasm1(SB)
1618+ CALL callbackasm1(SB)
1619+ CALL callbackasm1(SB)
1620+ CALL callbackasm1(SB)
1621+ CALL callbackasm1(SB)
1622+ CALL callbackasm1(SB)
1623+ CALL callbackasm1(SB)
1624+ CALL callbackasm1(SB)
1625+ CALL callbackasm1(SB)
1626+ CALL callbackasm1(SB)
1627+ CALL callbackasm1(SB)
1628+ CALL callbackasm1(SB)
1629+ CALL callbackasm1(SB)
1630+ CALL callbackasm1(SB)
1631+ CALL callbackasm1(SB)
1632+ CALL callbackasm1(SB)
1633+ CALL callbackasm1(SB)
1634+ CALL callbackasm1(SB)
1635+ CALL callbackasm1(SB)
1636+ CALL callbackasm1(SB)
1637+ CALL callbackasm1(SB)
1638+ CALL callbackasm1(SB)
1639+ CALL callbackasm1(SB)
1640+ CALL callbackasm1(SB)
1641+ CALL callbackasm1(SB)
1642+ CALL callbackasm1(SB)
1643+ CALL callbackasm1(SB)
1644+ CALL callbackasm1(SB)
1645+ CALL callbackasm1(SB)
1646+ CALL callbackasm1(SB)
1647+ CALL callbackasm1(SB)
1648+ CALL callbackasm1(SB)
1649+ CALL callbackasm1(SB)
1650+ CALL callbackasm1(SB)
1651+ CALL callbackasm1(SB)
1652+ CALL callbackasm1(SB)
1653+ CALL callbackasm1(SB)
1654+ CALL callbackasm1(SB)
1655+ CALL callbackasm1(SB)
1656+ CALL callbackasm1(SB)
1657+ CALL callbackasm1(SB)
1658+ CALL callbackasm1(SB)
1659+ CALL callbackasm1(SB)
1660+ CALL callbackasm1(SB)
1661+ CALL callbackasm1(SB)
1662+ CALL callbackasm1(SB)
1663+ CALL callbackasm1(SB)
1664+ CALL callbackasm1(SB)
1665+ CALL callbackasm1(SB)
1666+ CALL callbackasm1(SB)
1667+ CALL callbackasm1(SB)
1668+ CALL callbackasm1(SB)
1669+ CALL callbackasm1(SB)
1670+ CALL callbackasm1(SB)
1671+ CALL callbackasm1(SB)
1672+ CALL callbackasm1(SB)
1673+ CALL callbackasm1(SB)
1674+ CALL callbackasm1(SB)
1675+ CALL callbackasm1(SB)
1676+ CALL callbackasm1(SB)
1677+ CALL callbackasm1(SB)
1678+ CALL callbackasm1(SB)
1679+ CALL callbackasm1(SB)
1680+ CALL callbackasm1(SB)
1681+ CALL callbackasm1(SB)
1682+ CALL callbackasm1(SB)
1683+ CALL callbackasm1(SB)
1684+ CALL callbackasm1(SB)
1685+ CALL callbackasm1(SB)
1686+ CALL callbackasm1(SB)
1687+ CALL callbackasm1(SB)
1688+ CALL callbackasm1(SB)
1689+ CALL callbackasm1(SB)
1690+ CALL callbackasm1(SB)
1691+ CALL callbackasm1(SB)
1692+ CALL callbackasm1(SB)
1693+ CALL callbackasm1(SB)
1694+ CALL callbackasm1(SB)
1695+ CALL callbackasm1(SB)
1696+ CALL callbackasm1(SB)
1697+ CALL callbackasm1(SB)
1698+ CALL callbackasm1(SB)
1699+ CALL callbackasm1(SB)
1700+ CALL callbackasm1(SB)
1701+ CALL callbackasm1(SB)
1702+ CALL callbackasm1(SB)
1703+ CALL callbackasm1(SB)
1704+ CALL callbackasm1(SB)
1705+ CALL callbackasm1(SB)
1706+ CALL callbackasm1(SB)
1707+ CALL callbackasm1(SB)
1708+ CALL callbackasm1(SB)
1709+ CALL callbackasm1(SB)
1710+ CALL callbackasm1(SB)
1711+ CALL callbackasm1(SB)
1712+ CALL callbackasm1(SB)
1713+ CALL callbackasm1(SB)
1714+ CALL callbackasm1(SB)
1715+ CALL callbackasm1(SB)
1716+ CALL callbackasm1(SB)
1717+ CALL callbackasm1(SB)
1718+ CALL callbackasm1(SB)
1719+ CALL callbackasm1(SB)
1720+ CALL callbackasm1(SB)
1721+ CALL callbackasm1(SB)
1722+ CALL callbackasm1(SB)
1723+ CALL callbackasm1(SB)
1724+ CALL callbackasm1(SB)
1725+ CALL callbackasm1(SB)
1726+ CALL callbackasm1(SB)
1727+ CALL callbackasm1(SB)
1728+ CALL callbackasm1(SB)
1729+ CALL callbackasm1(SB)
1730+ CALL callbackasm1(SB)
1731+ CALL callbackasm1(SB)
1732+ CALL callbackasm1(SB)
1733+ CALL callbackasm1(SB)
1734+ CALL callbackasm1(SB)
1735+ CALL callbackasm1(SB)
1736+ CALL callbackasm1(SB)
1737+ CALL callbackasm1(SB)
1738+ CALL callbackasm1(SB)
1739+ CALL callbackasm1(SB)
1740+ CALL callbackasm1(SB)
1741+ CALL callbackasm1(SB)
1742+ CALL callbackasm1(SB)
1743+ CALL callbackasm1(SB)
1744+ CALL callbackasm1(SB)
1745+ CALL callbackasm1(SB)
1746+ CALL callbackasm1(SB)
1747+ CALL callbackasm1(SB)
1748+ CALL callbackasm1(SB)
1749+ CALL callbackasm1(SB)
1750+ CALL callbackasm1(SB)
1751+ CALL callbackasm1(SB)
1752+ CALL callbackasm1(SB)
1753+ CALL callbackasm1(SB)
1754+ CALL callbackasm1(SB)
1755+ CALL callbackasm1(SB)
1756+ CALL callbackasm1(SB)
1757+ CALL callbackasm1(SB)
1758+ CALL callbackasm1(SB)
1759+ CALL callbackasm1(SB)
1760+ CALL callbackasm1(SB)
1761+ CALL callbackasm1(SB)
1762+ CALL callbackasm1(SB)
1763+ CALL callbackasm1(SB)
1764+ CALL callbackasm1(SB)
1765+ CALL callbackasm1(SB)
1766+ CALL callbackasm1(SB)
1767+ CALL callbackasm1(SB)
1768+ CALL callbackasm1(SB)
1769+ CALL callbackasm1(SB)
1770+ CALL callbackasm1(SB)
1771+ CALL callbackasm1(SB)
1772+ CALL callbackasm1(SB)
1773+ CALL callbackasm1(SB)
1774+ CALL callbackasm1(SB)
1775+ CALL callbackasm1(SB)
1776+ CALL callbackasm1(SB)
1777+ CALL callbackasm1(SB)
1778+ CALL callbackasm1(SB)
1779+ CALL callbackasm1(SB)
1780+ CALL callbackasm1(SB)
1781+ CALL callbackasm1(SB)
1782+ CALL callbackasm1(SB)
1783+ CALL callbackasm1(SB)
1784+ CALL callbackasm1(SB)
1785+ CALL callbackasm1(SB)
1786+ CALL callbackasm1(SB)
1787+ CALL callbackasm1(SB)
1788+ CALL callbackasm1(SB)
1789+ CALL callbackasm1(SB)
1790+ CALL callbackasm1(SB)
1791+ CALL callbackasm1(SB)
1792+ CALL callbackasm1(SB)
1793+ CALL callbackasm1(SB)
1794+ CALL callbackasm1(SB)
1795+ CALL callbackasm1(SB)
1796+ CALL callbackasm1(SB)
1797+ CALL callbackasm1(SB)
1798+ CALL callbackasm1(SB)
1799+ CALL callbackasm1(SB)
1800+ CALL callbackasm1(SB)
1801+ CALL callbackasm1(SB)
1802+ CALL callbackasm1(SB)
1803+ CALL callbackasm1(SB)
1804+ CALL callbackasm1(SB)
1805+ CALL callbackasm1(SB)
1806+ CALL callbackasm1(SB)
1807+ CALL callbackasm1(SB)
1808+ CALL callbackasm1(SB)
1809+ CALL callbackasm1(SB)
1810+ CALL callbackasm1(SB)
1811+ CALL callbackasm1(SB)
1812+ CALL callbackasm1(SB)
1813+ CALL callbackasm1(SB)
1814+ CALL callbackasm1(SB)
1815+ CALL callbackasm1(SB)
1816+ CALL callbackasm1(SB)
1817+ CALL callbackasm1(SB)
1818+ CALL callbackasm1(SB)
1819+ CALL callbackasm1(SB)
1820+ CALL callbackasm1(SB)
1821+ CALL callbackasm1(SB)
1822+ CALL callbackasm1(SB)
1823+ CALL callbackasm1(SB)
1824+ CALL callbackasm1(SB)
1825+ CALL callbackasm1(SB)
1826+ CALL callbackasm1(SB)
1827+ CALL callbackasm1(SB)
1828+ CALL callbackasm1(SB)
1829+ CALL callbackasm1(SB)
1830+ CALL callbackasm1(SB)
1831+ CALL callbackasm1(SB)
1832+ CALL callbackasm1(SB)
1833+ CALL callbackasm1(SB)
1834+ CALL callbackasm1(SB)
1835+ CALL callbackasm1(SB)
1836+ CALL callbackasm1(SB)
1837+ CALL callbackasm1(SB)
1838+ CALL callbackasm1(SB)
1839+ CALL callbackasm1(SB)
1840+ CALL callbackasm1(SB)
1841+ CALL callbackasm1(SB)
1842+ CALL callbackasm1(SB)
1843+ CALL callbackasm1(SB)
1844+ CALL callbackasm1(SB)
1845+ CALL callbackasm1(SB)
1846+ CALL callbackasm1(SB)
1847+ CALL callbackasm1(SB)
1848+ CALL callbackasm1(SB)
1849+ CALL callbackasm1(SB)
1850+ CALL callbackasm1(SB)
1851+ CALL callbackasm1(SB)
1852+ CALL callbackasm1(SB)
1853+ CALL callbackasm1(SB)
1854+ CALL callbackasm1(SB)
1855+ CALL callbackasm1(SB)
1856+ CALL callbackasm1(SB)
1857+ CALL callbackasm1(SB)
1858+ CALL callbackasm1(SB)
1859+ CALL callbackasm1(SB)
1860+ CALL callbackasm1(SB)
1861+ CALL callbackasm1(SB)
1862+ CALL callbackasm1(SB)
1863+ CALL callbackasm1(SB)
1864+ CALL callbackasm1(SB)
1865+ CALL callbackasm1(SB)
1866+ CALL callbackasm1(SB)
1867+ CALL callbackasm1(SB)
1868+ CALL callbackasm1(SB)
1869+ CALL callbackasm1(SB)
1870+ CALL callbackasm1(SB)
1871+ CALL callbackasm1(SB)
1872+ CALL callbackasm1(SB)
1873+ CALL callbackasm1(SB)
1874+ CALL callbackasm1(SB)
1875+ CALL callbackasm1(SB)
1876+ CALL callbackasm1(SB)
1877+ CALL callbackasm1(SB)
1878+ CALL callbackasm1(SB)
1879+ CALL callbackasm1(SB)
1880+ CALL callbackasm1(SB)
1881+ CALL callbackasm1(SB)
1882+ CALL callbackasm1(SB)
1883+ CALL callbackasm1(SB)
1884+ CALL callbackasm1(SB)
1885+ CALL callbackasm1(SB)
1886+ CALL callbackasm1(SB)
1887+ CALL callbackasm1(SB)
1888+ CALL callbackasm1(SB)
1889+ CALL callbackasm1(SB)
1890+ CALL callbackasm1(SB)
1891+ CALL callbackasm1(SB)
1892+ CALL callbackasm1(SB)
1893+ CALL callbackasm1(SB)
1894+ CALL callbackasm1(SB)
1895+ CALL callbackasm1(SB)
1896+ CALL callbackasm1(SB)
1897+ CALL callbackasm1(SB)
1898+ CALL callbackasm1(SB)
1899+ CALL callbackasm1(SB)
1900+ CALL callbackasm1(SB)
1901+ CALL callbackasm1(SB)
1902+ CALL callbackasm1(SB)
1903+ CALL callbackasm1(SB)
1904+ CALL callbackasm1(SB)
1905+ CALL callbackasm1(SB)
1906+ CALL callbackasm1(SB)
1907+ CALL callbackasm1(SB)
1908+ CALL callbackasm1(SB)
1909+ CALL callbackasm1(SB)
1910+ CALL callbackasm1(SB)
1911+ CALL callbackasm1(SB)
1912+ CALL callbackasm1(SB)
1913+ CALL callbackasm1(SB)
1914+ CALL callbackasm1(SB)
1915+ CALL callbackasm1(SB)
1916+ CALL callbackasm1(SB)
1917+ CALL callbackasm1(SB)
1918+ CALL callbackasm1(SB)
1919+ CALL callbackasm1(SB)
1920+ CALL callbackasm1(SB)
1921+ CALL callbackasm1(SB)
1922+ CALL callbackasm1(SB)
1923+ CALL callbackasm1(SB)
1924+ CALL callbackasm1(SB)
1925+ CALL callbackasm1(SB)
1926+ CALL callbackasm1(SB)
1927+ CALL callbackasm1(SB)
1928+ CALL callbackasm1(SB)
1929+ CALL callbackasm1(SB)
1930+ CALL callbackasm1(SB)
1931+ CALL callbackasm1(SB)
1932+ CALL callbackasm1(SB)
1933+ CALL callbackasm1(SB)
1934+ CALL callbackasm1(SB)
1935+ CALL callbackasm1(SB)
1936+ CALL callbackasm1(SB)
1937+ CALL callbackasm1(SB)
1938+ CALL callbackasm1(SB)
1939+ CALL callbackasm1(SB)
1940+ CALL callbackasm1(SB)
1941+ CALL callbackasm1(SB)
1942+ CALL callbackasm1(SB)
1943+ CALL callbackasm1(SB)
1944+ CALL callbackasm1(SB)
1945+ CALL callbackasm1(SB)
1946+ CALL callbackasm1(SB)
1947+ CALL callbackasm1(SB)
1948+ CALL callbackasm1(SB)
1949+ CALL callbackasm1(SB)
1950+ CALL callbackasm1(SB)
1951+ CALL callbackasm1(SB)
1952+ CALL callbackasm1(SB)
1953+ CALL callbackasm1(SB)
1954+ CALL callbackasm1(SB)
1955+ CALL callbackasm1(SB)
1956+ CALL callbackasm1(SB)
1957+ CALL callbackasm1(SB)
1958+ CALL callbackasm1(SB)
1959+ CALL callbackasm1(SB)
1960+ CALL callbackasm1(SB)
1961+ CALL callbackasm1(SB)
1962+ CALL callbackasm1(SB)
1963+ CALL callbackasm1(SB)
1964+ CALL callbackasm1(SB)
1965+ CALL callbackasm1(SB)
1966+ CALL callbackasm1(SB)
1967+ CALL callbackasm1(SB)
1968+ CALL callbackasm1(SB)
1969+ CALL callbackasm1(SB)
1970+ CALL callbackasm1(SB)
1971+ CALL callbackasm1(SB)
1972+ CALL callbackasm1(SB)
1973+ CALL callbackasm1(SB)
1974+ CALL callbackasm1(SB)
1975+ CALL callbackasm1(SB)
1976+ CALL callbackasm1(SB)
1977+ CALL callbackasm1(SB)
1978+ CALL callbackasm1(SB)
1979+ CALL callbackasm1(SB)
1980+ CALL callbackasm1(SB)
1981+ CALL callbackasm1(SB)
1982+ CALL callbackasm1(SB)
1983+ CALL callbackasm1(SB)
1984+ CALL callbackasm1(SB)
1985+ CALL callbackasm1(SB)
1986+ CALL callbackasm1(SB)
1987+ CALL callbackasm1(SB)
1988+ CALL callbackasm1(SB)
1989+ CALL callbackasm1(SB)
1990+ CALL callbackasm1(SB)
1991+ CALL callbackasm1(SB)
1992+ CALL callbackasm1(SB)
1993+ CALL callbackasm1(SB)
1994+ CALL callbackasm1(SB)
1995+ CALL callbackasm1(SB)
1996+ CALL callbackasm1(SB)
1997+ CALL callbackasm1(SB)
1998+ CALL callbackasm1(SB)
1999+ CALL callbackasm1(SB)
2000+ CALL callbackasm1(SB)
2001+ CALL callbackasm1(SB)
2002+ CALL callbackasm1(SB)
2003+ CALL callbackasm1(SB)
2004+ CALL callbackasm1(SB)
2005+ CALL callbackasm1(SB)
2006+ CALL callbackasm1(SB)
2007+ CALL callbackasm1(SB)
2008+ CALL callbackasm1(SB)
2009+ CALL callbackasm1(SB)
2010+ CALL callbackasm1(SB)
2011+ CALL callbackasm1(SB)
2012+ CALL callbackasm1(SB)
2013+ CALL callbackasm1(SB)
2014+ CALL callbackasm1(SB)
@@ -0,0 +1,2014 @@
1+// Code generated by wincallback.go using 'go generate'. DO NOT EDIT.
2+
3+// runtime·callbackasm is called by external code to
4+// execute Go implemented callback function. It is not
5+// called from the start, instead runtime·compilecallback
6+// always returns address into runtime·callbackasm offset
7+// appropriately so different callbacks start with different
8+// CALL instruction in runtime·callbackasm. This determines
9+// which Go callback function is executed later on.
10+#include "textflag.h"
11+
12+GLOBL ·callbackasmABI0(SB), NOPTR|RODATA, $8
13+DATA ·callbackasmABI0(SB)/8, $callbackasm(SB)
14+TEXT callbackasm(SB), 7, $0
15+ CALL callbackasm1(SB)
16+ CALL callbackasm1(SB)
17+ CALL callbackasm1(SB)
18+ CALL callbackasm1(SB)
19+ CALL callbackasm1(SB)
20+ CALL callbackasm1(SB)
21+ CALL callbackasm1(SB)
22+ CALL callbackasm1(SB)
23+ CALL callbackasm1(SB)
24+ CALL callbackasm1(SB)
25+ CALL callbackasm1(SB)
26+ CALL callbackasm1(SB)
27+ CALL callbackasm1(SB)
28+ CALL callbackasm1(SB)
29+ CALL callbackasm1(SB)
30+ CALL callbackasm1(SB)
31+ CALL callbackasm1(SB)
32+ CALL callbackasm1(SB)
33+ CALL callbackasm1(SB)
34+ CALL callbackasm1(SB)
35+ CALL callbackasm1(SB)
36+ CALL callbackasm1(SB)
37+ CALL callbackasm1(SB)
38+ CALL callbackasm1(SB)
39+ CALL callbackasm1(SB)
40+ CALL callbackasm1(SB)
41+ CALL callbackasm1(SB)
42+ CALL callbackasm1(SB)
43+ CALL callbackasm1(SB)
44+ CALL callbackasm1(SB)
45+ CALL callbackasm1(SB)
46+ CALL callbackasm1(SB)
47+ CALL callbackasm1(SB)
48+ CALL callbackasm1(SB)
49+ CALL callbackasm1(SB)
50+ CALL callbackasm1(SB)
51+ CALL callbackasm1(SB)
52+ CALL callbackasm1(SB)
53+ CALL callbackasm1(SB)
54+ CALL callbackasm1(SB)
55+ CALL callbackasm1(SB)
56+ CALL callbackasm1(SB)
57+ CALL callbackasm1(SB)
58+ CALL callbackasm1(SB)
59+ CALL callbackasm1(SB)
60+ CALL callbackasm1(SB)
61+ CALL callbackasm1(SB)
62+ CALL callbackasm1(SB)
63+ CALL callbackasm1(SB)
64+ CALL callbackasm1(SB)
65+ CALL callbackasm1(SB)
66+ CALL callbackasm1(SB)
67+ CALL callbackasm1(SB)
68+ CALL callbackasm1(SB)
69+ CALL callbackasm1(SB)
70+ CALL callbackasm1(SB)
71+ CALL callbackasm1(SB)
72+ CALL callbackasm1(SB)
73+ CALL callbackasm1(SB)
74+ CALL callbackasm1(SB)
75+ CALL callbackasm1(SB)
76+ CALL callbackasm1(SB)
77+ CALL callbackasm1(SB)
78+ CALL callbackasm1(SB)
79+ CALL callbackasm1(SB)
80+ CALL callbackasm1(SB)
81+ CALL callbackasm1(SB)
82+ CALL callbackasm1(SB)
83+ CALL callbackasm1(SB)
84+ CALL callbackasm1(SB)
85+ CALL callbackasm1(SB)
86+ CALL callbackasm1(SB)
87+ CALL callbackasm1(SB)
88+ CALL callbackasm1(SB)
89+ CALL callbackasm1(SB)
90+ CALL callbackasm1(SB)
91+ CALL callbackasm1(SB)
92+ CALL callbackasm1(SB)
93+ CALL callbackasm1(SB)
94+ CALL callbackasm1(SB)
95+ CALL callbackasm1(SB)
96+ CALL callbackasm1(SB)
97+ CALL callbackasm1(SB)
98+ CALL callbackasm1(SB)
99+ CALL callbackasm1(SB)
100+ CALL callbackasm1(SB)
101+ CALL callbackasm1(SB)
102+ CALL callbackasm1(SB)
103+ CALL callbackasm1(SB)
104+ CALL callbackasm1(SB)
105+ CALL callbackasm1(SB)
106+ CALL callbackasm1(SB)
107+ CALL callbackasm1(SB)
108+ CALL callbackasm1(SB)
109+ CALL callbackasm1(SB)
110+ CALL callbackasm1(SB)
111+ CALL callbackasm1(SB)
112+ CALL callbackasm1(SB)
113+ CALL callbackasm1(SB)
114+ CALL callbackasm1(SB)
115+ CALL callbackasm1(SB)
116+ CALL callbackasm1(SB)
117+ CALL callbackasm1(SB)
118+ CALL callbackasm1(SB)
119+ CALL callbackasm1(SB)
120+ CALL callbackasm1(SB)
121+ CALL callbackasm1(SB)
122+ CALL callbackasm1(SB)
123+ CALL callbackasm1(SB)
124+ CALL callbackasm1(SB)
125+ CALL callbackasm1(SB)
126+ CALL callbackasm1(SB)
127+ CALL callbackasm1(SB)
128+ CALL callbackasm1(SB)
129+ CALL callbackasm1(SB)
130+ CALL callbackasm1(SB)
131+ CALL callbackasm1(SB)
132+ CALL callbackasm1(SB)
133+ CALL callbackasm1(SB)
134+ CALL callbackasm1(SB)
135+ CALL callbackasm1(SB)
136+ CALL callbackasm1(SB)
137+ CALL callbackasm1(SB)
138+ CALL callbackasm1(SB)
139+ CALL callbackasm1(SB)
140+ CALL callbackasm1(SB)
141+ CALL callbackasm1(SB)
142+ CALL callbackasm1(SB)
143+ CALL callbackasm1(SB)
144+ CALL callbackasm1(SB)
145+ CALL callbackasm1(SB)
146+ CALL callbackasm1(SB)
147+ CALL callbackasm1(SB)
148+ CALL callbackasm1(SB)
149+ CALL callbackasm1(SB)
150+ CALL callbackasm1(SB)
151+ CALL callbackasm1(SB)
152+ CALL callbackasm1(SB)
153+ CALL callbackasm1(SB)
154+ CALL callbackasm1(SB)
155+ CALL callbackasm1(SB)
156+ CALL callbackasm1(SB)
157+ CALL callbackasm1(SB)
158+ CALL callbackasm1(SB)
159+ CALL callbackasm1(SB)
160+ CALL callbackasm1(SB)
161+ CALL callbackasm1(SB)
162+ CALL callbackasm1(SB)
163+ CALL callbackasm1(SB)
164+ CALL callbackasm1(SB)
165+ CALL callbackasm1(SB)
166+ CALL callbackasm1(SB)
167+ CALL callbackasm1(SB)
168+ CALL callbackasm1(SB)
169+ CALL callbackasm1(SB)
170+ CALL callbackasm1(SB)
171+ CALL callbackasm1(SB)
172+ CALL callbackasm1(SB)
173+ CALL callbackasm1(SB)
174+ CALL callbackasm1(SB)
175+ CALL callbackasm1(SB)
176+ CALL callbackasm1(SB)
177+ CALL callbackasm1(SB)
178+ CALL callbackasm1(SB)
179+ CALL callbackasm1(SB)
180+ CALL callbackasm1(SB)
181+ CALL callbackasm1(SB)
182+ CALL callbackasm1(SB)
183+ CALL callbackasm1(SB)
184+ CALL callbackasm1(SB)
185+ CALL callbackasm1(SB)
186+ CALL callbackasm1(SB)
187+ CALL callbackasm1(SB)
188+ CALL callbackasm1(SB)
189+ CALL callbackasm1(SB)
190+ CALL callbackasm1(SB)
191+ CALL callbackasm1(SB)
192+ CALL callbackasm1(SB)
193+ CALL callbackasm1(SB)
194+ CALL callbackasm1(SB)
195+ CALL callbackasm1(SB)
196+ CALL callbackasm1(SB)
197+ CALL callbackasm1(SB)
198+ CALL callbackasm1(SB)
199+ CALL callbackasm1(SB)
200+ CALL callbackasm1(SB)
201+ CALL callbackasm1(SB)
202+ CALL callbackasm1(SB)
203+ CALL callbackasm1(SB)
204+ CALL callbackasm1(SB)
205+ CALL callbackasm1(SB)
206+ CALL callbackasm1(SB)
207+ CALL callbackasm1(SB)
208+ CALL callbackasm1(SB)
209+ CALL callbackasm1(SB)
210+ CALL callbackasm1(SB)
211+ CALL callbackasm1(SB)
212+ CALL callbackasm1(SB)
213+ CALL callbackasm1(SB)
214+ CALL callbackasm1(SB)
215+ CALL callbackasm1(SB)
216+ CALL callbackasm1(SB)
217+ CALL callbackasm1(SB)
218+ CALL callbackasm1(SB)
219+ CALL callbackasm1(SB)
220+ CALL callbackasm1(SB)
221+ CALL callbackasm1(SB)
222+ CALL callbackasm1(SB)
223+ CALL callbackasm1(SB)
224+ CALL callbackasm1(SB)
225+ CALL callbackasm1(SB)
226+ CALL callbackasm1(SB)
227+ CALL callbackasm1(SB)
228+ CALL callbackasm1(SB)
229+ CALL callbackasm1(SB)
230+ CALL callbackasm1(SB)
231+ CALL callbackasm1(SB)
232+ CALL callbackasm1(SB)
233+ CALL callbackasm1(SB)
234+ CALL callbackasm1(SB)
235+ CALL callbackasm1(SB)
236+ CALL callbackasm1(SB)
237+ CALL callbackasm1(SB)
238+ CALL callbackasm1(SB)
239+ CALL callbackasm1(SB)
240+ CALL callbackasm1(SB)
241+ CALL callbackasm1(SB)
242+ CALL callbackasm1(SB)
243+ CALL callbackasm1(SB)
244+ CALL callbackasm1(SB)
245+ CALL callbackasm1(SB)
246+ CALL callbackasm1(SB)
247+ CALL callbackasm1(SB)
248+ CALL callbackasm1(SB)
249+ CALL callbackasm1(SB)
250+ CALL callbackasm1(SB)
251+ CALL callbackasm1(SB)
252+ CALL callbackasm1(SB)
253+ CALL callbackasm1(SB)
254+ CALL callbackasm1(SB)
255+ CALL callbackasm1(SB)
256+ CALL callbackasm1(SB)
257+ CALL callbackasm1(SB)
258+ CALL callbackasm1(SB)
259+ CALL callbackasm1(SB)
260+ CALL callbackasm1(SB)
261+ CALL callbackasm1(SB)
262+ CALL callbackasm1(SB)
263+ CALL callbackasm1(SB)
264+ CALL callbackasm1(SB)
265+ CALL callbackasm1(SB)
266+ CALL callbackasm1(SB)
267+ CALL callbackasm1(SB)
268+ CALL callbackasm1(SB)
269+ CALL callbackasm1(SB)
270+ CALL callbackasm1(SB)
271+ CALL callbackasm1(SB)
272+ CALL callbackasm1(SB)
273+ CALL callbackasm1(SB)
274+ CALL callbackasm1(SB)
275+ CALL callbackasm1(SB)
276+ CALL callbackasm1(SB)
277+ CALL callbackasm1(SB)
278+ CALL callbackasm1(SB)
279+ CALL callbackasm1(SB)
280+ CALL callbackasm1(SB)
281+ CALL callbackasm1(SB)
282+ CALL callbackasm1(SB)
283+ CALL callbackasm1(SB)
284+ CALL callbackasm1(SB)
285+ CALL callbackasm1(SB)
286+ CALL callbackasm1(SB)
287+ CALL callbackasm1(SB)
288+ CALL callbackasm1(SB)
289+ CALL callbackasm1(SB)
290+ CALL callbackasm1(SB)
291+ CALL callbackasm1(SB)
292+ CALL callbackasm1(SB)
293+ CALL callbackasm1(SB)
294+ CALL callbackasm1(SB)
295+ CALL callbackasm1(SB)
296+ CALL callbackasm1(SB)
297+ CALL callbackasm1(SB)
298+ CALL callbackasm1(SB)
299+ CALL callbackasm1(SB)
300+ CALL callbackasm1(SB)
301+ CALL callbackasm1(SB)
302+ CALL callbackasm1(SB)
303+ CALL callbackasm1(SB)
304+ CALL callbackasm1(SB)
305+ CALL callbackasm1(SB)
306+ CALL callbackasm1(SB)
307+ CALL callbackasm1(SB)
308+ CALL callbackasm1(SB)
309+ CALL callbackasm1(SB)
310+ CALL callbackasm1(SB)
311+ CALL callbackasm1(SB)
312+ CALL callbackasm1(SB)
313+ CALL callbackasm1(SB)
314+ CALL callbackasm1(SB)
315+ CALL callbackasm1(SB)
316+ CALL callbackasm1(SB)
317+ CALL callbackasm1(SB)
318+ CALL callbackasm1(SB)
319+ CALL callbackasm1(SB)
320+ CALL callbackasm1(SB)
321+ CALL callbackasm1(SB)
322+ CALL callbackasm1(SB)
323+ CALL callbackasm1(SB)
324+ CALL callbackasm1(SB)
325+ CALL callbackasm1(SB)
326+ CALL callbackasm1(SB)
327+ CALL callbackasm1(SB)
328+ CALL callbackasm1(SB)
329+ CALL callbackasm1(SB)
330+ CALL callbackasm1(SB)
331+ CALL callbackasm1(SB)
332+ CALL callbackasm1(SB)
333+ CALL callbackasm1(SB)
334+ CALL callbackasm1(SB)
335+ CALL callbackasm1(SB)
336+ CALL callbackasm1(SB)
337+ CALL callbackasm1(SB)
338+ CALL callbackasm1(SB)
339+ CALL callbackasm1(SB)
340+ CALL callbackasm1(SB)
341+ CALL callbackasm1(SB)
342+ CALL callbackasm1(SB)
343+ CALL callbackasm1(SB)
344+ CALL callbackasm1(SB)
345+ CALL callbackasm1(SB)
346+ CALL callbackasm1(SB)
347+ CALL callbackasm1(SB)
348+ CALL callbackasm1(SB)
349+ CALL callbackasm1(SB)
350+ CALL callbackasm1(SB)
351+ CALL callbackasm1(SB)
352+ CALL callbackasm1(SB)
353+ CALL callbackasm1(SB)
354+ CALL callbackasm1(SB)
355+ CALL callbackasm1(SB)
356+ CALL callbackasm1(SB)
357+ CALL callbackasm1(SB)
358+ CALL callbackasm1(SB)
359+ CALL callbackasm1(SB)
360+ CALL callbackasm1(SB)
361+ CALL callbackasm1(SB)
362+ CALL callbackasm1(SB)
363+ CALL callbackasm1(SB)
364+ CALL callbackasm1(SB)
365+ CALL callbackasm1(SB)
366+ CALL callbackasm1(SB)
367+ CALL callbackasm1(SB)
368+ CALL callbackasm1(SB)
369+ CALL callbackasm1(SB)
370+ CALL callbackasm1(SB)
371+ CALL callbackasm1(SB)
372+ CALL callbackasm1(SB)
373+ CALL callbackasm1(SB)
374+ CALL callbackasm1(SB)
375+ CALL callbackasm1(SB)
376+ CALL callbackasm1(SB)
377+ CALL callbackasm1(SB)
378+ CALL callbackasm1(SB)
379+ CALL callbackasm1(SB)
380+ CALL callbackasm1(SB)
381+ CALL callbackasm1(SB)
382+ CALL callbackasm1(SB)
383+ CALL callbackasm1(SB)
384+ CALL callbackasm1(SB)
385+ CALL callbackasm1(SB)
386+ CALL callbackasm1(SB)
387+ CALL callbackasm1(SB)
388+ CALL callbackasm1(SB)
389+ CALL callbackasm1(SB)
390+ CALL callbackasm1(SB)
391+ CALL callbackasm1(SB)
392+ CALL callbackasm1(SB)
393+ CALL callbackasm1(SB)
394+ CALL callbackasm1(SB)
395+ CALL callbackasm1(SB)
396+ CALL callbackasm1(SB)
397+ CALL callbackasm1(SB)
398+ CALL callbackasm1(SB)
399+ CALL callbackasm1(SB)
400+ CALL callbackasm1(SB)
401+ CALL callbackasm1(SB)
402+ CALL callbackasm1(SB)
403+ CALL callbackasm1(SB)
404+ CALL callbackasm1(SB)
405+ CALL callbackasm1(SB)
406+ CALL callbackasm1(SB)
407+ CALL callbackasm1(SB)
408+ CALL callbackasm1(SB)
409+ CALL callbackasm1(SB)
410+ CALL callbackasm1(SB)
411+ CALL callbackasm1(SB)
412+ CALL callbackasm1(SB)
413+ CALL callbackasm1(SB)
414+ CALL callbackasm1(SB)
415+ CALL callbackasm1(SB)
416+ CALL callbackasm1(SB)
417+ CALL callbackasm1(SB)
418+ CALL callbackasm1(SB)
419+ CALL callbackasm1(SB)
420+ CALL callbackasm1(SB)
421+ CALL callbackasm1(SB)
422+ CALL callbackasm1(SB)
423+ CALL callbackasm1(SB)
424+ CALL callbackasm1(SB)
425+ CALL callbackasm1(SB)
426+ CALL callbackasm1(SB)
427+ CALL callbackasm1(SB)
428+ CALL callbackasm1(SB)
429+ CALL callbackasm1(SB)
430+ CALL callbackasm1(SB)
431+ CALL callbackasm1(SB)
432+ CALL callbackasm1(SB)
433+ CALL callbackasm1(SB)
434+ CALL callbackasm1(SB)
435+ CALL callbackasm1(SB)
436+ CALL callbackasm1(SB)
437+ CALL callbackasm1(SB)
438+ CALL callbackasm1(SB)
439+ CALL callbackasm1(SB)
440+ CALL callbackasm1(SB)
441+ CALL callbackasm1(SB)
442+ CALL callbackasm1(SB)
443+ CALL callbackasm1(SB)
444+ CALL callbackasm1(SB)
445+ CALL callbackasm1(SB)
446+ CALL callbackasm1(SB)
447+ CALL callbackasm1(SB)
448+ CALL callbackasm1(SB)
449+ CALL callbackasm1(SB)
450+ CALL callbackasm1(SB)
451+ CALL callbackasm1(SB)
452+ CALL callbackasm1(SB)
453+ CALL callbackasm1(SB)
454+ CALL callbackasm1(SB)
455+ CALL callbackasm1(SB)
456+ CALL callbackasm1(SB)
457+ CALL callbackasm1(SB)
458+ CALL callbackasm1(SB)
459+ CALL callbackasm1(SB)
460+ CALL callbackasm1(SB)
461+ CALL callbackasm1(SB)
462+ CALL callbackasm1(SB)
463+ CALL callbackasm1(SB)
464+ CALL callbackasm1(SB)
465+ CALL callbackasm1(SB)
466+ CALL callbackasm1(SB)
467+ CALL callbackasm1(SB)
468+ CALL callbackasm1(SB)
469+ CALL callbackasm1(SB)
470+ CALL callbackasm1(SB)
471+ CALL callbackasm1(SB)
472+ CALL callbackasm1(SB)
473+ CALL callbackasm1(SB)
474+ CALL callbackasm1(SB)
475+ CALL callbackasm1(SB)
476+ CALL callbackasm1(SB)
477+ CALL callbackasm1(SB)
478+ CALL callbackasm1(SB)
479+ CALL callbackasm1(SB)
480+ CALL callbackasm1(SB)
481+ CALL callbackasm1(SB)
482+ CALL callbackasm1(SB)
483+ CALL callbackasm1(SB)
484+ CALL callbackasm1(SB)
485+ CALL callbackasm1(SB)
486+ CALL callbackasm1(SB)
487+ CALL callbackasm1(SB)
488+ CALL callbackasm1(SB)
489+ CALL callbackasm1(SB)
490+ CALL callbackasm1(SB)
491+ CALL callbackasm1(SB)
492+ CALL callbackasm1(SB)
493+ CALL callbackasm1(SB)
494+ CALL callbackasm1(SB)
495+ CALL callbackasm1(SB)
496+ CALL callbackasm1(SB)
497+ CALL callbackasm1(SB)
498+ CALL callbackasm1(SB)
499+ CALL callbackasm1(SB)
500+ CALL callbackasm1(SB)
501+ CALL callbackasm1(SB)
502+ CALL callbackasm1(SB)
503+ CALL callbackasm1(SB)
504+ CALL callbackasm1(SB)
505+ CALL callbackasm1(SB)
506+ CALL callbackasm1(SB)
507+ CALL callbackasm1(SB)
508+ CALL callbackasm1(SB)
509+ CALL callbackasm1(SB)
510+ CALL callbackasm1(SB)
511+ CALL callbackasm1(SB)
512+ CALL callbackasm1(SB)
513+ CALL callbackasm1(SB)
514+ CALL callbackasm1(SB)
515+ CALL callbackasm1(SB)
516+ CALL callbackasm1(SB)
517+ CALL callbackasm1(SB)
518+ CALL callbackasm1(SB)
519+ CALL callbackasm1(SB)
520+ CALL callbackasm1(SB)
521+ CALL callbackasm1(SB)
522+ CALL callbackasm1(SB)
523+ CALL callbackasm1(SB)
524+ CALL callbackasm1(SB)
525+ CALL callbackasm1(SB)
526+ CALL callbackasm1(SB)
527+ CALL callbackasm1(SB)
528+ CALL callbackasm1(SB)
529+ CALL callbackasm1(SB)
530+ CALL callbackasm1(SB)
531+ CALL callbackasm1(SB)
532+ CALL callbackasm1(SB)
533+ CALL callbackasm1(SB)
534+ CALL callbackasm1(SB)
535+ CALL callbackasm1(SB)
536+ CALL callbackasm1(SB)
537+ CALL callbackasm1(SB)
538+ CALL callbackasm1(SB)
539+ CALL callbackasm1(SB)
540+ CALL callbackasm1(SB)
541+ CALL callbackasm1(SB)
542+ CALL callbackasm1(SB)
543+ CALL callbackasm1(SB)
544+ CALL callbackasm1(SB)
545+ CALL callbackasm1(SB)
546+ CALL callbackasm1(SB)
547+ CALL callbackasm1(SB)
548+ CALL callbackasm1(SB)
549+ CALL callbackasm1(SB)
550+ CALL callbackasm1(SB)
551+ CALL callbackasm1(SB)
552+ CALL callbackasm1(SB)
553+ CALL callbackasm1(SB)
554+ CALL callbackasm1(SB)
555+ CALL callbackasm1(SB)
556+ CALL callbackasm1(SB)
557+ CALL callbackasm1(SB)
558+ CALL callbackasm1(SB)
559+ CALL callbackasm1(SB)
560+ CALL callbackasm1(SB)
561+ CALL callbackasm1(SB)
562+ CALL callbackasm1(SB)
563+ CALL callbackasm1(SB)
564+ CALL callbackasm1(SB)
565+ CALL callbackasm1(SB)
566+ CALL callbackasm1(SB)
567+ CALL callbackasm1(SB)
568+ CALL callbackasm1(SB)
569+ CALL callbackasm1(SB)
570+ CALL callbackasm1(SB)
571+ CALL callbackasm1(SB)
572+ CALL callbackasm1(SB)
573+ CALL callbackasm1(SB)
574+ CALL callbackasm1(SB)
575+ CALL callbackasm1(SB)
576+ CALL callbackasm1(SB)
577+ CALL callbackasm1(SB)
578+ CALL callbackasm1(SB)
579+ CALL callbackasm1(SB)
580+ CALL callbackasm1(SB)
581+ CALL callbackasm1(SB)
582+ CALL callbackasm1(SB)
583+ CALL callbackasm1(SB)
584+ CALL callbackasm1(SB)
585+ CALL callbackasm1(SB)
586+ CALL callbackasm1(SB)
587+ CALL callbackasm1(SB)
588+ CALL callbackasm1(SB)
589+ CALL callbackasm1(SB)
590+ CALL callbackasm1(SB)
591+ CALL callbackasm1(SB)
592+ CALL callbackasm1(SB)
593+ CALL callbackasm1(SB)
594+ CALL callbackasm1(SB)
595+ CALL callbackasm1(SB)
596+ CALL callbackasm1(SB)
597+ CALL callbackasm1(SB)
598+ CALL callbackasm1(SB)
599+ CALL callbackasm1(SB)
600+ CALL callbackasm1(SB)
601+ CALL callbackasm1(SB)
602+ CALL callbackasm1(SB)
603+ CALL callbackasm1(SB)
604+ CALL callbackasm1(SB)
605+ CALL callbackasm1(SB)
606+ CALL callbackasm1(SB)
607+ CALL callbackasm1(SB)
608+ CALL callbackasm1(SB)
609+ CALL callbackasm1(SB)
610+ CALL callbackasm1(SB)
611+ CALL callbackasm1(SB)
612+ CALL callbackasm1(SB)
613+ CALL callbackasm1(SB)
614+ CALL callbackasm1(SB)
615+ CALL callbackasm1(SB)
616+ CALL callbackasm1(SB)
617+ CALL callbackasm1(SB)
618+ CALL callbackasm1(SB)
619+ CALL callbackasm1(SB)
620+ CALL callbackasm1(SB)
621+ CALL callbackasm1(SB)
622+ CALL callbackasm1(SB)
623+ CALL callbackasm1(SB)
624+ CALL callbackasm1(SB)
625+ CALL callbackasm1(SB)
626+ CALL callbackasm1(SB)
627+ CALL callbackasm1(SB)
628+ CALL callbackasm1(SB)
629+ CALL callbackasm1(SB)
630+ CALL callbackasm1(SB)
631+ CALL callbackasm1(SB)
632+ CALL callbackasm1(SB)
633+ CALL callbackasm1(SB)
634+ CALL callbackasm1(SB)
635+ CALL callbackasm1(SB)
636+ CALL callbackasm1(SB)
637+ CALL callbackasm1(SB)
638+ CALL callbackasm1(SB)
639+ CALL callbackasm1(SB)
640+ CALL callbackasm1(SB)
641+ CALL callbackasm1(SB)
642+ CALL callbackasm1(SB)
643+ CALL callbackasm1(SB)
644+ CALL callbackasm1(SB)
645+ CALL callbackasm1(SB)
646+ CALL callbackasm1(SB)
647+ CALL callbackasm1(SB)
648+ CALL callbackasm1(SB)
649+ CALL callbackasm1(SB)
650+ CALL callbackasm1(SB)
651+ CALL callbackasm1(SB)
652+ CALL callbackasm1(SB)
653+ CALL callbackasm1(SB)
654+ CALL callbackasm1(SB)
655+ CALL callbackasm1(SB)
656+ CALL callbackasm1(SB)
657+ CALL callbackasm1(SB)
658+ CALL callbackasm1(SB)
659+ CALL callbackasm1(SB)
660+ CALL callbackasm1(SB)
661+ CALL callbackasm1(SB)
662+ CALL callbackasm1(SB)
663+ CALL callbackasm1(SB)
664+ CALL callbackasm1(SB)
665+ CALL callbackasm1(SB)
666+ CALL callbackasm1(SB)
667+ CALL callbackasm1(SB)
668+ CALL callbackasm1(SB)
669+ CALL callbackasm1(SB)
670+ CALL callbackasm1(SB)
671+ CALL callbackasm1(SB)
672+ CALL callbackasm1(SB)
673+ CALL callbackasm1(SB)
674+ CALL callbackasm1(SB)
675+ CALL callbackasm1(SB)
676+ CALL callbackasm1(SB)
677+ CALL callbackasm1(SB)
678+ CALL callbackasm1(SB)
679+ CALL callbackasm1(SB)
680+ CALL callbackasm1(SB)
681+ CALL callbackasm1(SB)
682+ CALL callbackasm1(SB)
683+ CALL callbackasm1(SB)
684+ CALL callbackasm1(SB)
685+ CALL callbackasm1(SB)
686+ CALL callbackasm1(SB)
687+ CALL callbackasm1(SB)
688+ CALL callbackasm1(SB)
689+ CALL callbackasm1(SB)
690+ CALL callbackasm1(SB)
691+ CALL callbackasm1(SB)
692+ CALL callbackasm1(SB)
693+ CALL callbackasm1(SB)
694+ CALL callbackasm1(SB)
695+ CALL callbackasm1(SB)
696+ CALL callbackasm1(SB)
697+ CALL callbackasm1(SB)
698+ CALL callbackasm1(SB)
699+ CALL callbackasm1(SB)
700+ CALL callbackasm1(SB)
701+ CALL callbackasm1(SB)
702+ CALL callbackasm1(SB)
703+ CALL callbackasm1(SB)
704+ CALL callbackasm1(SB)
705+ CALL callbackasm1(SB)
706+ CALL callbackasm1(SB)
707+ CALL callbackasm1(SB)
708+ CALL callbackasm1(SB)
709+ CALL callbackasm1(SB)
710+ CALL callbackasm1(SB)
711+ CALL callbackasm1(SB)
712+ CALL callbackasm1(SB)
713+ CALL callbackasm1(SB)
714+ CALL callbackasm1(SB)
715+ CALL callbackasm1(SB)
716+ CALL callbackasm1(SB)
717+ CALL callbackasm1(SB)
718+ CALL callbackasm1(SB)
719+ CALL callbackasm1(SB)
720+ CALL callbackasm1(SB)
721+ CALL callbackasm1(SB)
722+ CALL callbackasm1(SB)
723+ CALL callbackasm1(SB)
724+ CALL callbackasm1(SB)
725+ CALL callbackasm1(SB)
726+ CALL callbackasm1(SB)
727+ CALL callbackasm1(SB)
728+ CALL callbackasm1(SB)
729+ CALL callbackasm1(SB)
730+ CALL callbackasm1(SB)
731+ CALL callbackasm1(SB)
732+ CALL callbackasm1(SB)
733+ CALL callbackasm1(SB)
734+ CALL callbackasm1(SB)
735+ CALL callbackasm1(SB)
736+ CALL callbackasm1(SB)
737+ CALL callbackasm1(SB)
738+ CALL callbackasm1(SB)
739+ CALL callbackasm1(SB)
740+ CALL callbackasm1(SB)
741+ CALL callbackasm1(SB)
742+ CALL callbackasm1(SB)
743+ CALL callbackasm1(SB)
744+ CALL callbackasm1(SB)
745+ CALL callbackasm1(SB)
746+ CALL callbackasm1(SB)
747+ CALL callbackasm1(SB)
748+ CALL callbackasm1(SB)
749+ CALL callbackasm1(SB)
750+ CALL callbackasm1(SB)
751+ CALL callbackasm1(SB)
752+ CALL callbackasm1(SB)
753+ CALL callbackasm1(SB)
754+ CALL callbackasm1(SB)
755+ CALL callbackasm1(SB)
756+ CALL callbackasm1(SB)
757+ CALL callbackasm1(SB)
758+ CALL callbackasm1(SB)
759+ CALL callbackasm1(SB)
760+ CALL callbackasm1(SB)
761+ CALL callbackasm1(SB)
762+ CALL callbackasm1(SB)
763+ CALL callbackasm1(SB)
764+ CALL callbackasm1(SB)
765+ CALL callbackasm1(SB)
766+ CALL callbackasm1(SB)
767+ CALL callbackasm1(SB)
768+ CALL callbackasm1(SB)
769+ CALL callbackasm1(SB)
770+ CALL callbackasm1(SB)
771+ CALL callbackasm1(SB)
772+ CALL callbackasm1(SB)
773+ CALL callbackasm1(SB)
774+ CALL callbackasm1(SB)
775+ CALL callbackasm1(SB)
776+ CALL callbackasm1(SB)
777+ CALL callbackasm1(SB)
778+ CALL callbackasm1(SB)
779+ CALL callbackasm1(SB)
780+ CALL callbackasm1(SB)
781+ CALL callbackasm1(SB)
782+ CALL callbackasm1(SB)
783+ CALL callbackasm1(SB)
784+ CALL callbackasm1(SB)
785+ CALL callbackasm1(SB)
786+ CALL callbackasm1(SB)
787+ CALL callbackasm1(SB)
788+ CALL callbackasm1(SB)
789+ CALL callbackasm1(SB)
790+ CALL callbackasm1(SB)
791+ CALL callbackasm1(SB)
792+ CALL callbackasm1(SB)
793+ CALL callbackasm1(SB)
794+ CALL callbackasm1(SB)
795+ CALL callbackasm1(SB)
796+ CALL callbackasm1(SB)
797+ CALL callbackasm1(SB)
798+ CALL callbackasm1(SB)
799+ CALL callbackasm1(SB)
800+ CALL callbackasm1(SB)
801+ CALL callbackasm1(SB)
802+ CALL callbackasm1(SB)
803+ CALL callbackasm1(SB)
804+ CALL callbackasm1(SB)
805+ CALL callbackasm1(SB)
806+ CALL callbackasm1(SB)
807+ CALL callbackasm1(SB)
808+ CALL callbackasm1(SB)
809+ CALL callbackasm1(SB)
810+ CALL callbackasm1(SB)
811+ CALL callbackasm1(SB)
812+ CALL callbackasm1(SB)
813+ CALL callbackasm1(SB)
814+ CALL callbackasm1(SB)
815+ CALL callbackasm1(SB)
816+ CALL callbackasm1(SB)
817+ CALL callbackasm1(SB)
818+ CALL callbackasm1(SB)
819+ CALL callbackasm1(SB)
820+ CALL callbackasm1(SB)
821+ CALL callbackasm1(SB)
822+ CALL callbackasm1(SB)
823+ CALL callbackasm1(SB)
824+ CALL callbackasm1(SB)
825+ CALL callbackasm1(SB)
826+ CALL callbackasm1(SB)
827+ CALL callbackasm1(SB)
828+ CALL callbackasm1(SB)
829+ CALL callbackasm1(SB)
830+ CALL callbackasm1(SB)
831+ CALL callbackasm1(SB)
832+ CALL callbackasm1(SB)
833+ CALL callbackasm1(SB)
834+ CALL callbackasm1(SB)
835+ CALL callbackasm1(SB)
836+ CALL callbackasm1(SB)
837+ CALL callbackasm1(SB)
838+ CALL callbackasm1(SB)
839+ CALL callbackasm1(SB)
840+ CALL callbackasm1(SB)
841+ CALL callbackasm1(SB)
842+ CALL callbackasm1(SB)
843+ CALL callbackasm1(SB)
844+ CALL callbackasm1(SB)
845+ CALL callbackasm1(SB)
846+ CALL callbackasm1(SB)
847+ CALL callbackasm1(SB)
848+ CALL callbackasm1(SB)
849+ CALL callbackasm1(SB)
850+ CALL callbackasm1(SB)
851+ CALL callbackasm1(SB)
852+ CALL callbackasm1(SB)
853+ CALL callbackasm1(SB)
854+ CALL callbackasm1(SB)
855+ CALL callbackasm1(SB)
856+ CALL callbackasm1(SB)
857+ CALL callbackasm1(SB)
858+ CALL callbackasm1(SB)
859+ CALL callbackasm1(SB)
860+ CALL callbackasm1(SB)
861+ CALL callbackasm1(SB)
862+ CALL callbackasm1(SB)
863+ CALL callbackasm1(SB)
864+ CALL callbackasm1(SB)
865+ CALL callbackasm1(SB)
866+ CALL callbackasm1(SB)
867+ CALL callbackasm1(SB)
868+ CALL callbackasm1(SB)
869+ CALL callbackasm1(SB)
870+ CALL callbackasm1(SB)
871+ CALL callbackasm1(SB)
872+ CALL callbackasm1(SB)
873+ CALL callbackasm1(SB)
874+ CALL callbackasm1(SB)
875+ CALL callbackasm1(SB)
876+ CALL callbackasm1(SB)
877+ CALL callbackasm1(SB)
878+ CALL callbackasm1(SB)
879+ CALL callbackasm1(SB)
880+ CALL callbackasm1(SB)
881+ CALL callbackasm1(SB)
882+ CALL callbackasm1(SB)
883+ CALL callbackasm1(SB)
884+ CALL callbackasm1(SB)
885+ CALL callbackasm1(SB)
886+ CALL callbackasm1(SB)
887+ CALL callbackasm1(SB)
888+ CALL callbackasm1(SB)
889+ CALL callbackasm1(SB)
890+ CALL callbackasm1(SB)
891+ CALL callbackasm1(SB)
892+ CALL callbackasm1(SB)
893+ CALL callbackasm1(SB)
894+ CALL callbackasm1(SB)
895+ CALL callbackasm1(SB)
896+ CALL callbackasm1(SB)
897+ CALL callbackasm1(SB)
898+ CALL callbackasm1(SB)
899+ CALL callbackasm1(SB)
900+ CALL callbackasm1(SB)
901+ CALL callbackasm1(SB)
902+ CALL callbackasm1(SB)
903+ CALL callbackasm1(SB)
904+ CALL callbackasm1(SB)
905+ CALL callbackasm1(SB)
906+ CALL callbackasm1(SB)
907+ CALL callbackasm1(SB)
908+ CALL callbackasm1(SB)
909+ CALL callbackasm1(SB)
910+ CALL callbackasm1(SB)
911+ CALL callbackasm1(SB)
912+ CALL callbackasm1(SB)
913+ CALL callbackasm1(SB)
914+ CALL callbackasm1(SB)
915+ CALL callbackasm1(SB)
916+ CALL callbackasm1(SB)
917+ CALL callbackasm1(SB)
918+ CALL callbackasm1(SB)
919+ CALL callbackasm1(SB)
920+ CALL callbackasm1(SB)
921+ CALL callbackasm1(SB)
922+ CALL callbackasm1(SB)
923+ CALL callbackasm1(SB)
924+ CALL callbackasm1(SB)
925+ CALL callbackasm1(SB)
926+ CALL callbackasm1(SB)
927+ CALL callbackasm1(SB)
928+ CALL callbackasm1(SB)
929+ CALL callbackasm1(SB)
930+ CALL callbackasm1(SB)
931+ CALL callbackasm1(SB)
932+ CALL callbackasm1(SB)
933+ CALL callbackasm1(SB)
934+ CALL callbackasm1(SB)
935+ CALL callbackasm1(SB)
936+ CALL callbackasm1(SB)
937+ CALL callbackasm1(SB)
938+ CALL callbackasm1(SB)
939+ CALL callbackasm1(SB)
940+ CALL callbackasm1(SB)
941+ CALL callbackasm1(SB)
942+ CALL callbackasm1(SB)
943+ CALL callbackasm1(SB)
944+ CALL callbackasm1(SB)
945+ CALL callbackasm1(SB)
946+ CALL callbackasm1(SB)
947+ CALL callbackasm1(SB)
948+ CALL callbackasm1(SB)
949+ CALL callbackasm1(SB)
950+ CALL callbackasm1(SB)
951+ CALL callbackasm1(SB)
952+ CALL callbackasm1(SB)
953+ CALL callbackasm1(SB)
954+ CALL callbackasm1(SB)
955+ CALL callbackasm1(SB)
956+ CALL callbackasm1(SB)
957+ CALL callbackasm1(SB)
958+ CALL callbackasm1(SB)
959+ CALL callbackasm1(SB)
960+ CALL callbackasm1(SB)
961+ CALL callbackasm1(SB)
962+ CALL callbackasm1(SB)
963+ CALL callbackasm1(SB)
964+ CALL callbackasm1(SB)
965+ CALL callbackasm1(SB)
966+ CALL callbackasm1(SB)
967+ CALL callbackasm1(SB)
968+ CALL callbackasm1(SB)
969+ CALL callbackasm1(SB)
970+ CALL callbackasm1(SB)
971+ CALL callbackasm1(SB)
972+ CALL callbackasm1(SB)
973+ CALL callbackasm1(SB)
974+ CALL callbackasm1(SB)
975+ CALL callbackasm1(SB)
976+ CALL callbackasm1(SB)
977+ CALL callbackasm1(SB)
978+ CALL callbackasm1(SB)
979+ CALL callbackasm1(SB)
980+ CALL callbackasm1(SB)
981+ CALL callbackasm1(SB)
982+ CALL callbackasm1(SB)
983+ CALL callbackasm1(SB)
984+ CALL callbackasm1(SB)
985+ CALL callbackasm1(SB)
986+ CALL callbackasm1(SB)
987+ CALL callbackasm1(SB)
988+ CALL callbackasm1(SB)
989+ CALL callbackasm1(SB)
990+ CALL callbackasm1(SB)
991+ CALL callbackasm1(SB)
992+ CALL callbackasm1(SB)
993+ CALL callbackasm1(SB)
994+ CALL callbackasm1(SB)
995+ CALL callbackasm1(SB)
996+ CALL callbackasm1(SB)
997+ CALL callbackasm1(SB)
998+ CALL callbackasm1(SB)
999+ CALL callbackasm1(SB)
1000+ CALL callbackasm1(SB)
1001+ CALL callbackasm1(SB)
1002+ CALL callbackasm1(SB)
1003+ CALL callbackasm1(SB)
1004+ CALL callbackasm1(SB)
1005+ CALL callbackasm1(SB)
1006+ CALL callbackasm1(SB)
1007+ CALL callbackasm1(SB)
1008+ CALL callbackasm1(SB)
1009+ CALL callbackasm1(SB)
1010+ CALL callbackasm1(SB)
1011+ CALL callbackasm1(SB)
1012+ CALL callbackasm1(SB)
1013+ CALL callbackasm1(SB)
1014+ CALL callbackasm1(SB)
1015+ CALL callbackasm1(SB)
1016+ CALL callbackasm1(SB)
1017+ CALL callbackasm1(SB)
1018+ CALL callbackasm1(SB)
1019+ CALL callbackasm1(SB)
1020+ CALL callbackasm1(SB)
1021+ CALL callbackasm1(SB)
1022+ CALL callbackasm1(SB)
1023+ CALL callbackasm1(SB)
1024+ CALL callbackasm1(SB)
1025+ CALL callbackasm1(SB)
1026+ CALL callbackasm1(SB)
1027+ CALL callbackasm1(SB)
1028+ CALL callbackasm1(SB)
1029+ CALL callbackasm1(SB)
1030+ CALL callbackasm1(SB)
1031+ CALL callbackasm1(SB)
1032+ CALL callbackasm1(SB)
1033+ CALL callbackasm1(SB)
1034+ CALL callbackasm1(SB)
1035+ CALL callbackasm1(SB)
1036+ CALL callbackasm1(SB)
1037+ CALL callbackasm1(SB)
1038+ CALL callbackasm1(SB)
1039+ CALL callbackasm1(SB)
1040+ CALL callbackasm1(SB)
1041+ CALL callbackasm1(SB)
1042+ CALL callbackasm1(SB)
1043+ CALL callbackasm1(SB)
1044+ CALL callbackasm1(SB)
1045+ CALL callbackasm1(SB)
1046+ CALL callbackasm1(SB)
1047+ CALL callbackasm1(SB)
1048+ CALL callbackasm1(SB)
1049+ CALL callbackasm1(SB)
1050+ CALL callbackasm1(SB)
1051+ CALL callbackasm1(SB)
1052+ CALL callbackasm1(SB)
1053+ CALL callbackasm1(SB)
1054+ CALL callbackasm1(SB)
1055+ CALL callbackasm1(SB)
1056+ CALL callbackasm1(SB)
1057+ CALL callbackasm1(SB)
1058+ CALL callbackasm1(SB)
1059+ CALL callbackasm1(SB)
1060+ CALL callbackasm1(SB)
1061+ CALL callbackasm1(SB)
1062+ CALL callbackasm1(SB)
1063+ CALL callbackasm1(SB)
1064+ CALL callbackasm1(SB)
1065+ CALL callbackasm1(SB)
1066+ CALL callbackasm1(SB)
1067+ CALL callbackasm1(SB)
1068+ CALL callbackasm1(SB)
1069+ CALL callbackasm1(SB)
1070+ CALL callbackasm1(SB)
1071+ CALL callbackasm1(SB)
1072+ CALL callbackasm1(SB)
1073+ CALL callbackasm1(SB)
1074+ CALL callbackasm1(SB)
1075+ CALL callbackasm1(SB)
1076+ CALL callbackasm1(SB)
1077+ CALL callbackasm1(SB)
1078+ CALL callbackasm1(SB)
1079+ CALL callbackasm1(SB)
1080+ CALL callbackasm1(SB)
1081+ CALL callbackasm1(SB)
1082+ CALL callbackasm1(SB)
1083+ CALL callbackasm1(SB)
1084+ CALL callbackasm1(SB)
1085+ CALL callbackasm1(SB)
1086+ CALL callbackasm1(SB)
1087+ CALL callbackasm1(SB)
1088+ CALL callbackasm1(SB)
1089+ CALL callbackasm1(SB)
1090+ CALL callbackasm1(SB)
1091+ CALL callbackasm1(SB)
1092+ CALL callbackasm1(SB)
1093+ CALL callbackasm1(SB)
1094+ CALL callbackasm1(SB)
1095+ CALL callbackasm1(SB)
1096+ CALL callbackasm1(SB)
1097+ CALL callbackasm1(SB)
1098+ CALL callbackasm1(SB)
1099+ CALL callbackasm1(SB)
1100+ CALL callbackasm1(SB)
1101+ CALL callbackasm1(SB)
1102+ CALL callbackasm1(SB)
1103+ CALL callbackasm1(SB)
1104+ CALL callbackasm1(SB)
1105+ CALL callbackasm1(SB)
1106+ CALL callbackasm1(SB)
1107+ CALL callbackasm1(SB)
1108+ CALL callbackasm1(SB)
1109+ CALL callbackasm1(SB)
1110+ CALL callbackasm1(SB)
1111+ CALL callbackasm1(SB)
1112+ CALL callbackasm1(SB)
1113+ CALL callbackasm1(SB)
1114+ CALL callbackasm1(SB)
1115+ CALL callbackasm1(SB)
1116+ CALL callbackasm1(SB)
1117+ CALL callbackasm1(SB)
1118+ CALL callbackasm1(SB)
1119+ CALL callbackasm1(SB)
1120+ CALL callbackasm1(SB)
1121+ CALL callbackasm1(SB)
1122+ CALL callbackasm1(SB)
1123+ CALL callbackasm1(SB)
1124+ CALL callbackasm1(SB)
1125+ CALL callbackasm1(SB)
1126+ CALL callbackasm1(SB)
1127+ CALL callbackasm1(SB)
1128+ CALL callbackasm1(SB)
1129+ CALL callbackasm1(SB)
1130+ CALL callbackasm1(SB)
1131+ CALL callbackasm1(SB)
1132+ CALL callbackasm1(SB)
1133+ CALL callbackasm1(SB)
1134+ CALL callbackasm1(SB)
1135+ CALL callbackasm1(SB)
1136+ CALL callbackasm1(SB)
1137+ CALL callbackasm1(SB)
1138+ CALL callbackasm1(SB)
1139+ CALL callbackasm1(SB)
1140+ CALL callbackasm1(SB)
1141+ CALL callbackasm1(SB)
1142+ CALL callbackasm1(SB)
1143+ CALL callbackasm1(SB)
1144+ CALL callbackasm1(SB)
1145+ CALL callbackasm1(SB)
1146+ CALL callbackasm1(SB)
1147+ CALL callbackasm1(SB)
1148+ CALL callbackasm1(SB)
1149+ CALL callbackasm1(SB)
1150+ CALL callbackasm1(SB)
1151+ CALL callbackasm1(SB)
1152+ CALL callbackasm1(SB)
1153+ CALL callbackasm1(SB)
1154+ CALL callbackasm1(SB)
1155+ CALL callbackasm1(SB)
1156+ CALL callbackasm1(SB)
1157+ CALL callbackasm1(SB)
1158+ CALL callbackasm1(SB)
1159+ CALL callbackasm1(SB)
1160+ CALL callbackasm1(SB)
1161+ CALL callbackasm1(SB)
1162+ CALL callbackasm1(SB)
1163+ CALL callbackasm1(SB)
1164+ CALL callbackasm1(SB)
1165+ CALL callbackasm1(SB)
1166+ CALL callbackasm1(SB)
1167+ CALL callbackasm1(SB)
1168+ CALL callbackasm1(SB)
1169+ CALL callbackasm1(SB)
1170+ CALL callbackasm1(SB)
1171+ CALL callbackasm1(SB)
1172+ CALL callbackasm1(SB)
1173+ CALL callbackasm1(SB)
1174+ CALL callbackasm1(SB)
1175+ CALL callbackasm1(SB)
1176+ CALL callbackasm1(SB)
1177+ CALL callbackasm1(SB)
1178+ CALL callbackasm1(SB)
1179+ CALL callbackasm1(SB)
1180+ CALL callbackasm1(SB)
1181+ CALL callbackasm1(SB)
1182+ CALL callbackasm1(SB)
1183+ CALL callbackasm1(SB)
1184+ CALL callbackasm1(SB)
1185+ CALL callbackasm1(SB)
1186+ CALL callbackasm1(SB)
1187+ CALL callbackasm1(SB)
1188+ CALL callbackasm1(SB)
1189+ CALL callbackasm1(SB)
1190+ CALL callbackasm1(SB)
1191+ CALL callbackasm1(SB)
1192+ CALL callbackasm1(SB)
1193+ CALL callbackasm1(SB)
1194+ CALL callbackasm1(SB)
1195+ CALL callbackasm1(SB)
1196+ CALL callbackasm1(SB)
1197+ CALL callbackasm1(SB)
1198+ CALL callbackasm1(SB)
1199+ CALL callbackasm1(SB)
1200+ CALL callbackasm1(SB)
1201+ CALL callbackasm1(SB)
1202+ CALL callbackasm1(SB)
1203+ CALL callbackasm1(SB)
1204+ CALL callbackasm1(SB)
1205+ CALL callbackasm1(SB)
1206+ CALL callbackasm1(SB)
1207+ CALL callbackasm1(SB)
1208+ CALL callbackasm1(SB)
1209+ CALL callbackasm1(SB)
1210+ CALL callbackasm1(SB)
1211+ CALL callbackasm1(SB)
1212+ CALL callbackasm1(SB)
1213+ CALL callbackasm1(SB)
1214+ CALL callbackasm1(SB)
1215+ CALL callbackasm1(SB)
1216+ CALL callbackasm1(SB)
1217+ CALL callbackasm1(SB)
1218+ CALL callbackasm1(SB)
1219+ CALL callbackasm1(SB)
1220+ CALL callbackasm1(SB)
1221+ CALL callbackasm1(SB)
1222+ CALL callbackasm1(SB)
1223+ CALL callbackasm1(SB)
1224+ CALL callbackasm1(SB)
1225+ CALL callbackasm1(SB)
1226+ CALL callbackasm1(SB)
1227+ CALL callbackasm1(SB)
1228+ CALL callbackasm1(SB)
1229+ CALL callbackasm1(SB)
1230+ CALL callbackasm1(SB)
1231+ CALL callbackasm1(SB)
1232+ CALL callbackasm1(SB)
1233+ CALL callbackasm1(SB)
1234+ CALL callbackasm1(SB)
1235+ CALL callbackasm1(SB)
1236+ CALL callbackasm1(SB)
1237+ CALL callbackasm1(SB)
1238+ CALL callbackasm1(SB)
1239+ CALL callbackasm1(SB)
1240+ CALL callbackasm1(SB)
1241+ CALL callbackasm1(SB)
1242+ CALL callbackasm1(SB)
1243+ CALL callbackasm1(SB)
1244+ CALL callbackasm1(SB)
1245+ CALL callbackasm1(SB)
1246+ CALL callbackasm1(SB)
1247+ CALL callbackasm1(SB)
1248+ CALL callbackasm1(SB)
1249+ CALL callbackasm1(SB)
1250+ CALL callbackasm1(SB)
1251+ CALL callbackasm1(SB)
1252+ CALL callbackasm1(SB)
1253+ CALL callbackasm1(SB)
1254+ CALL callbackasm1(SB)
1255+ CALL callbackasm1(SB)
1256+ CALL callbackasm1(SB)
1257+ CALL callbackasm1(SB)
1258+ CALL callbackasm1(SB)
1259+ CALL callbackasm1(SB)
1260+ CALL callbackasm1(SB)
1261+ CALL callbackasm1(SB)
1262+ CALL callbackasm1(SB)
1263+ CALL callbackasm1(SB)
1264+ CALL callbackasm1(SB)
1265+ CALL callbackasm1(SB)
1266+ CALL callbackasm1(SB)
1267+ CALL callbackasm1(SB)
1268+ CALL callbackasm1(SB)
1269+ CALL callbackasm1(SB)
1270+ CALL callbackasm1(SB)
1271+ CALL callbackasm1(SB)
1272+ CALL callbackasm1(SB)
1273+ CALL callbackasm1(SB)
1274+ CALL callbackasm1(SB)
1275+ CALL callbackasm1(SB)
1276+ CALL callbackasm1(SB)
1277+ CALL callbackasm1(SB)
1278+ CALL callbackasm1(SB)
1279+ CALL callbackasm1(SB)
1280+ CALL callbackasm1(SB)
1281+ CALL callbackasm1(SB)
1282+ CALL callbackasm1(SB)
1283+ CALL callbackasm1(SB)
1284+ CALL callbackasm1(SB)
1285+ CALL callbackasm1(SB)
1286+ CALL callbackasm1(SB)
1287+ CALL callbackasm1(SB)
1288+ CALL callbackasm1(SB)
1289+ CALL callbackasm1(SB)
1290+ CALL callbackasm1(SB)
1291+ CALL callbackasm1(SB)
1292+ CALL callbackasm1(SB)
1293+ CALL callbackasm1(SB)
1294+ CALL callbackasm1(SB)
1295+ CALL callbackasm1(SB)
1296+ CALL callbackasm1(SB)
1297+ CALL callbackasm1(SB)
1298+ CALL callbackasm1(SB)
1299+ CALL callbackasm1(SB)
1300+ CALL callbackasm1(SB)
1301+ CALL callbackasm1(SB)
1302+ CALL callbackasm1(SB)
1303+ CALL callbackasm1(SB)
1304+ CALL callbackasm1(SB)
1305+ CALL callbackasm1(SB)
1306+ CALL callbackasm1(SB)
1307+ CALL callbackasm1(SB)
1308+ CALL callbackasm1(SB)
1309+ CALL callbackasm1(SB)
1310+ CALL callbackasm1(SB)
1311+ CALL callbackasm1(SB)
1312+ CALL callbackasm1(SB)
1313+ CALL callbackasm1(SB)
1314+ CALL callbackasm1(SB)
1315+ CALL callbackasm1(SB)
1316+ CALL callbackasm1(SB)
1317+ CALL callbackasm1(SB)
1318+ CALL callbackasm1(SB)
1319+ CALL callbackasm1(SB)
1320+ CALL callbackasm1(SB)
1321+ CALL callbackasm1(SB)
1322+ CALL callbackasm1(SB)
1323+ CALL callbackasm1(SB)
1324+ CALL callbackasm1(SB)
1325+ CALL callbackasm1(SB)
1326+ CALL callbackasm1(SB)
1327+ CALL callbackasm1(SB)
1328+ CALL callbackasm1(SB)
1329+ CALL callbackasm1(SB)
1330+ CALL callbackasm1(SB)
1331+ CALL callbackasm1(SB)
1332+ CALL callbackasm1(SB)
1333+ CALL callbackasm1(SB)
1334+ CALL callbackasm1(SB)
1335+ CALL callbackasm1(SB)
1336+ CALL callbackasm1(SB)
1337+ CALL callbackasm1(SB)
1338+ CALL callbackasm1(SB)
1339+ CALL callbackasm1(SB)
1340+ CALL callbackasm1(SB)
1341+ CALL callbackasm1(SB)
1342+ CALL callbackasm1(SB)
1343+ CALL callbackasm1(SB)
1344+ CALL callbackasm1(SB)
1345+ CALL callbackasm1(SB)
1346+ CALL callbackasm1(SB)
1347+ CALL callbackasm1(SB)
1348+ CALL callbackasm1(SB)
1349+ CALL callbackasm1(SB)
1350+ CALL callbackasm1(SB)
1351+ CALL callbackasm1(SB)
1352+ CALL callbackasm1(SB)
1353+ CALL callbackasm1(SB)
1354+ CALL callbackasm1(SB)
1355+ CALL callbackasm1(SB)
1356+ CALL callbackasm1(SB)
1357+ CALL callbackasm1(SB)
1358+ CALL callbackasm1(SB)
1359+ CALL callbackasm1(SB)
1360+ CALL callbackasm1(SB)
1361+ CALL callbackasm1(SB)
1362+ CALL callbackasm1(SB)
1363+ CALL callbackasm1(SB)
1364+ CALL callbackasm1(SB)
1365+ CALL callbackasm1(SB)
1366+ CALL callbackasm1(SB)
1367+ CALL callbackasm1(SB)
1368+ CALL callbackasm1(SB)
1369+ CALL callbackasm1(SB)
1370+ CALL callbackasm1(SB)
1371+ CALL callbackasm1(SB)
1372+ CALL callbackasm1(SB)
1373+ CALL callbackasm1(SB)
1374+ CALL callbackasm1(SB)
1375+ CALL callbackasm1(SB)
1376+ CALL callbackasm1(SB)
1377+ CALL callbackasm1(SB)
1378+ CALL callbackasm1(SB)
1379+ CALL callbackasm1(SB)
1380+ CALL callbackasm1(SB)
1381+ CALL callbackasm1(SB)
1382+ CALL callbackasm1(SB)
1383+ CALL callbackasm1(SB)
1384+ CALL callbackasm1(SB)
1385+ CALL callbackasm1(SB)
1386+ CALL callbackasm1(SB)
1387+ CALL callbackasm1(SB)
1388+ CALL callbackasm1(SB)
1389+ CALL callbackasm1(SB)
1390+ CALL callbackasm1(SB)
1391+ CALL callbackasm1(SB)
1392+ CALL callbackasm1(SB)
1393+ CALL callbackasm1(SB)
1394+ CALL callbackasm1(SB)
1395+ CALL callbackasm1(SB)
1396+ CALL callbackasm1(SB)
1397+ CALL callbackasm1(SB)
1398+ CALL callbackasm1(SB)
1399+ CALL callbackasm1(SB)
1400+ CALL callbackasm1(SB)
1401+ CALL callbackasm1(SB)
1402+ CALL callbackasm1(SB)
1403+ CALL callbackasm1(SB)
1404+ CALL callbackasm1(SB)
1405+ CALL callbackasm1(SB)
1406+ CALL callbackasm1(SB)
1407+ CALL callbackasm1(SB)
1408+ CALL callbackasm1(SB)
1409+ CALL callbackasm1(SB)
1410+ CALL callbackasm1(SB)
1411+ CALL callbackasm1(SB)
1412+ CALL callbackasm1(SB)
1413+ CALL callbackasm1(SB)
1414+ CALL callbackasm1(SB)
1415+ CALL callbackasm1(SB)
1416+ CALL callbackasm1(SB)
1417+ CALL callbackasm1(SB)
1418+ CALL callbackasm1(SB)
1419+ CALL callbackasm1(SB)
1420+ CALL callbackasm1(SB)
1421+ CALL callbackasm1(SB)
1422+ CALL callbackasm1(SB)
1423+ CALL callbackasm1(SB)
1424+ CALL callbackasm1(SB)
1425+ CALL callbackasm1(SB)
1426+ CALL callbackasm1(SB)
1427+ CALL callbackasm1(SB)
1428+ CALL callbackasm1(SB)
1429+ CALL callbackasm1(SB)
1430+ CALL callbackasm1(SB)
1431+ CALL callbackasm1(SB)
1432+ CALL callbackasm1(SB)
1433+ CALL callbackasm1(SB)
1434+ CALL callbackasm1(SB)
1435+ CALL callbackasm1(SB)
1436+ CALL callbackasm1(SB)
1437+ CALL callbackasm1(SB)
1438+ CALL callbackasm1(SB)
1439+ CALL callbackasm1(SB)
1440+ CALL callbackasm1(SB)
1441+ CALL callbackasm1(SB)
1442+ CALL callbackasm1(SB)
1443+ CALL callbackasm1(SB)
1444+ CALL callbackasm1(SB)
1445+ CALL callbackasm1(SB)
1446+ CALL callbackasm1(SB)
1447+ CALL callbackasm1(SB)
1448+ CALL callbackasm1(SB)
1449+ CALL callbackasm1(SB)
1450+ CALL callbackasm1(SB)
1451+ CALL callbackasm1(SB)
1452+ CALL callbackasm1(SB)
1453+ CALL callbackasm1(SB)
1454+ CALL callbackasm1(SB)
1455+ CALL callbackasm1(SB)
1456+ CALL callbackasm1(SB)
1457+ CALL callbackasm1(SB)
1458+ CALL callbackasm1(SB)
1459+ CALL callbackasm1(SB)
1460+ CALL callbackasm1(SB)
1461+ CALL callbackasm1(SB)
1462+ CALL callbackasm1(SB)
1463+ CALL callbackasm1(SB)
1464+ CALL callbackasm1(SB)
1465+ CALL callbackasm1(SB)
1466+ CALL callbackasm1(SB)
1467+ CALL callbackasm1(SB)
1468+ CALL callbackasm1(SB)
1469+ CALL callbackasm1(SB)
1470+ CALL callbackasm1(SB)
1471+ CALL callbackasm1(SB)
1472+ CALL callbackasm1(SB)
1473+ CALL callbackasm1(SB)
1474+ CALL callbackasm1(SB)
1475+ CALL callbackasm1(SB)
1476+ CALL callbackasm1(SB)
1477+ CALL callbackasm1(SB)
1478+ CALL callbackasm1(SB)
1479+ CALL callbackasm1(SB)
1480+ CALL callbackasm1(SB)
1481+ CALL callbackasm1(SB)
1482+ CALL callbackasm1(SB)
1483+ CALL callbackasm1(SB)
1484+ CALL callbackasm1(SB)
1485+ CALL callbackasm1(SB)
1486+ CALL callbackasm1(SB)
1487+ CALL callbackasm1(SB)
1488+ CALL callbackasm1(SB)
1489+ CALL callbackasm1(SB)
1490+ CALL callbackasm1(SB)
1491+ CALL callbackasm1(SB)
1492+ CALL callbackasm1(SB)
1493+ CALL callbackasm1(SB)
1494+ CALL callbackasm1(SB)
1495+ CALL callbackasm1(SB)
1496+ CALL callbackasm1(SB)
1497+ CALL callbackasm1(SB)
1498+ CALL callbackasm1(SB)
1499+ CALL callbackasm1(SB)
1500+ CALL callbackasm1(SB)
1501+ CALL callbackasm1(SB)
1502+ CALL callbackasm1(SB)
1503+ CALL callbackasm1(SB)
1504+ CALL callbackasm1(SB)
1505+ CALL callbackasm1(SB)
1506+ CALL callbackasm1(SB)
1507+ CALL callbackasm1(SB)
1508+ CALL callbackasm1(SB)
1509+ CALL callbackasm1(SB)
1510+ CALL callbackasm1(SB)
1511+ CALL callbackasm1(SB)
1512+ CALL callbackasm1(SB)
1513+ CALL callbackasm1(SB)
1514+ CALL callbackasm1(SB)
1515+ CALL callbackasm1(SB)
1516+ CALL callbackasm1(SB)
1517+ CALL callbackasm1(SB)
1518+ CALL callbackasm1(SB)
1519+ CALL callbackasm1(SB)
1520+ CALL callbackasm1(SB)
1521+ CALL callbackasm1(SB)
1522+ CALL callbackasm1(SB)
1523+ CALL callbackasm1(SB)
1524+ CALL callbackasm1(SB)
1525+ CALL callbackasm1(SB)
1526+ CALL callbackasm1(SB)
1527+ CALL callbackasm1(SB)
1528+ CALL callbackasm1(SB)
1529+ CALL callbackasm1(SB)
1530+ CALL callbackasm1(SB)
1531+ CALL callbackasm1(SB)
1532+ CALL callbackasm1(SB)
1533+ CALL callbackasm1(SB)
1534+ CALL callbackasm1(SB)
1535+ CALL callbackasm1(SB)
1536+ CALL callbackasm1(SB)
1537+ CALL callbackasm1(SB)
1538+ CALL callbackasm1(SB)
1539+ CALL callbackasm1(SB)
1540+ CALL callbackasm1(SB)
1541+ CALL callbackasm1(SB)
1542+ CALL callbackasm1(SB)
1543+ CALL callbackasm1(SB)
1544+ CALL callbackasm1(SB)
1545+ CALL callbackasm1(SB)
1546+ CALL callbackasm1(SB)
1547+ CALL callbackasm1(SB)
1548+ CALL callbackasm1(SB)
1549+ CALL callbackasm1(SB)
1550+ CALL callbackasm1(SB)
1551+ CALL callbackasm1(SB)
1552+ CALL callbackasm1(SB)
1553+ CALL callbackasm1(SB)
1554+ CALL callbackasm1(SB)
1555+ CALL callbackasm1(SB)
1556+ CALL callbackasm1(SB)
1557+ CALL callbackasm1(SB)
1558+ CALL callbackasm1(SB)
1559+ CALL callbackasm1(SB)
1560+ CALL callbackasm1(SB)
1561+ CALL callbackasm1(SB)
1562+ CALL callbackasm1(SB)
1563+ CALL callbackasm1(SB)
1564+ CALL callbackasm1(SB)
1565+ CALL callbackasm1(SB)
1566+ CALL callbackasm1(SB)
1567+ CALL callbackasm1(SB)
1568+ CALL callbackasm1(SB)
1569+ CALL callbackasm1(SB)
1570+ CALL callbackasm1(SB)
1571+ CALL callbackasm1(SB)
1572+ CALL callbackasm1(SB)
1573+ CALL callbackasm1(SB)
1574+ CALL callbackasm1(SB)
1575+ CALL callbackasm1(SB)
1576+ CALL callbackasm1(SB)
1577+ CALL callbackasm1(SB)
1578+ CALL callbackasm1(SB)
1579+ CALL callbackasm1(SB)
1580+ CALL callbackasm1(SB)
1581+ CALL callbackasm1(SB)
1582+ CALL callbackasm1(SB)
1583+ CALL callbackasm1(SB)
1584+ CALL callbackasm1(SB)
1585+ CALL callbackasm1(SB)
1586+ CALL callbackasm1(SB)
1587+ CALL callbackasm1(SB)
1588+ CALL callbackasm1(SB)
1589+ CALL callbackasm1(SB)
1590+ CALL callbackasm1(SB)
1591+ CALL callbackasm1(SB)
1592+ CALL callbackasm1(SB)
1593+ CALL callbackasm1(SB)
1594+ CALL callbackasm1(SB)
1595+ CALL callbackasm1(SB)
1596+ CALL callbackasm1(SB)
1597+ CALL callbackasm1(SB)
1598+ CALL callbackasm1(SB)
1599+ CALL callbackasm1(SB)
1600+ CALL callbackasm1(SB)
1601+ CALL callbackasm1(SB)
1602+ CALL callbackasm1(SB)
1603+ CALL callbackasm1(SB)
1604+ CALL callbackasm1(SB)
1605+ CALL callbackasm1(SB)
1606+ CALL callbackasm1(SB)
1607+ CALL callbackasm1(SB)
1608+ CALL callbackasm1(SB)
1609+ CALL callbackasm1(SB)
1610+ CALL callbackasm1(SB)
1611+ CALL callbackasm1(SB)
1612+ CALL callbackasm1(SB)
1613+ CALL callbackasm1(SB)
1614+ CALL callbackasm1(SB)
1615+ CALL callbackasm1(SB)
1616+ CALL callbackasm1(SB)
1617+ CALL callbackasm1(SB)
1618+ CALL callbackasm1(SB)
1619+ CALL callbackasm1(SB)
1620+ CALL callbackasm1(SB)
1621+ CALL callbackasm1(SB)
1622+ CALL callbackasm1(SB)
1623+ CALL callbackasm1(SB)
1624+ CALL callbackasm1(SB)
1625+ CALL callbackasm1(SB)
1626+ CALL callbackasm1(SB)
1627+ CALL callbackasm1(SB)
1628+ CALL callbackasm1(SB)
1629+ CALL callbackasm1(SB)
1630+ CALL callbackasm1(SB)
1631+ CALL callbackasm1(SB)
1632+ CALL callbackasm1(SB)
1633+ CALL callbackasm1(SB)
1634+ CALL callbackasm1(SB)
1635+ CALL callbackasm1(SB)
1636+ CALL callbackasm1(SB)
1637+ CALL callbackasm1(SB)
1638+ CALL callbackasm1(SB)
1639+ CALL callbackasm1(SB)
1640+ CALL callbackasm1(SB)
1641+ CALL callbackasm1(SB)
1642+ CALL callbackasm1(SB)
1643+ CALL callbackasm1(SB)
1644+ CALL callbackasm1(SB)
1645+ CALL callbackasm1(SB)
1646+ CALL callbackasm1(SB)
1647+ CALL callbackasm1(SB)
1648+ CALL callbackasm1(SB)
1649+ CALL callbackasm1(SB)
1650+ CALL callbackasm1(SB)
1651+ CALL callbackasm1(SB)
1652+ CALL callbackasm1(SB)
1653+ CALL callbackasm1(SB)
1654+ CALL callbackasm1(SB)
1655+ CALL callbackasm1(SB)
1656+ CALL callbackasm1(SB)
1657+ CALL callbackasm1(SB)
1658+ CALL callbackasm1(SB)
1659+ CALL callbackasm1(SB)
1660+ CALL callbackasm1(SB)
1661+ CALL callbackasm1(SB)
1662+ CALL callbackasm1(SB)
1663+ CALL callbackasm1(SB)
1664+ CALL callbackasm1(SB)
1665+ CALL callbackasm1(SB)
1666+ CALL callbackasm1(SB)
1667+ CALL callbackasm1(SB)
1668+ CALL callbackasm1(SB)
1669+ CALL callbackasm1(SB)
1670+ CALL callbackasm1(SB)
1671+ CALL callbackasm1(SB)
1672+ CALL callbackasm1(SB)
1673+ CALL callbackasm1(SB)
1674+ CALL callbackasm1(SB)
1675+ CALL callbackasm1(SB)
1676+ CALL callbackasm1(SB)
1677+ CALL callbackasm1(SB)
1678+ CALL callbackasm1(SB)
1679+ CALL callbackasm1(SB)
1680+ CALL callbackasm1(SB)
1681+ CALL callbackasm1(SB)
1682+ CALL callbackasm1(SB)
1683+ CALL callbackasm1(SB)
1684+ CALL callbackasm1(SB)
1685+ CALL callbackasm1(SB)
1686+ CALL callbackasm1(SB)
1687+ CALL callbackasm1(SB)
1688+ CALL callbackasm1(SB)
1689+ CALL callbackasm1(SB)
1690+ CALL callbackasm1(SB)
1691+ CALL callbackasm1(SB)
1692+ CALL callbackasm1(SB)
1693+ CALL callbackasm1(SB)
1694+ CALL callbackasm1(SB)
1695+ CALL callbackasm1(SB)
1696+ CALL callbackasm1(SB)
1697+ CALL callbackasm1(SB)
1698+ CALL callbackasm1(SB)
1699+ CALL callbackasm1(SB)
1700+ CALL callbackasm1(SB)
1701+ CALL callbackasm1(SB)
1702+ CALL callbackasm1(SB)
1703+ CALL callbackasm1(SB)
1704+ CALL callbackasm1(SB)
1705+ CALL callbackasm1(SB)
1706+ CALL callbackasm1(SB)
1707+ CALL callbackasm1(SB)
1708+ CALL callbackasm1(SB)
1709+ CALL callbackasm1(SB)
1710+ CALL callbackasm1(SB)
1711+ CALL callbackasm1(SB)
1712+ CALL callbackasm1(SB)
1713+ CALL callbackasm1(SB)
1714+ CALL callbackasm1(SB)
1715+ CALL callbackasm1(SB)
1716+ CALL callbackasm1(SB)
1717+ CALL callbackasm1(SB)
1718+ CALL callbackasm1(SB)
1719+ CALL callbackasm1(SB)
1720+ CALL callbackasm1(SB)
1721+ CALL callbackasm1(SB)
1722+ CALL callbackasm1(SB)
1723+ CALL callbackasm1(SB)
1724+ CALL callbackasm1(SB)
1725+ CALL callbackasm1(SB)
1726+ CALL callbackasm1(SB)
1727+ CALL callbackasm1(SB)
1728+ CALL callbackasm1(SB)
1729+ CALL callbackasm1(SB)
1730+ CALL callbackasm1(SB)
1731+ CALL callbackasm1(SB)
1732+ CALL callbackasm1(SB)
1733+ CALL callbackasm1(SB)
1734+ CALL callbackasm1(SB)
1735+ CALL callbackasm1(SB)
1736+ CALL callbackasm1(SB)
1737+ CALL callbackasm1(SB)
1738+ CALL callbackasm1(SB)
1739+ CALL callbackasm1(SB)
1740+ CALL callbackasm1(SB)
1741+ CALL callbackasm1(SB)
1742+ CALL callbackasm1(SB)
1743+ CALL callbackasm1(SB)
1744+ CALL callbackasm1(SB)
1745+ CALL callbackasm1(SB)
1746+ CALL callbackasm1(SB)
1747+ CALL callbackasm1(SB)
1748+ CALL callbackasm1(SB)
1749+ CALL callbackasm1(SB)
1750+ CALL callbackasm1(SB)
1751+ CALL callbackasm1(SB)
1752+ CALL callbackasm1(SB)
1753+ CALL callbackasm1(SB)
1754+ CALL callbackasm1(SB)
1755+ CALL callbackasm1(SB)
1756+ CALL callbackasm1(SB)
1757+ CALL callbackasm1(SB)
1758+ CALL callbackasm1(SB)
1759+ CALL callbackasm1(SB)
1760+ CALL callbackasm1(SB)
1761+ CALL callbackasm1(SB)
1762+ CALL callbackasm1(SB)
1763+ CALL callbackasm1(SB)
1764+ CALL callbackasm1(SB)
1765+ CALL callbackasm1(SB)
1766+ CALL callbackasm1(SB)
1767+ CALL callbackasm1(SB)
1768+ CALL callbackasm1(SB)
1769+ CALL callbackasm1(SB)
1770+ CALL callbackasm1(SB)
1771+ CALL callbackasm1(SB)
1772+ CALL callbackasm1(SB)
1773+ CALL callbackasm1(SB)
1774+ CALL callbackasm1(SB)
1775+ CALL callbackasm1(SB)
1776+ CALL callbackasm1(SB)
1777+ CALL callbackasm1(SB)
1778+ CALL callbackasm1(SB)
1779+ CALL callbackasm1(SB)
1780+ CALL callbackasm1(SB)
1781+ CALL callbackasm1(SB)
1782+ CALL callbackasm1(SB)
1783+ CALL callbackasm1(SB)
1784+ CALL callbackasm1(SB)
1785+ CALL callbackasm1(SB)
1786+ CALL callbackasm1(SB)
1787+ CALL callbackasm1(SB)
1788+ CALL callbackasm1(SB)
1789+ CALL callbackasm1(SB)
1790+ CALL callbackasm1(SB)
1791+ CALL callbackasm1(SB)
1792+ CALL callbackasm1(SB)
1793+ CALL callbackasm1(SB)
1794+ CALL callbackasm1(SB)
1795+ CALL callbackasm1(SB)
1796+ CALL callbackasm1(SB)
1797+ CALL callbackasm1(SB)
1798+ CALL callbackasm1(SB)
1799+ CALL callbackasm1(SB)
1800+ CALL callbackasm1(SB)
1801+ CALL callbackasm1(SB)
1802+ CALL callbackasm1(SB)
1803+ CALL callbackasm1(SB)
1804+ CALL callbackasm1(SB)
1805+ CALL callbackasm1(SB)
1806+ CALL callbackasm1(SB)
1807+ CALL callbackasm1(SB)
1808+ CALL callbackasm1(SB)
1809+ CALL callbackasm1(SB)
1810+ CALL callbackasm1(SB)
1811+ CALL callbackasm1(SB)
1812+ CALL callbackasm1(SB)
1813+ CALL callbackasm1(SB)
1814+ CALL callbackasm1(SB)
1815+ CALL callbackasm1(SB)
1816+ CALL callbackasm1(SB)
1817+ CALL callbackasm1(SB)
1818+ CALL callbackasm1(SB)
1819+ CALL callbackasm1(SB)
1820+ CALL callbackasm1(SB)
1821+ CALL callbackasm1(SB)
1822+ CALL callbackasm1(SB)
1823+ CALL callbackasm1(SB)
1824+ CALL callbackasm1(SB)
1825+ CALL callbackasm1(SB)
1826+ CALL callbackasm1(SB)
1827+ CALL callbackasm1(SB)
1828+ CALL callbackasm1(SB)
1829+ CALL callbackasm1(SB)
1830+ CALL callbackasm1(SB)
1831+ CALL callbackasm1(SB)
1832+ CALL callbackasm1(SB)
1833+ CALL callbackasm1(SB)
1834+ CALL callbackasm1(SB)
1835+ CALL callbackasm1(SB)
1836+ CALL callbackasm1(SB)
1837+ CALL callbackasm1(SB)
1838+ CALL callbackasm1(SB)
1839+ CALL callbackasm1(SB)
1840+ CALL callbackasm1(SB)
1841+ CALL callbackasm1(SB)
1842+ CALL callbackasm1(SB)
1843+ CALL callbackasm1(SB)
1844+ CALL callbackasm1(SB)
1845+ CALL callbackasm1(SB)
1846+ CALL callbackasm1(SB)
1847+ CALL callbackasm1(SB)
1848+ CALL callbackasm1(SB)
1849+ CALL callbackasm1(SB)
1850+ CALL callbackasm1(SB)
1851+ CALL callbackasm1(SB)
1852+ CALL callbackasm1(SB)
1853+ CALL callbackasm1(SB)
1854+ CALL callbackasm1(SB)
1855+ CALL callbackasm1(SB)
1856+ CALL callbackasm1(SB)
1857+ CALL callbackasm1(SB)
1858+ CALL callbackasm1(SB)
1859+ CALL callbackasm1(SB)
1860+ CALL callbackasm1(SB)
1861+ CALL callbackasm1(SB)
1862+ CALL callbackasm1(SB)
1863+ CALL callbackasm1(SB)
1864+ CALL callbackasm1(SB)
1865+ CALL callbackasm1(SB)
1866+ CALL callbackasm1(SB)
1867+ CALL callbackasm1(SB)
1868+ CALL callbackasm1(SB)
1869+ CALL callbackasm1(SB)
1870+ CALL callbackasm1(SB)
1871+ CALL callbackasm1(SB)
1872+ CALL callbackasm1(SB)
1873+ CALL callbackasm1(SB)
1874+ CALL callbackasm1(SB)
1875+ CALL callbackasm1(SB)
1876+ CALL callbackasm1(SB)
1877+ CALL callbackasm1(SB)
1878+ CALL callbackasm1(SB)
1879+ CALL callbackasm1(SB)
1880+ CALL callbackasm1(SB)
1881+ CALL callbackasm1(SB)
1882+ CALL callbackasm1(SB)
1883+ CALL callbackasm1(SB)
1884+ CALL callbackasm1(SB)
1885+ CALL callbackasm1(SB)
1886+ CALL callbackasm1(SB)
1887+ CALL callbackasm1(SB)
1888+ CALL callbackasm1(SB)
1889+ CALL callbackasm1(SB)
1890+ CALL callbackasm1(SB)
1891+ CALL callbackasm1(SB)
1892+ CALL callbackasm1(SB)
1893+ CALL callbackasm1(SB)
1894+ CALL callbackasm1(SB)
1895+ CALL callbackasm1(SB)
1896+ CALL callbackasm1(SB)
1897+ CALL callbackasm1(SB)
1898+ CALL callbackasm1(SB)
1899+ CALL callbackasm1(SB)
1900+ CALL callbackasm1(SB)
1901+ CALL callbackasm1(SB)
1902+ CALL callbackasm1(SB)
1903+ CALL callbackasm1(SB)
1904+ CALL callbackasm1(SB)
1905+ CALL callbackasm1(SB)
1906+ CALL callbackasm1(SB)
1907+ CALL callbackasm1(SB)
1908+ CALL callbackasm1(SB)
1909+ CALL callbackasm1(SB)
1910+ CALL callbackasm1(SB)
1911+ CALL callbackasm1(SB)
1912+ CALL callbackasm1(SB)
1913+ CALL callbackasm1(SB)
1914+ CALL callbackasm1(SB)
1915+ CALL callbackasm1(SB)
1916+ CALL callbackasm1(SB)
1917+ CALL callbackasm1(SB)
1918+ CALL callbackasm1(SB)
1919+ CALL callbackasm1(SB)
1920+ CALL callbackasm1(SB)
1921+ CALL callbackasm1(SB)
1922+ CALL callbackasm1(SB)
1923+ CALL callbackasm1(SB)
1924+ CALL callbackasm1(SB)
1925+ CALL callbackasm1(SB)
1926+ CALL callbackasm1(SB)
1927+ CALL callbackasm1(SB)
1928+ CALL callbackasm1(SB)
1929+ CALL callbackasm1(SB)
1930+ CALL callbackasm1(SB)
1931+ CALL callbackasm1(SB)
1932+ CALL callbackasm1(SB)
1933+ CALL callbackasm1(SB)
1934+ CALL callbackasm1(SB)
1935+ CALL callbackasm1(SB)
1936+ CALL callbackasm1(SB)
1937+ CALL callbackasm1(SB)
1938+ CALL callbackasm1(SB)
1939+ CALL callbackasm1(SB)
1940+ CALL callbackasm1(SB)
1941+ CALL callbackasm1(SB)
1942+ CALL callbackasm1(SB)
1943+ CALL callbackasm1(SB)
1944+ CALL callbackasm1(SB)
1945+ CALL callbackasm1(SB)
1946+ CALL callbackasm1(SB)
1947+ CALL callbackasm1(SB)
1948+ CALL callbackasm1(SB)
1949+ CALL callbackasm1(SB)
1950+ CALL callbackasm1(SB)
1951+ CALL callbackasm1(SB)
1952+ CALL callbackasm1(SB)
1953+ CALL callbackasm1(SB)
1954+ CALL callbackasm1(SB)
1955+ CALL callbackasm1(SB)
1956+ CALL callbackasm1(SB)
1957+ CALL callbackasm1(SB)
1958+ CALL callbackasm1(SB)
1959+ CALL callbackasm1(SB)
1960+ CALL callbackasm1(SB)
1961+ CALL callbackasm1(SB)
1962+ CALL callbackasm1(SB)
1963+ CALL callbackasm1(SB)
1964+ CALL callbackasm1(SB)
1965+ CALL callbackasm1(SB)
1966+ CALL callbackasm1(SB)
1967+ CALL callbackasm1(SB)
1968+ CALL callbackasm1(SB)
1969+ CALL callbackasm1(SB)
1970+ CALL callbackasm1(SB)
1971+ CALL callbackasm1(SB)
1972+ CALL callbackasm1(SB)
1973+ CALL callbackasm1(SB)
1974+ CALL callbackasm1(SB)
1975+ CALL callbackasm1(SB)
1976+ CALL callbackasm1(SB)
1977+ CALL callbackasm1(SB)
1978+ CALL callbackasm1(SB)
1979+ CALL callbackasm1(SB)
1980+ CALL callbackasm1(SB)
1981+ CALL callbackasm1(SB)
1982+ CALL callbackasm1(SB)
1983+ CALL callbackasm1(SB)
1984+ CALL callbackasm1(SB)
1985+ CALL callbackasm1(SB)
1986+ CALL callbackasm1(SB)
1987+ CALL callbackasm1(SB)
1988+ CALL callbackasm1(SB)
1989+ CALL callbackasm1(SB)
1990+ CALL callbackasm1(SB)
1991+ CALL callbackasm1(SB)
1992+ CALL callbackasm1(SB)
1993+ CALL callbackasm1(SB)
1994+ CALL callbackasm1(SB)
1995+ CALL callbackasm1(SB)
1996+ CALL callbackasm1(SB)
1997+ CALL callbackasm1(SB)
1998+ CALL callbackasm1(SB)
1999+ CALL callbackasm1(SB)
2000+ CALL callbackasm1(SB)
2001+ CALL callbackasm1(SB)
2002+ CALL callbackasm1(SB)
2003+ CALL callbackasm1(SB)
2004+ CALL callbackasm1(SB)
2005+ CALL callbackasm1(SB)
2006+ CALL callbackasm1(SB)
2007+ CALL callbackasm1(SB)
2008+ CALL callbackasm1(SB)
2009+ CALL callbackasm1(SB)
2010+ CALL callbackasm1(SB)
2011+ CALL callbackasm1(SB)
2012+ CALL callbackasm1(SB)
2013+ CALL callbackasm1(SB)
2014+ CALL callbackasm1(SB)
A zcallback_darwin_arm64.s +4014 -0 large diff (4014 lines changed): collapsed

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 1

Tags 102

↑↓ moveenter openesc close