diff --git a/README.md b/README.md index 77b0a141..5b394f3f 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ Tier 2 platforms are supported by PureGo on a best-effort basis. Critical bugs o - **FreeBSD**: amd643,4, arm643,4 - **Linux**: 3863, arm3, loong642, ppc64le2, riscv643, s390x3, 5 - **NetBSD**: amd643,4, arm643,4 +- **OpenBSD**: amd643,4, arm643,4 - **Windows**: 3863,6, arm3,6,7 #### Support Notes diff --git a/cgo.go b/cgo.go index b6def570..ecd08de8 100644 --- a/cgo.go +++ b/cgo.go @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2022 The Ebitengine Authors -//go:build cgo && (darwin || freebsd || linux || netbsd) +//go:build cgo && (darwin || freebsd || linux || netbsd || openbsd) package purego diff --git a/dlerror.go b/dlerror.go index ad52b436..66cbb9d2 100644 --- a/dlerror.go +++ b/dlerror.go @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 The Ebitengine Authors -//go:build darwin || freebsd || linux || netbsd +//go:build darwin || freebsd || linux || netbsd || openbsd package purego diff --git a/dlfcn.go b/dlfcn.go index 2730d82c..3eb0c0f9 100644 --- a/dlfcn.go +++ b/dlfcn.go @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2022 The Ebitengine Authors -//go:build (darwin || freebsd || linux || netbsd) && !android && !faketime +//go:build (darwin || freebsd || linux || netbsd || openbsd) && !android && !faketime package purego diff --git a/dlfcn_nocgo_openbsd.go b/dlfcn_nocgo_openbsd.go new file mode 100644 index 00000000..7e256c2b --- /dev/null +++ b/dlfcn_nocgo_openbsd.go @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileCopyrightText: 2026 The Ebitengine Authors + +//go:build !cgo + +package purego + +// OpenBSD keeps dlopen and friends in libc -- there is no libdl -- and ships +// no unversioned libc.so FILE: /usr/lib holds libc.so.103.0 and nothing else. +// "libc.so" is still the right name to write here: the Go linker emits it as a +// DT_NEEDED and OpenBSD's ld.so resolves an unversioned soname to the highest +// version present. The Go runtime itself does exactly this in +// runtime/sys_openbsd.go, which is the proof that it works. + +//go:cgo_import_dynamic purego_dlopen dlopen "libc.so" +//go:cgo_import_dynamic purego_dlsym dlsym "libc.so" +//go:cgo_import_dynamic purego_dlerror dlerror "libc.so" +//go:cgo_import_dynamic purego_dlclose dlclose "libc.so" diff --git a/dlfcn_openbsd.go b/dlfcn_openbsd.go new file mode 100644 index 00000000..f46008bd --- /dev/null +++ b/dlfcn_openbsd.go @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileCopyrightText: 2026 The Ebitengine Authors + +package purego + +// Source for constants: https://github.com/openbsd/src/blob/master/include/dlfcn.h +// +// Read from /usr/include/dlfcn.h on OpenBSD 7.9/arm64 rather than copied from +// another BSD: they happen to agree with NetBSD's, and checking is cheaper +// than finding out they had stopped agreeing. +const ( + intSize = 32 << (^uint(0) >> 63) // 32 or 64 + RTLD_DEFAULT = 1< #include diff --git a/internal/cgo/syscall_cgo_unix.go b/internal/cgo/syscall_cgo_unix.go index c71287e3..ba5132cf 100644 --- a/internal/cgo/syscall_cgo_unix.go +++ b/internal/cgo/syscall_cgo_unix.go @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2022 The Ebitengine Authors -//go:build freebsd || (linux && !(386 || amd64 || arm || arm64 || loong64 || ppc64le || riscv64)) || netbsd +//go:build freebsd || (linux && !(386 || amd64 || arm || arm64 || loong64 || ppc64le || riscv64)) || netbsd || openbsd package cgo @@ -9,7 +9,7 @@ package cgo // because Cgo and assembly files can't be in the same package. /* -#cgo !netbsd LDFLAGS: -ldl +#cgo !netbsd,!openbsd LDFLAGS: -ldl #include #include diff --git a/internal/fakecgo/callbacks.go b/internal/fakecgo/callbacks.go index 27d4c98c..ab00158e 100644 --- a/internal/fakecgo/callbacks.go +++ b/internal/fakecgo/callbacks.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !cgo && (darwin || freebsd || linux || netbsd) +//go:build !cgo && (darwin || freebsd || linux || netbsd || openbsd) package fakecgo diff --git a/internal/fakecgo/doc.go b/internal/fakecgo/doc.go index e482c120..06e2e29c 100644 --- a/internal/fakecgo/doc.go +++ b/internal/fakecgo/doc.go @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2022 The Ebitengine Authors -//go:build !cgo && (darwin || freebsd || linux || netbsd) +//go:build !cgo && (darwin || freebsd || linux || netbsd || openbsd) // Package fakecgo implements the Cgo runtime (runtime/cgo) entirely in Go. // This allows code that calls into C to function properly when CGO_ENABLED=0. diff --git a/internal/fakecgo/fakecgo.go b/internal/fakecgo/fakecgo.go index 384dab2a..df6ac561 100644 --- a/internal/fakecgo/fakecgo.go +++ b/internal/fakecgo/fakecgo.go @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2025 The Ebitengine Authors -//go:build !cgo && (darwin || freebsd || linux || netbsd) +//go:build !cgo && (darwin || freebsd || linux || netbsd || openbsd) package fakecgo diff --git a/internal/fakecgo/gen.go b/internal/fakecgo/gen.go index c085a3dd..c7ed0d62 100644 --- a/internal/fakecgo/gen.go +++ b/internal/fakecgo/gen.go @@ -120,7 +120,7 @@ var ( {"sigfillset", [5]Arg{{"set", "*sigset_t"}}, "int32", nil}, {"nanosleep", [5]Arg{{"ts", "*syscall.Timespec"}, {"rem", "*syscall.Timespec"}}, "int32", nil}, {"abort", [5]Arg{}, "", nil}, - {"sigaltstack", [5]Arg{{"ss", "*stack_t"}, {"old_ss", "*stack_t"}}, "int32", []string{"netbsd"}}, + {"sigaltstack", [5]Arg{{"ss", "*stack_t"}, {"old_ss", "*stack_t"}}, "int32", []string{"netbsd", "openbsd"}}, {"__errno_location", [5]Arg{}, "uintptr", []string{"linux"}}, {"setegid", [5]Arg{{"egid", "uint32"}}, "int32", []string{"linux"}}, {"seteuid", [5]Arg{{"euid", "uint32"}}, "int32", []string{"linux"}}, @@ -139,9 +139,9 @@ var ( {"pthread_sigmask", [5]Arg{{"how", "sighow"}, {"ign", "*sigset_t"}, {"oset", "*sigset_t"}}, "int32", nil}, {"pthread_self", [5]Arg{}, "pthread_t", []string{"darwin"}}, {"pthread_get_stacksize_np", [5]Arg{{"thread", "pthread_t"}}, "size_t", []string{"darwin"}}, - {"pthread_attr_getstacksize", [5]Arg{{"attr", "*pthread_attr_t"}, {"stacksize", "*size_t"}}, "int32", []string{"linux", "freebsd", "netbsd"}}, + {"pthread_attr_getstacksize", [5]Arg{{"attr", "*pthread_attr_t"}, {"stacksize", "*size_t"}}, "int32", []string{"linux", "freebsd", "netbsd", "openbsd"}}, {"pthread_attr_setstacksize", [5]Arg{{"attr", "*pthread_attr_t"}, {"size", "size_t"}}, "int32", []string{"darwin"}}, - {"pthread_attr_destroy", [5]Arg{{"attr", "*pthread_attr_t"}}, "int32", []string{"linux", "freebsd", "netbsd"}}, + {"pthread_attr_destroy", [5]Arg{{"attr", "*pthread_attr_t"}}, "int32", []string{"linux", "freebsd", "netbsd", "openbsd"}}, {"pthread_mutex_lock", [5]Arg{{"mutex", "*pthread_mutex_t"}}, "int32", nil}, {"pthread_mutex_unlock", [5]Arg{{"mutex", "*pthread_mutex_t"}}, "int32", nil}, {"pthread_cond_broadcast", [5]Arg{{"cond", "*pthread_cond_t"}}, "int32", nil}, @@ -154,7 +154,7 @@ var funcs = map[string]any{ "imports": imports, } -var GOOSes = []string{"darwin", "freebsd", "linux", "netbsd"} +var GOOSes = []string{"darwin", "freebsd", "linux", "netbsd", "openbsd"} func imports(symbols []Symbol) string { if len(symbols) == 0 { @@ -275,6 +275,9 @@ func run() error { case "netbsd": libcSO = "libc.so" pthreadSO = "libpthread.so" + case "openbsd": + libcSO = "libc.so" + pthreadSO = "libpthread.so" default: return fmt.Errorf("unsupported OS: %s", goos) } diff --git a/internal/fakecgo/go_libinit.go b/internal/fakecgo/go_libinit.go index 590a6507..da72440e 100644 --- a/internal/fakecgo/go_libinit.go +++ b/internal/fakecgo/go_libinit.go @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2022 The Ebitengine Authors -//go:build !cgo && (darwin || freebsd || linux || netbsd) +//go:build !cgo && (darwin || freebsd || linux || netbsd || openbsd) package fakecgo diff --git a/internal/fakecgo/go_openbsd.go b/internal/fakecgo/go_openbsd.go new file mode 100644 index 00000000..a59c7343 --- /dev/null +++ b/internal/fakecgo/go_openbsd.go @@ -0,0 +1,83 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !cgo && (amd64 || arm64) + +package fakecgo + +import "unsafe" + +//go:nosplit +func _cgo_sys_thread_start(ts *ThreadStart) { + var attr pthread_attr_t + var ign, oset sigset_t + var p pthread_t + var size size_t + var err int + + // fprintf(stderr, "runtime/cgo: _cgo_sys_thread_start: fn=%p, g=%p\n", ts->fn, ts->g); // debug + sigfillset(&ign) + pthread_sigmask(SIG_SETMASK, &ign, &oset) + + pthread_attr_init(&attr) + pthread_attr_getstacksize(&attr, &size) + // Leave stacklo=0 and set stackhi=size; mstart will do the rest. + ts.g.stackhi = uintptr(size) + + err = _cgo_try_pthread_create(&p, &attr, unsafe.Pointer(threadentry_trampolineABI0), ts) + + pthread_sigmask(SIG_SETMASK, &oset, nil) + + if err != 0 { + print("fakecgo: pthread_create failed: ") + println(err) + abort() + } +} + +// threadentry_trampolineABI0 maps the C ABI to Go ABI then calls the Go function +// +//go:linkname x_threadentry_trampoline threadentry_trampoline +var x_threadentry_trampoline byte +var threadentry_trampolineABI0 = &x_threadentry_trampoline + +//go:nosplit +func threadentry(v unsafe.Pointer) unsafe.Pointer { + var ss stack_t + ts := *(*ThreadStart)(v) + free(v) + + // On OpenBSD, a new thread inherits the signal stack of the + // creating thread. That confuses minit, so we remove that + // signal stack here before calling the regular mstart. It's + // a bit baroque to remove a signal stack here only to add one + // in minit, but it's a simple change that keeps OpenBSD + // working like other OS's. At this point all signals are + // blocked, so there is no race. + ss.ss_flags = SS_DISABLE + sigaltstack(&ss, nil) + + setg_trampoline(setg_func, uintptr(unsafe.Pointer(ts.g))) + + callThreadEntryFn(ts.fn) + + return nil +} + +// here we will store a pointer to the provided setg func +var setg_func uintptr + +//go:nosplit +func x_cgo_init(g *G, setg uintptr) { + var size size_t + var attr pthread_attr_t + + setg_func = setg + pthread_attr_init(&attr) + pthread_attr_getstacksize(&attr, &size) + // runtime/cgo uses __builtin_frame_address(0) instead of `uintptr(unsafe.Pointer(&size))` + // but this should be OK since we are taking the address of the first variable in this function. + g.stacklo = uintptr(unsafe.Pointer(&size)) - uintptr(size) + 4096 + pthread_attr_destroy(&attr) +} diff --git a/internal/fakecgo/go_setenv.go b/internal/fakecgo/go_setenv.go index dfc6629e..6dd1918c 100644 --- a/internal/fakecgo/go_setenv.go +++ b/internal/fakecgo/go_setenv.go @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2022 The Ebitengine Authors -//go:build !cgo && (darwin || freebsd || linux || netbsd) +//go:build !cgo && (darwin || freebsd || linux || netbsd || openbsd) package fakecgo diff --git a/internal/fakecgo/go_util.go b/internal/fakecgo/go_util.go index ee993baa..9ca3831b 100644 --- a/internal/fakecgo/go_util.go +++ b/internal/fakecgo/go_util.go @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2022 The Ebitengine Authors -//go:build !cgo && (darwin || freebsd || linux || netbsd) +//go:build !cgo && (darwin || freebsd || linux || netbsd || openbsd) package fakecgo diff --git a/internal/fakecgo/iscgo.go b/internal/fakecgo/iscgo.go index 12e52147..25f25437 100644 --- a/internal/fakecgo/iscgo.go +++ b/internal/fakecgo/iscgo.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !cgo && (darwin || freebsd || linux || netbsd) +//go:build !cgo && (darwin || freebsd || linux || netbsd || openbsd) // The runtime package contains an uninitialized definition // for runtime·iscgo. Override it to tell the runtime we're here. diff --git a/internal/fakecgo/libcgo.go b/internal/fakecgo/libcgo.go index d1c842e6..1c075e07 100644 --- a/internal/fakecgo/libcgo.go +++ b/internal/fakecgo/libcgo.go @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2022 The Ebitengine Authors -//go:build !cgo && (darwin || freebsd || linux || netbsd) +//go:build !cgo && (darwin || freebsd || linux || netbsd || openbsd) package fakecgo diff --git a/internal/fakecgo/libcgo_openbsd.go b/internal/fakecgo/libcgo_openbsd.go new file mode 100644 index 00000000..2c79d276 --- /dev/null +++ b/internal/fakecgo/libcgo_openbsd.go @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileCopyrightText: 2026 The Ebitengine Authors + +//go:build !cgo + +package fakecgo + +import "structs" + +// OpenBSD's pthread_mutex_t and pthread_cond_t are opaque POINTERS, and both +// PTHREAD_MUTEX_INITIALIZER and PTHREAD_COND_INITIALIZER are NULL -- +// /usr/include/pthread.h:157-158 on 7.9. So uintptr(0) is the initialiser, +// which is the same shape NetBSD happens to have and not a copy of it. +type ( + pthread_cond_t uintptr + pthread_mutex_t uintptr +) + +var ( + PTHREAD_COND_INITIALIZER = pthread_cond_t(0) + PTHREAD_MUTEX_INITIALIZER = pthread_mutex_t(0) +) + +// Source: /usr/include/sys/signal.h on OpenBSD 7.9 +// +// typedef struct sigaltstack { +// void *ss_sp; +// size_t ss_size; +// int ss_flags; +// } stack_t; +type stack_t struct { + _ structs.HostLayout + ss_sp uintptr + ss_size uintptr + ss_flags int32 +} + +// Source: /usr/include/sys/signal.h -- SS_DISABLE 0x0004 +const SS_DISABLE = 0x004 diff --git a/internal/fakecgo/openbsd.go b/internal/fakecgo/openbsd.go new file mode 100644 index 00000000..a8529b55 --- /dev/null +++ b/internal/fakecgo/openbsd.go @@ -0,0 +1,24 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !cgo && openbsd + +package fakecgo + +import _ "unsafe" // for go:linkname + +// Supply environ and __progname, because we don't link against the standard +// OpenBSD crt0.o and the libc dynamic library needs them. Both are weak +// symbols in /usr/lib/libc.so.103.0. +// +// NetBSD's equivalent also supplies __ps_strings; OpenBSD's libc does not +// reference it, and libc here exports no such symbol. + +//go:linkname _environ environ +//go:linkname _progname __progname + +var ( + _environ uintptr + _progname uintptr +) diff --git a/internal/fakecgo/setenv.go b/internal/fakecgo/setenv.go index 82308b8c..aba65f47 100644 --- a/internal/fakecgo/setenv.go +++ b/internal/fakecgo/setenv.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !cgo && (darwin || freebsd || linux || netbsd) +//go:build !cgo && (darwin || freebsd || linux || netbsd || openbsd) package fakecgo diff --git a/internal/fakecgo/threadentry_amd64.go b/internal/fakecgo/threadentry_amd64.go index 7f78dd57..5c22d9bb 100644 --- a/internal/fakecgo/threadentry_amd64.go +++ b/internal/fakecgo/threadentry_amd64.go @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2026 The Ebitengine Authors -//go:build !cgo && amd64 && (darwin || freebsd || linux || netbsd) +//go:build !cgo && amd64 && (darwin || freebsd || linux || netbsd || openbsd) package fakecgo diff --git a/internal/fakecgo/threadentry_noasm.go b/internal/fakecgo/threadentry_noasm.go index 8771852d..31e361ca 100644 --- a/internal/fakecgo/threadentry_noasm.go +++ b/internal/fakecgo/threadentry_noasm.go @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2026 The Ebitengine Authors -//go:build !cgo && !amd64 && (darwin || freebsd || linux || netbsd) +//go:build !cgo && !amd64 && (darwin || freebsd || linux || netbsd || openbsd) package fakecgo diff --git a/internal/fakecgo/threadentry_test.go b/internal/fakecgo/threadentry_test.go index b6b27c5f..077568c0 100644 --- a/internal/fakecgo/threadentry_test.go +++ b/internal/fakecgo/threadentry_test.go @@ -3,7 +3,7 @@ // 386/arm are excluded: the standalone fakecgo test binary resolves pthread // from libpthread.so.0, which fails the dynamic symbol lookup on 32-bit linux. -//go:build !cgo && (linux || darwin || freebsd || netbsd) && !386 && !arm +//go:build !cgo && (linux || darwin || freebsd || netbsd || openbsd) && !386 && !arm package fakecgo diff --git a/internal/fakecgo/trampolines_amd64.s b/internal/fakecgo/trampolines_amd64.s index e8a152d8..b0f63944 100644 --- a/internal/fakecgo/trampolines_amd64.s +++ b/internal/fakecgo/trampolines_amd64.s @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2022 The Ebitengine Authors -//go:build !cgo && (darwin || freebsd || linux || netbsd) +//go:build !cgo && (darwin || freebsd || linux || netbsd || openbsd) /* trampoline for emulating required C functions for cgo in go (see cgo.go) diff --git a/internal/fakecgo/trampolines_arm64.s b/internal/fakecgo/trampolines_arm64.s index d75b77e6..75aadfa8 100644 --- a/internal/fakecgo/trampolines_arm64.s +++ b/internal/fakecgo/trampolines_arm64.s @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2022 The Ebitengine Authors -//go:build !cgo && (darwin || freebsd || linux || netbsd) +//go:build !cgo && (darwin || freebsd || linux || netbsd || openbsd) #include "textflag.h" #include "go_asm.h" diff --git a/internal/fakecgo/zsymbols.go b/internal/fakecgo/zsymbols.go index cc552e7d..45ffc7d3 100644 --- a/internal/fakecgo/zsymbols.go +++ b/internal/fakecgo/zsymbols.go @@ -3,7 +3,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2022 The Ebitengine Authors -//go:build !cgo && (darwin || freebsd || linux || netbsd) +//go:build !cgo && (darwin || freebsd || linux || netbsd || openbsd) package fakecgo diff --git a/internal/fakecgo/zsymbols_openbsd.go b/internal/fakecgo/zsymbols_openbsd.go new file mode 100644 index 00000000..774402cf --- /dev/null +++ b/internal/fakecgo/zsymbols_openbsd.go @@ -0,0 +1,59 @@ +// Code generated by 'go generate' with gen.go. DO NOT EDIT. + +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileCopyrightText: 2022 The Ebitengine Authors + +//go:build !cgo + +package fakecgo + +import "unsafe" + +//go:cgo_import_dynamic purego_malloc malloc "libc.so" +//go:cgo_import_dynamic purego_free free "libc.so" +//go:cgo_import_dynamic purego_setenv setenv "libc.so" +//go:cgo_import_dynamic purego_unsetenv unsetenv "libc.so" +//go:cgo_import_dynamic purego_sigfillset sigfillset "libc.so" +//go:cgo_import_dynamic purego_nanosleep nanosleep "libc.so" +//go:cgo_import_dynamic purego_abort abort "libc.so" +//go:cgo_import_dynamic purego_sigaltstack sigaltstack "libc.so" +//go:cgo_import_dynamic purego_pthread_attr_init pthread_attr_init "libpthread.so" +//go:cgo_import_dynamic purego_pthread_create pthread_create "libpthread.so" +//go:cgo_import_dynamic purego_pthread_detach pthread_detach "libpthread.so" +//go:cgo_import_dynamic purego_pthread_sigmask pthread_sigmask "libpthread.so" +//go:cgo_import_dynamic purego_pthread_mutex_lock pthread_mutex_lock "libpthread.so" +//go:cgo_import_dynamic purego_pthread_mutex_unlock pthread_mutex_unlock "libpthread.so" +//go:cgo_import_dynamic purego_pthread_cond_broadcast pthread_cond_broadcast "libpthread.so" +//go:cgo_import_dynamic purego_pthread_setspecific pthread_setspecific "libpthread.so" +//go:cgo_import_dynamic purego_pthread_attr_getstacksize pthread_attr_getstacksize "libpthread.so" +//go:cgo_import_dynamic purego_pthread_attr_destroy pthread_attr_destroy "libpthread.so" + +//go:nosplit +//go:norace +func sigaltstack(ss *stack_t, old_ss *stack_t) int32 { + return int32(call5(sigaltstackABI0, uintptr(unsafe.Pointer(ss)), uintptr(unsafe.Pointer(old_ss)), 0, 0, 0)) +} + +//go:nosplit +//go:norace +func pthread_attr_getstacksize(attr *pthread_attr_t, stacksize *size_t) int32 { + return int32(call5(pthread_attr_getstacksizeABI0, uintptr(unsafe.Pointer(attr)), uintptr(unsafe.Pointer(stacksize)), 0, 0, 0)) +} + +//go:nosplit +//go:norace +func pthread_attr_destroy(attr *pthread_attr_t) int32 { + return int32(call5(pthread_attr_destroyABI0, uintptr(unsafe.Pointer(attr)), 0, 0, 0, 0)) +} + +//go:linkname _sigaltstack _sigaltstack +var _sigaltstack uint8 +var sigaltstackABI0 = uintptr(unsafe.Pointer(&_sigaltstack)) + +//go:linkname _pthread_attr_getstacksize _pthread_attr_getstacksize +var _pthread_attr_getstacksize uint8 +var pthread_attr_getstacksizeABI0 = uintptr(unsafe.Pointer(&_pthread_attr_getstacksize)) + +//go:linkname _pthread_attr_destroy _pthread_attr_destroy +var _pthread_attr_destroy uint8 +var pthread_attr_destroyABI0 = uintptr(unsafe.Pointer(&_pthread_attr_destroy)) diff --git a/internal/fakecgo/ztrampolines_openbsd.s b/internal/fakecgo/ztrampolines_openbsd.s new file mode 100644 index 00000000..81ef76f5 --- /dev/null +++ b/internal/fakecgo/ztrampolines_openbsd.s @@ -0,0 +1,19 @@ +// Code generated by 'go generate' with gen.go. DO NOT EDIT. + +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileCopyrightText: 2022 The Ebitengine Authors + +//go:build !cgo + +#include "textflag.h" + +// these stubs are here because it is not possible to go:linkname directly the C functions + +TEXT _sigaltstack(SB), NOSPLIT|NOFRAME, $0-0 + JMP purego_sigaltstack(SB) + +TEXT _pthread_attr_getstacksize(SB), NOSPLIT|NOFRAME, $0-0 + JMP purego_pthread_attr_getstacksize(SB) + +TEXT _pthread_attr_destroy(SB), NOSPLIT|NOFRAME, $0-0 + JMP purego_pthread_attr_destroy(SB) diff --git a/internal/fakecgo/ztrampolines_stubs.s b/internal/fakecgo/ztrampolines_stubs.s index 8e1afff7..47c2496a 100644 --- a/internal/fakecgo/ztrampolines_stubs.s +++ b/internal/fakecgo/ztrampolines_stubs.s @@ -3,7 +3,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2022 The Ebitengine Authors -//go:build !cgo && (darwin || freebsd || linux || netbsd) +//go:build !cgo && (darwin || freebsd || linux || netbsd || openbsd) #include "textflag.h" diff --git a/internal/load/load_unix.go b/internal/load/load_unix.go index ec3f7e56..2f1642d2 100644 --- a/internal/load/load_unix.go +++ b/internal/load/load_unix.go @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2024 The Ebitengine Authors -//go:build darwin || freebsd || linux || netbsd +//go:build darwin || freebsd || linux || netbsd || openbsd package load diff --git a/nocgo.go b/nocgo.go index b91b9796..62cddd6b 100644 --- a/nocgo.go +++ b/nocgo.go @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2022 The Ebitengine Authors -//go:build !cgo && (darwin || freebsd || linux || netbsd) +//go:build !cgo && (darwin || freebsd || linux || netbsd || openbsd) package purego diff --git a/sys_amd64.s b/sys_amd64.s index 56cbc5fc..e73138c0 100644 --- a/sys_amd64.s +++ b/sys_amd64.s @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2022 The Ebitengine Authors -//go:build darwin || freebsd || linux || netbsd +//go:build darwin || freebsd || linux || netbsd || openbsd #include "textflag.h" #include "abi_amd64.h" diff --git a/sys_arm64.s b/sys_arm64.s index c1adb399..84164e6c 100644 --- a/sys_arm64.s +++ b/sys_arm64.s @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2022 The Ebitengine Authors -//go:build darwin || freebsd || linux || netbsd || windows +//go:build darwin || freebsd || linux || netbsd || openbsd || windows #include "textflag.h" #include "go_asm.h" diff --git a/sys_unix_arm64.s b/sys_unix_arm64.s index f9c33348..da17fc3e 100644 --- a/sys_unix_arm64.s +++ b/sys_unix_arm64.s @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 The Ebitengine Authors -//go:build darwin || freebsd || linux || netbsd +//go:build darwin || freebsd || linux || netbsd || openbsd #include "textflag.h" #include "go_asm.h" diff --git a/syscall.go b/syscall.go index 5891b7c4..f2096485 100644 --- a/syscall.go +++ b/syscall.go @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2022 The Ebitengine Authors -//go:build !386 && !arm && !ppc64le && (darwin || freebsd || linux || netbsd || windows) +//go:build !386 && !arm && !ppc64le && (darwin || freebsd || linux || netbsd || openbsd || windows) package purego diff --git a/syscall_32bit.go b/syscall_32bit.go index 00eb0173..f6e5ced5 100644 --- a/syscall_32bit.go +++ b/syscall_32bit.go @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2022 The Ebitengine Authors -//go:build (386 || arm) && (freebsd || linux || netbsd || windows) +//go:build (386 || arm) && (freebsd || linux || netbsd || openbsd || windows) package purego diff --git a/syscall_unix.go b/syscall_unix.go index d75366cb..093dcd92 100644 --- a/syscall_unix.go +++ b/syscall_unix.go @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2022 The Ebitengine Authors -//go:build darwin || freebsd || (linux && (386 || amd64 || arm || arm64 || loong64 || ppc64le || riscv64 || (s390x && (cgo || go1.27)))) || netbsd +//go:build darwin || freebsd || (linux && (386 || amd64 || arm || arm64 || loong64 || ppc64le || riscv64 || (s390x && (cgo || go1.27)))) || netbsd || openbsd package purego @@ -392,6 +392,12 @@ func callbackasmAddr(i int) uintptr { // On ARM, ARM64, Loong64, PPC64LE and RISCV64, each entry is a MOV instruction // followed by a branch instruction entrySize = 8 + if runtime.GOOS == "openbsd" && runtime.GOARCH == "arm64" { + // OpenBSD/arm64 enforces BTI, so every entry begins with its own + // `BTI c` landing pad: three instructions rather than two. Without + // it an indirect branch to any entry but the first raises SIGILL. + entrySize = 12 + } case "s390x": // On S390X, each entry is LGHI (4 bytes) + JG (6 bytes) entrySize = 10 diff --git a/wincallback.go b/wincallback.go index f6bc539e..db724f37 100644 --- a/wincallback.go +++ b/wincallback.go @@ -50,7 +50,7 @@ func genasmAmd64() { buf.WriteString(`// Code generated by wincallback.go using 'go generate'. DO NOT EDIT. -//go:build darwin || freebsd || linux || netbsd +//go:build darwin || freebsd || linux || netbsd || openbsd // runtime·callbackasm is called by external code to // execute Go implemented callback function. It is not @@ -105,7 +105,7 @@ func genasmArm64() { buf.WriteString(`// Code generated by wincallback.go using 'go generate'. DO NOT EDIT. -//go:build darwin || freebsd || linux || netbsd +//go:build darwin || freebsd || linux || netbsd || openbsd // External code calls into callbackasm at an offset corresponding // to the callback index. Callbackasm is a table of MOV and B instructions. @@ -133,7 +133,7 @@ func genasmLoong64() { buf.WriteString(`// Code generated by wincallback.go using 'go generate'. DO NOT EDIT. -//go:build darwin || freebsd || linux || netbsd +//go:build darwin || freebsd || linux || netbsd || openbsd // External code calls into callbackasm at an offset corresponding // to the callback index. Callbackasm is a table of MOVV and JMP instructions. @@ -189,7 +189,7 @@ func genasmRiscv64() { buf.WriteString(`// Code generated by wincallback.go using 'go generate'. DO NOT EDIT. -//go:build darwin || freebsd || linux || netbsd +//go:build darwin || freebsd || linux || netbsd || openbsd // External code calls into callbackasm at an offset corresponding // to the callback index. Callbackasm is a table of MOV and JMP instructions. diff --git a/zcallback_amd64.s b/zcallback_amd64.s index b2da0225..eb022a47 100644 --- a/zcallback_amd64.s +++ b/zcallback_amd64.s @@ -1,6 +1,6 @@ // Code generated by wincallback.go using 'go generate'. DO NOT EDIT. -//go:build darwin || freebsd || linux || netbsd +//go:build darwin || freebsd || linux || netbsd || openbsd // runtime·callbackasm is called by external code to // execute Go implemented callback function. It is not diff --git a/zcallback_loong64.s b/zcallback_loong64.s index c5dcd48e..ad409ca2 100644 --- a/zcallback_loong64.s +++ b/zcallback_loong64.s @@ -1,6 +1,6 @@ // Code generated by wincallback.go using 'go generate'. DO NOT EDIT. -//go:build darwin || freebsd || linux || netbsd +//go:build darwin || freebsd || linux || netbsd || openbsd // External code calls into callbackasm at an offset corresponding // to the callback index. Callbackasm is a table of MOVV and JMP instructions. diff --git a/zcallback_openbsd_arm64.s b/zcallback_openbsd_arm64.s new file mode 100644 index 00000000..affc5a2a --- /dev/null +++ b/zcallback_openbsd_arm64.s @@ -0,0 +1,6022 @@ +// Code generated by wincallback.go using 'go generate'. DO NOT EDIT. + +//go:build openbsd + +// OpenBSD/arm64 enforces BTI (Branch Target Identification): an indirect +// branch to an instruction that is not a landing pad raises SIGILL. +// +// The shared zcallback_arm64.s is a table of MOV+B pairs, and callbackasmAddr +// computes entry i as base+i*8. That cannot work here. The assembler emits a +// `BTI c` of its own at the TEXT symbol, so base IS a landing pad and entry 0 +// works by accident; entry 1 lands on entry 0's B, which is not a landing pad, +// and dies. Measured: callback 0 at 0xc3640 returns, callback 1 at 0xc3648 +// raises SIGILL, and objdump shows a JMP at that address. +// +// So every entry gets a landing pad and is three instructions. The FIRST entry +// deliberately has none written for it: the assembler's own `BTI c` at the +// symbol serves as it, and writing a second would make entry 0 sixteen bytes +// while the rest are twelve -- which is what the first attempt at this file +// did, and it moved the fault from entry 1 to entry 1 four bytes along. +#include "textflag.h" + +TEXT callbackasm(SB), NOSPLIT|NOFRAME, $0 + // entry 0 -- the landing pad is the one the assembler puts at the symbol + MOVD $0, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1, R12 + B callbackasm1(SB) + HINT $38 + MOVD $2, R12 + B callbackasm1(SB) + HINT $38 + MOVD $3, R12 + B callbackasm1(SB) + HINT $38 + MOVD $4, R12 + B callbackasm1(SB) + HINT $38 + MOVD $5, R12 + B callbackasm1(SB) + HINT $38 + MOVD $6, R12 + B callbackasm1(SB) + HINT $38 + MOVD $7, R12 + B callbackasm1(SB) + HINT $38 + MOVD $8, R12 + B callbackasm1(SB) + HINT $38 + MOVD $9, R12 + B callbackasm1(SB) + HINT $38 + MOVD $10, R12 + B callbackasm1(SB) + HINT $38 + MOVD $11, R12 + B callbackasm1(SB) + HINT $38 + MOVD $12, R12 + B callbackasm1(SB) + HINT $38 + MOVD $13, R12 + B callbackasm1(SB) + HINT $38 + MOVD $14, R12 + B callbackasm1(SB) + HINT $38 + MOVD $15, R12 + B callbackasm1(SB) + HINT $38 + MOVD $16, R12 + B callbackasm1(SB) + HINT $38 + MOVD $17, R12 + B callbackasm1(SB) + HINT $38 + MOVD $18, R12 + B callbackasm1(SB) + HINT $38 + MOVD $19, R12 + B callbackasm1(SB) + HINT $38 + MOVD $20, R12 + B callbackasm1(SB) + HINT $38 + MOVD $21, R12 + B callbackasm1(SB) + HINT $38 + MOVD $22, R12 + B callbackasm1(SB) + HINT $38 + MOVD $23, R12 + B callbackasm1(SB) + HINT $38 + MOVD $24, R12 + B callbackasm1(SB) + HINT $38 + MOVD $25, R12 + B callbackasm1(SB) + HINT $38 + MOVD $26, R12 + B callbackasm1(SB) + HINT $38 + MOVD $27, R12 + B callbackasm1(SB) + HINT $38 + MOVD $28, R12 + B callbackasm1(SB) + HINT $38 + MOVD $29, R12 + B callbackasm1(SB) + HINT $38 + MOVD $30, R12 + B callbackasm1(SB) + HINT $38 + MOVD $31, R12 + B callbackasm1(SB) + HINT $38 + MOVD $32, R12 + B callbackasm1(SB) + HINT $38 + MOVD $33, R12 + B callbackasm1(SB) + HINT $38 + MOVD $34, R12 + B callbackasm1(SB) + HINT $38 + MOVD $35, R12 + B callbackasm1(SB) + HINT $38 + MOVD $36, R12 + B callbackasm1(SB) + HINT $38 + MOVD $37, R12 + B callbackasm1(SB) + HINT $38 + MOVD $38, R12 + B callbackasm1(SB) + HINT $38 + MOVD $39, R12 + B callbackasm1(SB) + HINT $38 + MOVD $40, R12 + B callbackasm1(SB) + HINT $38 + MOVD $41, R12 + B callbackasm1(SB) + HINT $38 + MOVD $42, R12 + B callbackasm1(SB) + HINT $38 + MOVD $43, R12 + B callbackasm1(SB) + HINT $38 + MOVD $44, R12 + B callbackasm1(SB) + HINT $38 + MOVD $45, R12 + B callbackasm1(SB) + HINT $38 + MOVD $46, R12 + B callbackasm1(SB) + HINT $38 + MOVD $47, R12 + B callbackasm1(SB) + HINT $38 + MOVD $48, R12 + B callbackasm1(SB) + HINT $38 + MOVD $49, R12 + B callbackasm1(SB) + HINT $38 + MOVD $50, R12 + B callbackasm1(SB) + HINT $38 + MOVD $51, R12 + B callbackasm1(SB) + HINT $38 + MOVD $52, R12 + B callbackasm1(SB) + HINT $38 + MOVD $53, R12 + B callbackasm1(SB) + HINT $38 + MOVD $54, R12 + B callbackasm1(SB) + HINT $38 + MOVD $55, R12 + B callbackasm1(SB) + HINT $38 + MOVD $56, R12 + B callbackasm1(SB) + HINT $38 + MOVD $57, R12 + B callbackasm1(SB) + HINT $38 + MOVD $58, R12 + B callbackasm1(SB) + HINT $38 + MOVD $59, R12 + B callbackasm1(SB) + HINT $38 + MOVD $60, R12 + B callbackasm1(SB) + HINT $38 + MOVD $61, R12 + B callbackasm1(SB) + HINT $38 + MOVD $62, R12 + B callbackasm1(SB) + HINT $38 + MOVD $63, R12 + B callbackasm1(SB) + HINT $38 + MOVD $64, R12 + B callbackasm1(SB) + HINT $38 + MOVD $65, R12 + B callbackasm1(SB) + HINT $38 + MOVD $66, R12 + B callbackasm1(SB) + HINT $38 + MOVD $67, R12 + B callbackasm1(SB) + HINT $38 + MOVD $68, R12 + B callbackasm1(SB) + HINT $38 + MOVD $69, R12 + B callbackasm1(SB) + HINT $38 + MOVD $70, R12 + B callbackasm1(SB) + HINT $38 + MOVD $71, R12 + B callbackasm1(SB) + HINT $38 + MOVD $72, R12 + B callbackasm1(SB) + HINT $38 + MOVD $73, R12 + B callbackasm1(SB) + HINT $38 + MOVD $74, R12 + B callbackasm1(SB) + HINT $38 + MOVD $75, R12 + B callbackasm1(SB) + HINT $38 + MOVD $76, R12 + B callbackasm1(SB) + HINT $38 + MOVD $77, R12 + B callbackasm1(SB) + HINT $38 + MOVD $78, R12 + B callbackasm1(SB) + HINT $38 + MOVD $79, R12 + B callbackasm1(SB) + HINT $38 + MOVD $80, R12 + B callbackasm1(SB) + HINT $38 + MOVD $81, R12 + B callbackasm1(SB) + HINT $38 + MOVD $82, R12 + B callbackasm1(SB) + HINT $38 + MOVD $83, R12 + B callbackasm1(SB) + HINT $38 + MOVD $84, R12 + B callbackasm1(SB) + HINT $38 + MOVD $85, R12 + B callbackasm1(SB) + HINT $38 + MOVD $86, R12 + B callbackasm1(SB) + HINT $38 + MOVD $87, R12 + B callbackasm1(SB) + HINT $38 + MOVD $88, R12 + B callbackasm1(SB) + HINT $38 + MOVD $89, R12 + B callbackasm1(SB) + HINT $38 + MOVD $90, R12 + B callbackasm1(SB) + HINT $38 + MOVD $91, R12 + B callbackasm1(SB) + HINT $38 + MOVD $92, R12 + B callbackasm1(SB) + HINT $38 + MOVD $93, R12 + B callbackasm1(SB) + HINT $38 + MOVD $94, R12 + B callbackasm1(SB) + HINT $38 + MOVD $95, R12 + B callbackasm1(SB) + HINT $38 + MOVD $96, R12 + B callbackasm1(SB) + HINT $38 + MOVD $97, R12 + B callbackasm1(SB) + HINT $38 + MOVD $98, R12 + B callbackasm1(SB) + HINT $38 + MOVD $99, R12 + B callbackasm1(SB) + HINT $38 + MOVD $100, R12 + B callbackasm1(SB) + HINT $38 + MOVD $101, R12 + B callbackasm1(SB) + HINT $38 + MOVD $102, R12 + B callbackasm1(SB) + HINT $38 + MOVD $103, R12 + B callbackasm1(SB) + HINT $38 + MOVD $104, R12 + B callbackasm1(SB) + HINT $38 + MOVD $105, R12 + B callbackasm1(SB) + HINT $38 + MOVD $106, R12 + B callbackasm1(SB) + HINT $38 + MOVD $107, R12 + B callbackasm1(SB) + HINT $38 + MOVD $108, R12 + B callbackasm1(SB) + HINT $38 + MOVD $109, R12 + B callbackasm1(SB) + HINT $38 + MOVD $110, R12 + B callbackasm1(SB) + HINT $38 + MOVD $111, R12 + B callbackasm1(SB) + HINT $38 + MOVD $112, R12 + B callbackasm1(SB) + HINT $38 + MOVD $113, R12 + B callbackasm1(SB) + HINT $38 + MOVD $114, R12 + B callbackasm1(SB) + HINT $38 + MOVD $115, R12 + B callbackasm1(SB) + HINT $38 + MOVD $116, R12 + B callbackasm1(SB) + HINT $38 + MOVD $117, R12 + B callbackasm1(SB) + HINT $38 + MOVD $118, R12 + B callbackasm1(SB) + HINT $38 + MOVD $119, R12 + B callbackasm1(SB) + HINT $38 + MOVD $120, R12 + B callbackasm1(SB) + HINT $38 + MOVD $121, R12 + B callbackasm1(SB) + HINT $38 + MOVD $122, R12 + B callbackasm1(SB) + HINT $38 + MOVD $123, R12 + B callbackasm1(SB) + HINT $38 + MOVD $124, R12 + B callbackasm1(SB) + HINT $38 + MOVD $125, R12 + B callbackasm1(SB) + HINT $38 + MOVD $126, R12 + B callbackasm1(SB) + HINT $38 + MOVD $127, R12 + B callbackasm1(SB) + HINT $38 + MOVD $128, R12 + B callbackasm1(SB) + HINT $38 + MOVD $129, R12 + B callbackasm1(SB) + HINT $38 + MOVD $130, R12 + B callbackasm1(SB) + HINT $38 + MOVD $131, R12 + B callbackasm1(SB) + HINT $38 + MOVD $132, R12 + B callbackasm1(SB) + HINT $38 + MOVD $133, R12 + B callbackasm1(SB) + HINT $38 + MOVD $134, R12 + B callbackasm1(SB) + HINT $38 + MOVD $135, R12 + B callbackasm1(SB) + HINT $38 + MOVD $136, R12 + B callbackasm1(SB) + HINT $38 + MOVD $137, R12 + B callbackasm1(SB) + HINT $38 + MOVD $138, R12 + B callbackasm1(SB) + HINT $38 + MOVD $139, R12 + B callbackasm1(SB) + HINT $38 + MOVD $140, R12 + B callbackasm1(SB) + HINT $38 + MOVD $141, R12 + B callbackasm1(SB) + HINT $38 + MOVD $142, R12 + B callbackasm1(SB) + HINT $38 + MOVD $143, R12 + B callbackasm1(SB) + HINT $38 + MOVD $144, R12 + B callbackasm1(SB) + HINT $38 + MOVD $145, R12 + B callbackasm1(SB) + HINT $38 + MOVD $146, R12 + B callbackasm1(SB) + HINT $38 + MOVD $147, R12 + B callbackasm1(SB) + HINT $38 + MOVD $148, R12 + B callbackasm1(SB) + HINT $38 + MOVD $149, R12 + B callbackasm1(SB) + HINT $38 + MOVD $150, R12 + B callbackasm1(SB) + HINT $38 + MOVD $151, R12 + B callbackasm1(SB) + HINT $38 + MOVD $152, R12 + B callbackasm1(SB) + HINT $38 + MOVD $153, R12 + B callbackasm1(SB) + HINT $38 + MOVD $154, R12 + B callbackasm1(SB) + HINT $38 + MOVD $155, R12 + B callbackasm1(SB) + HINT $38 + MOVD $156, R12 + B callbackasm1(SB) + HINT $38 + MOVD $157, R12 + B callbackasm1(SB) + HINT $38 + MOVD $158, R12 + B callbackasm1(SB) + HINT $38 + MOVD $159, R12 + B callbackasm1(SB) + HINT $38 + MOVD $160, R12 + B callbackasm1(SB) + HINT $38 + MOVD $161, R12 + B callbackasm1(SB) + HINT $38 + MOVD $162, R12 + B callbackasm1(SB) + HINT $38 + MOVD $163, R12 + B callbackasm1(SB) + HINT $38 + MOVD $164, R12 + B callbackasm1(SB) + HINT $38 + MOVD $165, R12 + B callbackasm1(SB) + HINT $38 + MOVD $166, R12 + B callbackasm1(SB) + HINT $38 + MOVD $167, R12 + B callbackasm1(SB) + HINT $38 + MOVD $168, R12 + B callbackasm1(SB) + HINT $38 + MOVD $169, R12 + B callbackasm1(SB) + HINT $38 + MOVD $170, R12 + B callbackasm1(SB) + HINT $38 + MOVD $171, R12 + B callbackasm1(SB) + HINT $38 + MOVD $172, R12 + B callbackasm1(SB) + HINT $38 + MOVD $173, R12 + B callbackasm1(SB) + HINT $38 + MOVD $174, R12 + B callbackasm1(SB) + HINT $38 + MOVD $175, R12 + B callbackasm1(SB) + HINT $38 + MOVD $176, R12 + B callbackasm1(SB) + HINT $38 + MOVD $177, R12 + B callbackasm1(SB) + HINT $38 + MOVD $178, R12 + B callbackasm1(SB) + HINT $38 + MOVD $179, R12 + B callbackasm1(SB) + HINT $38 + MOVD $180, R12 + B callbackasm1(SB) + HINT $38 + MOVD $181, R12 + B callbackasm1(SB) + HINT $38 + MOVD $182, R12 + B callbackasm1(SB) + HINT $38 + MOVD $183, R12 + B callbackasm1(SB) + HINT $38 + MOVD $184, R12 + B callbackasm1(SB) + HINT $38 + MOVD $185, R12 + B callbackasm1(SB) + HINT $38 + MOVD $186, R12 + B callbackasm1(SB) + HINT $38 + MOVD $187, R12 + B callbackasm1(SB) + HINT $38 + MOVD $188, R12 + B callbackasm1(SB) + HINT $38 + MOVD $189, R12 + B callbackasm1(SB) + HINT $38 + MOVD $190, R12 + B callbackasm1(SB) + HINT $38 + MOVD $191, R12 + B callbackasm1(SB) + HINT $38 + MOVD $192, R12 + B callbackasm1(SB) + HINT $38 + MOVD $193, R12 + B callbackasm1(SB) + HINT $38 + MOVD $194, R12 + B callbackasm1(SB) + HINT $38 + MOVD $195, R12 + B callbackasm1(SB) + HINT $38 + MOVD $196, R12 + B callbackasm1(SB) + HINT $38 + MOVD $197, R12 + B callbackasm1(SB) + HINT $38 + MOVD $198, R12 + B callbackasm1(SB) + HINT $38 + MOVD $199, R12 + B callbackasm1(SB) + HINT $38 + MOVD $200, R12 + B callbackasm1(SB) + HINT $38 + MOVD $201, R12 + B callbackasm1(SB) + HINT $38 + MOVD $202, R12 + B callbackasm1(SB) + HINT $38 + MOVD $203, R12 + B callbackasm1(SB) + HINT $38 + MOVD $204, R12 + B callbackasm1(SB) + HINT $38 + MOVD $205, R12 + B callbackasm1(SB) + HINT $38 + MOVD $206, R12 + B callbackasm1(SB) + HINT $38 + MOVD $207, R12 + B callbackasm1(SB) + HINT $38 + MOVD $208, R12 + B callbackasm1(SB) + HINT $38 + MOVD $209, R12 + B callbackasm1(SB) + HINT $38 + MOVD $210, R12 + B callbackasm1(SB) + HINT $38 + MOVD $211, R12 + B callbackasm1(SB) + HINT $38 + MOVD $212, R12 + B callbackasm1(SB) + HINT $38 + MOVD $213, R12 + B callbackasm1(SB) + HINT $38 + MOVD $214, R12 + B callbackasm1(SB) + HINT $38 + MOVD $215, R12 + B callbackasm1(SB) + HINT $38 + MOVD $216, R12 + B callbackasm1(SB) + HINT $38 + MOVD $217, R12 + B callbackasm1(SB) + HINT $38 + MOVD $218, R12 + B callbackasm1(SB) + HINT $38 + MOVD $219, R12 + B callbackasm1(SB) + HINT $38 + MOVD $220, R12 + B callbackasm1(SB) + HINT $38 + MOVD $221, R12 + B callbackasm1(SB) + HINT $38 + MOVD $222, R12 + B callbackasm1(SB) + HINT $38 + MOVD $223, R12 + B callbackasm1(SB) + HINT $38 + MOVD $224, R12 + B callbackasm1(SB) + HINT $38 + MOVD $225, R12 + B callbackasm1(SB) + HINT $38 + MOVD $226, R12 + B callbackasm1(SB) + HINT $38 + MOVD $227, R12 + B callbackasm1(SB) + HINT $38 + MOVD $228, R12 + B callbackasm1(SB) + HINT $38 + MOVD $229, R12 + B callbackasm1(SB) + HINT $38 + MOVD $230, R12 + B callbackasm1(SB) + HINT $38 + MOVD $231, R12 + B callbackasm1(SB) + HINT $38 + MOVD $232, R12 + B callbackasm1(SB) + HINT $38 + MOVD $233, R12 + B callbackasm1(SB) + HINT $38 + MOVD $234, R12 + B callbackasm1(SB) + HINT $38 + MOVD $235, R12 + B callbackasm1(SB) + HINT $38 + MOVD $236, R12 + B callbackasm1(SB) + HINT $38 + MOVD $237, R12 + B callbackasm1(SB) + HINT $38 + MOVD $238, R12 + B callbackasm1(SB) + HINT $38 + MOVD $239, R12 + B callbackasm1(SB) + HINT $38 + MOVD $240, R12 + B callbackasm1(SB) + HINT $38 + MOVD $241, R12 + B callbackasm1(SB) + HINT $38 + MOVD $242, R12 + B callbackasm1(SB) + HINT $38 + MOVD $243, R12 + B callbackasm1(SB) + HINT $38 + MOVD $244, R12 + B callbackasm1(SB) + HINT $38 + MOVD $245, R12 + B callbackasm1(SB) + HINT $38 + MOVD $246, R12 + B callbackasm1(SB) + HINT $38 + MOVD $247, R12 + B callbackasm1(SB) + HINT $38 + MOVD $248, R12 + B callbackasm1(SB) + HINT $38 + MOVD $249, R12 + B callbackasm1(SB) + HINT $38 + MOVD $250, R12 + B callbackasm1(SB) + HINT $38 + MOVD $251, R12 + B callbackasm1(SB) + HINT $38 + MOVD $252, R12 + B callbackasm1(SB) + HINT $38 + MOVD $253, R12 + B callbackasm1(SB) + HINT $38 + MOVD $254, R12 + B callbackasm1(SB) + HINT $38 + MOVD $255, R12 + B callbackasm1(SB) + HINT $38 + MOVD $256, R12 + B callbackasm1(SB) + HINT $38 + MOVD $257, R12 + B callbackasm1(SB) + HINT $38 + MOVD $258, R12 + B callbackasm1(SB) + HINT $38 + MOVD $259, R12 + B callbackasm1(SB) + HINT $38 + MOVD $260, R12 + B callbackasm1(SB) + HINT $38 + MOVD $261, R12 + B callbackasm1(SB) + HINT $38 + MOVD $262, R12 + B callbackasm1(SB) + HINT $38 + MOVD $263, R12 + B callbackasm1(SB) + HINT $38 + MOVD $264, R12 + B callbackasm1(SB) + HINT $38 + MOVD $265, R12 + B callbackasm1(SB) + HINT $38 + MOVD $266, R12 + B callbackasm1(SB) + HINT $38 + MOVD $267, R12 + B callbackasm1(SB) + HINT $38 + MOVD $268, R12 + B callbackasm1(SB) + HINT $38 + MOVD $269, R12 + B callbackasm1(SB) + HINT $38 + MOVD $270, R12 + B callbackasm1(SB) + HINT $38 + MOVD $271, R12 + B callbackasm1(SB) + HINT $38 + MOVD $272, R12 + B callbackasm1(SB) + HINT $38 + MOVD $273, R12 + B callbackasm1(SB) + HINT $38 + MOVD $274, R12 + B callbackasm1(SB) + HINT $38 + MOVD $275, R12 + B callbackasm1(SB) + HINT $38 + MOVD $276, R12 + B callbackasm1(SB) + HINT $38 + MOVD $277, R12 + B callbackasm1(SB) + HINT $38 + MOVD $278, R12 + B callbackasm1(SB) + HINT $38 + MOVD $279, R12 + B callbackasm1(SB) + HINT $38 + MOVD $280, R12 + B callbackasm1(SB) + HINT $38 + MOVD $281, R12 + B callbackasm1(SB) + HINT $38 + MOVD $282, R12 + B callbackasm1(SB) + HINT $38 + MOVD $283, R12 + B callbackasm1(SB) + HINT $38 + MOVD $284, R12 + B callbackasm1(SB) + HINT $38 + MOVD $285, R12 + B callbackasm1(SB) + HINT $38 + MOVD $286, R12 + B callbackasm1(SB) + HINT $38 + MOVD $287, R12 + B callbackasm1(SB) + HINT $38 + MOVD $288, R12 + B callbackasm1(SB) + HINT $38 + MOVD $289, R12 + B callbackasm1(SB) + HINT $38 + MOVD $290, R12 + B callbackasm1(SB) + HINT $38 + MOVD $291, R12 + B callbackasm1(SB) + HINT $38 + MOVD $292, R12 + B callbackasm1(SB) + HINT $38 + MOVD $293, R12 + B callbackasm1(SB) + HINT $38 + MOVD $294, R12 + B callbackasm1(SB) + HINT $38 + MOVD $295, R12 + B callbackasm1(SB) + HINT $38 + MOVD $296, R12 + B callbackasm1(SB) + HINT $38 + MOVD $297, R12 + B callbackasm1(SB) + HINT $38 + MOVD $298, R12 + B callbackasm1(SB) + HINT $38 + MOVD $299, R12 + B callbackasm1(SB) + HINT $38 + MOVD $300, R12 + B callbackasm1(SB) + HINT $38 + MOVD $301, R12 + B callbackasm1(SB) + HINT $38 + MOVD $302, R12 + B callbackasm1(SB) + HINT $38 + MOVD $303, R12 + B callbackasm1(SB) + HINT $38 + MOVD $304, R12 + B callbackasm1(SB) + HINT $38 + MOVD $305, R12 + B callbackasm1(SB) + HINT $38 + MOVD $306, R12 + B callbackasm1(SB) + HINT $38 + MOVD $307, R12 + B callbackasm1(SB) + HINT $38 + MOVD $308, R12 + B callbackasm1(SB) + HINT $38 + MOVD $309, R12 + B callbackasm1(SB) + HINT $38 + MOVD $310, R12 + B callbackasm1(SB) + HINT $38 + MOVD $311, R12 + B callbackasm1(SB) + HINT $38 + MOVD $312, R12 + B callbackasm1(SB) + HINT $38 + MOVD $313, R12 + B callbackasm1(SB) + HINT $38 + MOVD $314, R12 + B callbackasm1(SB) + HINT $38 + MOVD $315, R12 + B callbackasm1(SB) + HINT $38 + MOVD $316, R12 + B callbackasm1(SB) + HINT $38 + MOVD $317, R12 + B callbackasm1(SB) + HINT $38 + MOVD $318, R12 + B callbackasm1(SB) + HINT $38 + MOVD $319, R12 + B callbackasm1(SB) + HINT $38 + MOVD $320, R12 + B callbackasm1(SB) + HINT $38 + MOVD $321, R12 + B callbackasm1(SB) + HINT $38 + MOVD $322, R12 + B callbackasm1(SB) + HINT $38 + MOVD $323, R12 + B callbackasm1(SB) + HINT $38 + MOVD $324, R12 + B callbackasm1(SB) + HINT $38 + MOVD $325, R12 + B callbackasm1(SB) + HINT $38 + MOVD $326, R12 + B callbackasm1(SB) + HINT $38 + MOVD $327, R12 + B callbackasm1(SB) + HINT $38 + MOVD $328, R12 + B callbackasm1(SB) + HINT $38 + MOVD $329, R12 + B callbackasm1(SB) + HINT $38 + MOVD $330, R12 + B callbackasm1(SB) + HINT $38 + MOVD $331, R12 + B callbackasm1(SB) + HINT $38 + MOVD $332, R12 + B callbackasm1(SB) + HINT $38 + MOVD $333, R12 + B callbackasm1(SB) + HINT $38 + MOVD $334, R12 + B callbackasm1(SB) + HINT $38 + MOVD $335, R12 + B callbackasm1(SB) + HINT $38 + MOVD $336, R12 + B callbackasm1(SB) + HINT $38 + MOVD $337, R12 + B callbackasm1(SB) + HINT $38 + MOVD $338, R12 + B callbackasm1(SB) + HINT $38 + MOVD $339, R12 + B callbackasm1(SB) + HINT $38 + MOVD $340, R12 + B callbackasm1(SB) + HINT $38 + MOVD $341, R12 + B callbackasm1(SB) + HINT $38 + MOVD $342, R12 + B callbackasm1(SB) + HINT $38 + MOVD $343, R12 + B callbackasm1(SB) + HINT $38 + MOVD $344, R12 + B callbackasm1(SB) + HINT $38 + MOVD $345, R12 + B callbackasm1(SB) + HINT $38 + MOVD $346, R12 + B callbackasm1(SB) + HINT $38 + MOVD $347, R12 + B callbackasm1(SB) + HINT $38 + MOVD $348, R12 + B callbackasm1(SB) + HINT $38 + MOVD $349, R12 + B callbackasm1(SB) + HINT $38 + MOVD $350, R12 + B callbackasm1(SB) + HINT $38 + MOVD $351, R12 + B callbackasm1(SB) + HINT $38 + MOVD $352, R12 + B callbackasm1(SB) + HINT $38 + MOVD $353, R12 + B callbackasm1(SB) + HINT $38 + MOVD $354, R12 + B callbackasm1(SB) + HINT $38 + MOVD $355, R12 + B callbackasm1(SB) + HINT $38 + MOVD $356, R12 + B callbackasm1(SB) + HINT $38 + MOVD $357, R12 + B callbackasm1(SB) + HINT $38 + MOVD $358, R12 + B callbackasm1(SB) + HINT $38 + MOVD $359, R12 + B callbackasm1(SB) + HINT $38 + MOVD $360, R12 + B callbackasm1(SB) + HINT $38 + MOVD $361, R12 + B callbackasm1(SB) + HINT $38 + MOVD $362, R12 + B callbackasm1(SB) + HINT $38 + MOVD $363, R12 + B callbackasm1(SB) + HINT $38 + MOVD $364, R12 + B callbackasm1(SB) + HINT $38 + MOVD $365, R12 + B callbackasm1(SB) + HINT $38 + MOVD $366, R12 + B callbackasm1(SB) + HINT $38 + MOVD $367, R12 + B callbackasm1(SB) + HINT $38 + MOVD $368, R12 + B callbackasm1(SB) + HINT $38 + MOVD $369, R12 + B callbackasm1(SB) + HINT $38 + MOVD $370, R12 + B callbackasm1(SB) + HINT $38 + MOVD $371, R12 + B callbackasm1(SB) + HINT $38 + MOVD $372, R12 + B callbackasm1(SB) + HINT $38 + MOVD $373, R12 + B callbackasm1(SB) + HINT $38 + MOVD $374, R12 + B callbackasm1(SB) + HINT $38 + MOVD $375, R12 + B callbackasm1(SB) + HINT $38 + MOVD $376, R12 + B callbackasm1(SB) + HINT $38 + MOVD $377, R12 + B callbackasm1(SB) + HINT $38 + MOVD $378, R12 + B callbackasm1(SB) + HINT $38 + MOVD $379, R12 + B callbackasm1(SB) + HINT $38 + MOVD $380, R12 + B callbackasm1(SB) + HINT $38 + MOVD $381, R12 + B callbackasm1(SB) + HINT $38 + MOVD $382, R12 + B callbackasm1(SB) + HINT $38 + MOVD $383, R12 + B callbackasm1(SB) + HINT $38 + MOVD $384, R12 + B callbackasm1(SB) + HINT $38 + MOVD $385, R12 + B callbackasm1(SB) + HINT $38 + MOVD $386, R12 + B callbackasm1(SB) + HINT $38 + MOVD $387, R12 + B callbackasm1(SB) + HINT $38 + MOVD $388, R12 + B callbackasm1(SB) + HINT $38 + MOVD $389, R12 + B callbackasm1(SB) + HINT $38 + MOVD $390, R12 + B callbackasm1(SB) + HINT $38 + MOVD $391, R12 + B callbackasm1(SB) + HINT $38 + MOVD $392, R12 + B callbackasm1(SB) + HINT $38 + MOVD $393, R12 + B callbackasm1(SB) + HINT $38 + MOVD $394, R12 + B callbackasm1(SB) + HINT $38 + MOVD $395, R12 + B callbackasm1(SB) + HINT $38 + MOVD $396, R12 + B callbackasm1(SB) + HINT $38 + MOVD $397, R12 + B callbackasm1(SB) + HINT $38 + MOVD $398, R12 + B callbackasm1(SB) + HINT $38 + MOVD $399, R12 + B callbackasm1(SB) + HINT $38 + MOVD $400, R12 + B callbackasm1(SB) + HINT $38 + MOVD $401, R12 + B callbackasm1(SB) + HINT $38 + MOVD $402, R12 + B callbackasm1(SB) + HINT $38 + MOVD $403, R12 + B callbackasm1(SB) + HINT $38 + MOVD $404, R12 + B callbackasm1(SB) + HINT $38 + MOVD $405, R12 + B callbackasm1(SB) + HINT $38 + MOVD $406, R12 + B callbackasm1(SB) + HINT $38 + MOVD $407, R12 + B callbackasm1(SB) + HINT $38 + MOVD $408, R12 + B callbackasm1(SB) + HINT $38 + MOVD $409, R12 + B callbackasm1(SB) + HINT $38 + MOVD $410, R12 + B callbackasm1(SB) + HINT $38 + MOVD $411, R12 + B callbackasm1(SB) + HINT $38 + MOVD $412, R12 + B callbackasm1(SB) + HINT $38 + MOVD $413, R12 + B callbackasm1(SB) + HINT $38 + MOVD $414, R12 + B callbackasm1(SB) + HINT $38 + MOVD $415, R12 + B callbackasm1(SB) + HINT $38 + MOVD $416, R12 + B callbackasm1(SB) + HINT $38 + MOVD $417, R12 + B callbackasm1(SB) + HINT $38 + MOVD $418, R12 + B callbackasm1(SB) + HINT $38 + MOVD $419, R12 + B callbackasm1(SB) + HINT $38 + MOVD $420, R12 + B callbackasm1(SB) + HINT $38 + MOVD $421, R12 + B callbackasm1(SB) + HINT $38 + MOVD $422, R12 + B callbackasm1(SB) + HINT $38 + MOVD $423, R12 + B callbackasm1(SB) + HINT $38 + MOVD $424, R12 + B callbackasm1(SB) + HINT $38 + MOVD $425, R12 + B callbackasm1(SB) + HINT $38 + MOVD $426, R12 + B callbackasm1(SB) + HINT $38 + MOVD $427, R12 + B callbackasm1(SB) + HINT $38 + MOVD $428, R12 + B callbackasm1(SB) + HINT $38 + MOVD $429, R12 + B callbackasm1(SB) + HINT $38 + MOVD $430, R12 + B callbackasm1(SB) + HINT $38 + MOVD $431, R12 + B callbackasm1(SB) + HINT $38 + MOVD $432, R12 + B callbackasm1(SB) + HINT $38 + MOVD $433, R12 + B callbackasm1(SB) + HINT $38 + MOVD $434, R12 + B callbackasm1(SB) + HINT $38 + MOVD $435, R12 + B callbackasm1(SB) + HINT $38 + MOVD $436, R12 + B callbackasm1(SB) + HINT $38 + MOVD $437, R12 + B callbackasm1(SB) + HINT $38 + MOVD $438, R12 + B callbackasm1(SB) + HINT $38 + MOVD $439, R12 + B callbackasm1(SB) + HINT $38 + MOVD $440, R12 + B callbackasm1(SB) + HINT $38 + MOVD $441, R12 + B callbackasm1(SB) + HINT $38 + MOVD $442, R12 + B callbackasm1(SB) + HINT $38 + MOVD $443, R12 + B callbackasm1(SB) + HINT $38 + MOVD $444, R12 + B callbackasm1(SB) + HINT $38 + MOVD $445, R12 + B callbackasm1(SB) + HINT $38 + MOVD $446, R12 + B callbackasm1(SB) + HINT $38 + MOVD $447, R12 + B callbackasm1(SB) + HINT $38 + MOVD $448, R12 + B callbackasm1(SB) + HINT $38 + MOVD $449, R12 + B callbackasm1(SB) + HINT $38 + MOVD $450, R12 + B callbackasm1(SB) + HINT $38 + MOVD $451, R12 + B callbackasm1(SB) + HINT $38 + MOVD $452, R12 + B callbackasm1(SB) + HINT $38 + MOVD $453, R12 + B callbackasm1(SB) + HINT $38 + MOVD $454, R12 + B callbackasm1(SB) + HINT $38 + MOVD $455, R12 + B callbackasm1(SB) + HINT $38 + MOVD $456, R12 + B callbackasm1(SB) + HINT $38 + MOVD $457, R12 + B callbackasm1(SB) + HINT $38 + MOVD $458, R12 + B callbackasm1(SB) + HINT $38 + MOVD $459, R12 + B callbackasm1(SB) + HINT $38 + MOVD $460, R12 + B callbackasm1(SB) + HINT $38 + MOVD $461, R12 + B callbackasm1(SB) + HINT $38 + MOVD $462, R12 + B callbackasm1(SB) + HINT $38 + MOVD $463, R12 + B callbackasm1(SB) + HINT $38 + MOVD $464, R12 + B callbackasm1(SB) + HINT $38 + MOVD $465, R12 + B callbackasm1(SB) + HINT $38 + MOVD $466, R12 + B callbackasm1(SB) + HINT $38 + MOVD $467, R12 + B callbackasm1(SB) + HINT $38 + MOVD $468, R12 + B callbackasm1(SB) + HINT $38 + MOVD $469, R12 + B callbackasm1(SB) + HINT $38 + MOVD $470, R12 + B callbackasm1(SB) + HINT $38 + MOVD $471, R12 + B callbackasm1(SB) + HINT $38 + MOVD $472, R12 + B callbackasm1(SB) + HINT $38 + MOVD $473, R12 + B callbackasm1(SB) + HINT $38 + MOVD $474, R12 + B callbackasm1(SB) + HINT $38 + MOVD $475, R12 + B callbackasm1(SB) + HINT $38 + MOVD $476, R12 + B callbackasm1(SB) + HINT $38 + MOVD $477, R12 + B callbackasm1(SB) + HINT $38 + MOVD $478, R12 + B callbackasm1(SB) + HINT $38 + MOVD $479, R12 + B callbackasm1(SB) + HINT $38 + MOVD $480, R12 + B callbackasm1(SB) + HINT $38 + MOVD $481, R12 + B callbackasm1(SB) + HINT $38 + MOVD $482, R12 + B callbackasm1(SB) + HINT $38 + MOVD $483, R12 + B callbackasm1(SB) + HINT $38 + MOVD $484, R12 + B callbackasm1(SB) + HINT $38 + MOVD $485, R12 + B callbackasm1(SB) + HINT $38 + MOVD $486, R12 + B callbackasm1(SB) + HINT $38 + MOVD $487, R12 + B callbackasm1(SB) + HINT $38 + MOVD $488, R12 + B callbackasm1(SB) + HINT $38 + MOVD $489, R12 + B callbackasm1(SB) + HINT $38 + MOVD $490, R12 + B callbackasm1(SB) + HINT $38 + MOVD $491, R12 + B callbackasm1(SB) + HINT $38 + MOVD $492, R12 + B callbackasm1(SB) + HINT $38 + MOVD $493, R12 + B callbackasm1(SB) + HINT $38 + MOVD $494, R12 + B callbackasm1(SB) + HINT $38 + MOVD $495, R12 + B callbackasm1(SB) + HINT $38 + MOVD $496, R12 + B callbackasm1(SB) + HINT $38 + MOVD $497, R12 + B callbackasm1(SB) + HINT $38 + MOVD $498, R12 + B callbackasm1(SB) + HINT $38 + MOVD $499, R12 + B callbackasm1(SB) + HINT $38 + MOVD $500, R12 + B callbackasm1(SB) + HINT $38 + MOVD $501, R12 + B callbackasm1(SB) + HINT $38 + MOVD $502, R12 + B callbackasm1(SB) + HINT $38 + MOVD $503, R12 + B callbackasm1(SB) + HINT $38 + MOVD $504, R12 + B callbackasm1(SB) + HINT $38 + MOVD $505, R12 + B callbackasm1(SB) + HINT $38 + MOVD $506, R12 + B callbackasm1(SB) + HINT $38 + MOVD $507, R12 + B callbackasm1(SB) + HINT $38 + MOVD $508, R12 + B callbackasm1(SB) + HINT $38 + MOVD $509, R12 + B callbackasm1(SB) + HINT $38 + MOVD $510, R12 + B callbackasm1(SB) + HINT $38 + MOVD $511, R12 + B callbackasm1(SB) + HINT $38 + MOVD $512, R12 + B callbackasm1(SB) + HINT $38 + MOVD $513, R12 + B callbackasm1(SB) + HINT $38 + MOVD $514, R12 + B callbackasm1(SB) + HINT $38 + MOVD $515, R12 + B callbackasm1(SB) + HINT $38 + MOVD $516, R12 + B callbackasm1(SB) + HINT $38 + MOVD $517, R12 + B callbackasm1(SB) + HINT $38 + MOVD $518, R12 + B callbackasm1(SB) + HINT $38 + MOVD $519, R12 + B callbackasm1(SB) + HINT $38 + MOVD $520, R12 + B callbackasm1(SB) + HINT $38 + MOVD $521, R12 + B callbackasm1(SB) + HINT $38 + MOVD $522, R12 + B callbackasm1(SB) + HINT $38 + MOVD $523, R12 + B callbackasm1(SB) + HINT $38 + MOVD $524, R12 + B callbackasm1(SB) + HINT $38 + MOVD $525, R12 + B callbackasm1(SB) + HINT $38 + MOVD $526, R12 + B callbackasm1(SB) + HINT $38 + MOVD $527, R12 + B callbackasm1(SB) + HINT $38 + MOVD $528, R12 + B callbackasm1(SB) + HINT $38 + MOVD $529, R12 + B callbackasm1(SB) + HINT $38 + MOVD $530, R12 + B callbackasm1(SB) + HINT $38 + MOVD $531, R12 + B callbackasm1(SB) + HINT $38 + MOVD $532, R12 + B callbackasm1(SB) + HINT $38 + MOVD $533, R12 + B callbackasm1(SB) + HINT $38 + MOVD $534, R12 + B callbackasm1(SB) + HINT $38 + MOVD $535, R12 + B callbackasm1(SB) + HINT $38 + MOVD $536, R12 + B callbackasm1(SB) + HINT $38 + MOVD $537, R12 + B callbackasm1(SB) + HINT $38 + MOVD $538, R12 + B callbackasm1(SB) + HINT $38 + MOVD $539, R12 + B callbackasm1(SB) + HINT $38 + MOVD $540, R12 + B callbackasm1(SB) + HINT $38 + MOVD $541, R12 + B callbackasm1(SB) + HINT $38 + MOVD $542, R12 + B callbackasm1(SB) + HINT $38 + MOVD $543, R12 + B callbackasm1(SB) + HINT $38 + MOVD $544, R12 + B callbackasm1(SB) + HINT $38 + MOVD $545, R12 + B callbackasm1(SB) + HINT $38 + MOVD $546, R12 + B callbackasm1(SB) + HINT $38 + MOVD $547, R12 + B callbackasm1(SB) + HINT $38 + MOVD $548, R12 + B callbackasm1(SB) + HINT $38 + MOVD $549, R12 + B callbackasm1(SB) + HINT $38 + MOVD $550, R12 + B callbackasm1(SB) + HINT $38 + MOVD $551, R12 + B callbackasm1(SB) + HINT $38 + MOVD $552, R12 + B callbackasm1(SB) + HINT $38 + MOVD $553, R12 + B callbackasm1(SB) + HINT $38 + MOVD $554, R12 + B callbackasm1(SB) + HINT $38 + MOVD $555, R12 + B callbackasm1(SB) + HINT $38 + MOVD $556, R12 + B callbackasm1(SB) + HINT $38 + MOVD $557, R12 + B callbackasm1(SB) + HINT $38 + MOVD $558, R12 + B callbackasm1(SB) + HINT $38 + MOVD $559, R12 + B callbackasm1(SB) + HINT $38 + MOVD $560, R12 + B callbackasm1(SB) + HINT $38 + MOVD $561, R12 + B callbackasm1(SB) + HINT $38 + MOVD $562, R12 + B callbackasm1(SB) + HINT $38 + MOVD $563, R12 + B callbackasm1(SB) + HINT $38 + MOVD $564, R12 + B callbackasm1(SB) + HINT $38 + MOVD $565, R12 + B callbackasm1(SB) + HINT $38 + MOVD $566, R12 + B callbackasm1(SB) + HINT $38 + MOVD $567, R12 + B callbackasm1(SB) + HINT $38 + MOVD $568, R12 + B callbackasm1(SB) + HINT $38 + MOVD $569, R12 + B callbackasm1(SB) + HINT $38 + MOVD $570, R12 + B callbackasm1(SB) + HINT $38 + MOVD $571, R12 + B callbackasm1(SB) + HINT $38 + MOVD $572, R12 + B callbackasm1(SB) + HINT $38 + MOVD $573, R12 + B callbackasm1(SB) + HINT $38 + MOVD $574, R12 + B callbackasm1(SB) + HINT $38 + MOVD $575, R12 + B callbackasm1(SB) + HINT $38 + MOVD $576, R12 + B callbackasm1(SB) + HINT $38 + MOVD $577, R12 + B callbackasm1(SB) + HINT $38 + MOVD $578, R12 + B callbackasm1(SB) + HINT $38 + MOVD $579, R12 + B callbackasm1(SB) + HINT $38 + MOVD $580, R12 + B callbackasm1(SB) + HINT $38 + MOVD $581, R12 + B callbackasm1(SB) + HINT $38 + MOVD $582, R12 + B callbackasm1(SB) + HINT $38 + MOVD $583, R12 + B callbackasm1(SB) + HINT $38 + MOVD $584, R12 + B callbackasm1(SB) + HINT $38 + MOVD $585, R12 + B callbackasm1(SB) + HINT $38 + MOVD $586, R12 + B callbackasm1(SB) + HINT $38 + MOVD $587, R12 + B callbackasm1(SB) + HINT $38 + MOVD $588, R12 + B callbackasm1(SB) + HINT $38 + MOVD $589, R12 + B callbackasm1(SB) + HINT $38 + MOVD $590, R12 + B callbackasm1(SB) + HINT $38 + MOVD $591, R12 + B callbackasm1(SB) + HINT $38 + MOVD $592, R12 + B callbackasm1(SB) + HINT $38 + MOVD $593, R12 + B callbackasm1(SB) + HINT $38 + MOVD $594, R12 + B callbackasm1(SB) + HINT $38 + MOVD $595, R12 + B callbackasm1(SB) + HINT $38 + MOVD $596, R12 + B callbackasm1(SB) + HINT $38 + MOVD $597, R12 + B callbackasm1(SB) + HINT $38 + MOVD $598, R12 + B callbackasm1(SB) + HINT $38 + MOVD $599, R12 + B callbackasm1(SB) + HINT $38 + MOVD $600, R12 + B callbackasm1(SB) + HINT $38 + MOVD $601, R12 + B callbackasm1(SB) + HINT $38 + MOVD $602, R12 + B callbackasm1(SB) + HINT $38 + MOVD $603, R12 + B callbackasm1(SB) + HINT $38 + MOVD $604, R12 + B callbackasm1(SB) + HINT $38 + MOVD $605, R12 + B callbackasm1(SB) + HINT $38 + MOVD $606, R12 + B callbackasm1(SB) + HINT $38 + MOVD $607, R12 + B callbackasm1(SB) + HINT $38 + MOVD $608, R12 + B callbackasm1(SB) + HINT $38 + MOVD $609, R12 + B callbackasm1(SB) + HINT $38 + MOVD $610, R12 + B callbackasm1(SB) + HINT $38 + MOVD $611, R12 + B callbackasm1(SB) + HINT $38 + MOVD $612, R12 + B callbackasm1(SB) + HINT $38 + MOVD $613, R12 + B callbackasm1(SB) + HINT $38 + MOVD $614, R12 + B callbackasm1(SB) + HINT $38 + MOVD $615, R12 + B callbackasm1(SB) + HINT $38 + MOVD $616, R12 + B callbackasm1(SB) + HINT $38 + MOVD $617, R12 + B callbackasm1(SB) + HINT $38 + MOVD $618, R12 + B callbackasm1(SB) + HINT $38 + MOVD $619, R12 + B callbackasm1(SB) + HINT $38 + MOVD $620, R12 + B callbackasm1(SB) + HINT $38 + MOVD $621, R12 + B callbackasm1(SB) + HINT $38 + MOVD $622, R12 + B callbackasm1(SB) + HINT $38 + MOVD $623, R12 + B callbackasm1(SB) + HINT $38 + MOVD $624, R12 + B callbackasm1(SB) + HINT $38 + MOVD $625, R12 + B callbackasm1(SB) + HINT $38 + MOVD $626, R12 + B callbackasm1(SB) + HINT $38 + MOVD $627, R12 + B callbackasm1(SB) + HINT $38 + MOVD $628, R12 + B callbackasm1(SB) + HINT $38 + MOVD $629, R12 + B callbackasm1(SB) + HINT $38 + MOVD $630, R12 + B callbackasm1(SB) + HINT $38 + MOVD $631, R12 + B callbackasm1(SB) + HINT $38 + MOVD $632, R12 + B callbackasm1(SB) + HINT $38 + MOVD $633, R12 + B callbackasm1(SB) + HINT $38 + MOVD $634, R12 + B callbackasm1(SB) + HINT $38 + MOVD $635, R12 + B callbackasm1(SB) + HINT $38 + MOVD $636, R12 + B callbackasm1(SB) + HINT $38 + MOVD $637, R12 + B callbackasm1(SB) + HINT $38 + MOVD $638, R12 + B callbackasm1(SB) + HINT $38 + MOVD $639, R12 + B callbackasm1(SB) + HINT $38 + MOVD $640, R12 + B callbackasm1(SB) + HINT $38 + MOVD $641, R12 + B callbackasm1(SB) + HINT $38 + MOVD $642, R12 + B callbackasm1(SB) + HINT $38 + MOVD $643, R12 + B callbackasm1(SB) + HINT $38 + MOVD $644, R12 + B callbackasm1(SB) + HINT $38 + MOVD $645, R12 + B callbackasm1(SB) + HINT $38 + MOVD $646, R12 + B callbackasm1(SB) + HINT $38 + MOVD $647, R12 + B callbackasm1(SB) + HINT $38 + MOVD $648, R12 + B callbackasm1(SB) + HINT $38 + MOVD $649, R12 + B callbackasm1(SB) + HINT $38 + MOVD $650, R12 + B callbackasm1(SB) + HINT $38 + MOVD $651, R12 + B callbackasm1(SB) + HINT $38 + MOVD $652, R12 + B callbackasm1(SB) + HINT $38 + MOVD $653, R12 + B callbackasm1(SB) + HINT $38 + MOVD $654, R12 + B callbackasm1(SB) + HINT $38 + MOVD $655, R12 + B callbackasm1(SB) + HINT $38 + MOVD $656, R12 + B callbackasm1(SB) + HINT $38 + MOVD $657, R12 + B callbackasm1(SB) + HINT $38 + MOVD $658, R12 + B callbackasm1(SB) + HINT $38 + MOVD $659, R12 + B callbackasm1(SB) + HINT $38 + MOVD $660, R12 + B callbackasm1(SB) + HINT $38 + MOVD $661, R12 + B callbackasm1(SB) + HINT $38 + MOVD $662, R12 + B callbackasm1(SB) + HINT $38 + MOVD $663, R12 + B callbackasm1(SB) + HINT $38 + MOVD $664, R12 + B callbackasm1(SB) + HINT $38 + MOVD $665, R12 + B callbackasm1(SB) + HINT $38 + MOVD $666, R12 + B callbackasm1(SB) + HINT $38 + MOVD $667, R12 + B callbackasm1(SB) + HINT $38 + MOVD $668, R12 + B callbackasm1(SB) + HINT $38 + MOVD $669, R12 + B callbackasm1(SB) + HINT $38 + MOVD $670, R12 + B callbackasm1(SB) + HINT $38 + MOVD $671, R12 + B callbackasm1(SB) + HINT $38 + MOVD $672, R12 + B callbackasm1(SB) + HINT $38 + MOVD $673, R12 + B callbackasm1(SB) + HINT $38 + MOVD $674, R12 + B callbackasm1(SB) + HINT $38 + MOVD $675, R12 + B callbackasm1(SB) + HINT $38 + MOVD $676, R12 + B callbackasm1(SB) + HINT $38 + MOVD $677, R12 + B callbackasm1(SB) + HINT $38 + MOVD $678, R12 + B callbackasm1(SB) + HINT $38 + MOVD $679, R12 + B callbackasm1(SB) + HINT $38 + MOVD $680, R12 + B callbackasm1(SB) + HINT $38 + MOVD $681, R12 + B callbackasm1(SB) + HINT $38 + MOVD $682, R12 + B callbackasm1(SB) + HINT $38 + MOVD $683, R12 + B callbackasm1(SB) + HINT $38 + MOVD $684, R12 + B callbackasm1(SB) + HINT $38 + MOVD $685, R12 + B callbackasm1(SB) + HINT $38 + MOVD $686, R12 + B callbackasm1(SB) + HINT $38 + MOVD $687, R12 + B callbackasm1(SB) + HINT $38 + MOVD $688, R12 + B callbackasm1(SB) + HINT $38 + MOVD $689, R12 + B callbackasm1(SB) + HINT $38 + MOVD $690, R12 + B callbackasm1(SB) + HINT $38 + MOVD $691, R12 + B callbackasm1(SB) + HINT $38 + MOVD $692, R12 + B callbackasm1(SB) + HINT $38 + MOVD $693, R12 + B callbackasm1(SB) + HINT $38 + MOVD $694, R12 + B callbackasm1(SB) + HINT $38 + MOVD $695, R12 + B callbackasm1(SB) + HINT $38 + MOVD $696, R12 + B callbackasm1(SB) + HINT $38 + MOVD $697, R12 + B callbackasm1(SB) + HINT $38 + MOVD $698, R12 + B callbackasm1(SB) + HINT $38 + MOVD $699, R12 + B callbackasm1(SB) + HINT $38 + MOVD $700, R12 + B callbackasm1(SB) + HINT $38 + MOVD $701, R12 + B callbackasm1(SB) + HINT $38 + MOVD $702, R12 + B callbackasm1(SB) + HINT $38 + MOVD $703, R12 + B callbackasm1(SB) + HINT $38 + MOVD $704, R12 + B callbackasm1(SB) + HINT $38 + MOVD $705, R12 + B callbackasm1(SB) + HINT $38 + MOVD $706, R12 + B callbackasm1(SB) + HINT $38 + MOVD $707, R12 + B callbackasm1(SB) + HINT $38 + MOVD $708, R12 + B callbackasm1(SB) + HINT $38 + MOVD $709, R12 + B callbackasm1(SB) + HINT $38 + MOVD $710, R12 + B callbackasm1(SB) + HINT $38 + MOVD $711, R12 + B callbackasm1(SB) + HINT $38 + MOVD $712, R12 + B callbackasm1(SB) + HINT $38 + MOVD $713, R12 + B callbackasm1(SB) + HINT $38 + MOVD $714, R12 + B callbackasm1(SB) + HINT $38 + MOVD $715, R12 + B callbackasm1(SB) + HINT $38 + MOVD $716, R12 + B callbackasm1(SB) + HINT $38 + MOVD $717, R12 + B callbackasm1(SB) + HINT $38 + MOVD $718, R12 + B callbackasm1(SB) + HINT $38 + MOVD $719, R12 + B callbackasm1(SB) + HINT $38 + MOVD $720, R12 + B callbackasm1(SB) + HINT $38 + MOVD $721, R12 + B callbackasm1(SB) + HINT $38 + MOVD $722, R12 + B callbackasm1(SB) + HINT $38 + MOVD $723, R12 + B callbackasm1(SB) + HINT $38 + MOVD $724, R12 + B callbackasm1(SB) + HINT $38 + MOVD $725, R12 + B callbackasm1(SB) + HINT $38 + MOVD $726, R12 + B callbackasm1(SB) + HINT $38 + MOVD $727, R12 + B callbackasm1(SB) + HINT $38 + MOVD $728, R12 + B callbackasm1(SB) + HINT $38 + MOVD $729, R12 + B callbackasm1(SB) + HINT $38 + MOVD $730, R12 + B callbackasm1(SB) + HINT $38 + MOVD $731, R12 + B callbackasm1(SB) + HINT $38 + MOVD $732, R12 + B callbackasm1(SB) + HINT $38 + MOVD $733, R12 + B callbackasm1(SB) + HINT $38 + MOVD $734, R12 + B callbackasm1(SB) + HINT $38 + MOVD $735, R12 + B callbackasm1(SB) + HINT $38 + MOVD $736, R12 + B callbackasm1(SB) + HINT $38 + MOVD $737, R12 + B callbackasm1(SB) + HINT $38 + MOVD $738, R12 + B callbackasm1(SB) + HINT $38 + MOVD $739, R12 + B callbackasm1(SB) + HINT $38 + MOVD $740, R12 + B callbackasm1(SB) + HINT $38 + MOVD $741, R12 + B callbackasm1(SB) + HINT $38 + MOVD $742, R12 + B callbackasm1(SB) + HINT $38 + MOVD $743, R12 + B callbackasm1(SB) + HINT $38 + MOVD $744, R12 + B callbackasm1(SB) + HINT $38 + MOVD $745, R12 + B callbackasm1(SB) + HINT $38 + MOVD $746, R12 + B callbackasm1(SB) + HINT $38 + MOVD $747, R12 + B callbackasm1(SB) + HINT $38 + MOVD $748, R12 + B callbackasm1(SB) + HINT $38 + MOVD $749, R12 + B callbackasm1(SB) + HINT $38 + MOVD $750, R12 + B callbackasm1(SB) + HINT $38 + MOVD $751, R12 + B callbackasm1(SB) + HINT $38 + MOVD $752, R12 + B callbackasm1(SB) + HINT $38 + MOVD $753, R12 + B callbackasm1(SB) + HINT $38 + MOVD $754, R12 + B callbackasm1(SB) + HINT $38 + MOVD $755, R12 + B callbackasm1(SB) + HINT $38 + MOVD $756, R12 + B callbackasm1(SB) + HINT $38 + MOVD $757, R12 + B callbackasm1(SB) + HINT $38 + MOVD $758, R12 + B callbackasm1(SB) + HINT $38 + MOVD $759, R12 + B callbackasm1(SB) + HINT $38 + MOVD $760, R12 + B callbackasm1(SB) + HINT $38 + MOVD $761, R12 + B callbackasm1(SB) + HINT $38 + MOVD $762, R12 + B callbackasm1(SB) + HINT $38 + MOVD $763, R12 + B callbackasm1(SB) + HINT $38 + MOVD $764, R12 + B callbackasm1(SB) + HINT $38 + MOVD $765, R12 + B callbackasm1(SB) + HINT $38 + MOVD $766, R12 + B callbackasm1(SB) + HINT $38 + MOVD $767, R12 + B callbackasm1(SB) + HINT $38 + MOVD $768, R12 + B callbackasm1(SB) + HINT $38 + MOVD $769, R12 + B callbackasm1(SB) + HINT $38 + MOVD $770, R12 + B callbackasm1(SB) + HINT $38 + MOVD $771, R12 + B callbackasm1(SB) + HINT $38 + MOVD $772, R12 + B callbackasm1(SB) + HINT $38 + MOVD $773, R12 + B callbackasm1(SB) + HINT $38 + MOVD $774, R12 + B callbackasm1(SB) + HINT $38 + MOVD $775, R12 + B callbackasm1(SB) + HINT $38 + MOVD $776, R12 + B callbackasm1(SB) + HINT $38 + MOVD $777, R12 + B callbackasm1(SB) + HINT $38 + MOVD $778, R12 + B callbackasm1(SB) + HINT $38 + MOVD $779, R12 + B callbackasm1(SB) + HINT $38 + MOVD $780, R12 + B callbackasm1(SB) + HINT $38 + MOVD $781, R12 + B callbackasm1(SB) + HINT $38 + MOVD $782, R12 + B callbackasm1(SB) + HINT $38 + MOVD $783, R12 + B callbackasm1(SB) + HINT $38 + MOVD $784, R12 + B callbackasm1(SB) + HINT $38 + MOVD $785, R12 + B callbackasm1(SB) + HINT $38 + MOVD $786, R12 + B callbackasm1(SB) + HINT $38 + MOVD $787, R12 + B callbackasm1(SB) + HINT $38 + MOVD $788, R12 + B callbackasm1(SB) + HINT $38 + MOVD $789, R12 + B callbackasm1(SB) + HINT $38 + MOVD $790, R12 + B callbackasm1(SB) + HINT $38 + MOVD $791, R12 + B callbackasm1(SB) + HINT $38 + MOVD $792, R12 + B callbackasm1(SB) + HINT $38 + MOVD $793, R12 + B callbackasm1(SB) + HINT $38 + MOVD $794, R12 + B callbackasm1(SB) + HINT $38 + MOVD $795, R12 + B callbackasm1(SB) + HINT $38 + MOVD $796, R12 + B callbackasm1(SB) + HINT $38 + MOVD $797, R12 + B callbackasm1(SB) + HINT $38 + MOVD $798, R12 + B callbackasm1(SB) + HINT $38 + MOVD $799, R12 + B callbackasm1(SB) + HINT $38 + MOVD $800, R12 + B callbackasm1(SB) + HINT $38 + MOVD $801, R12 + B callbackasm1(SB) + HINT $38 + MOVD $802, R12 + B callbackasm1(SB) + HINT $38 + MOVD $803, R12 + B callbackasm1(SB) + HINT $38 + MOVD $804, R12 + B callbackasm1(SB) + HINT $38 + MOVD $805, R12 + B callbackasm1(SB) + HINT $38 + MOVD $806, R12 + B callbackasm1(SB) + HINT $38 + MOVD $807, R12 + B callbackasm1(SB) + HINT $38 + MOVD $808, R12 + B callbackasm1(SB) + HINT $38 + MOVD $809, R12 + B callbackasm1(SB) + HINT $38 + MOVD $810, R12 + B callbackasm1(SB) + HINT $38 + MOVD $811, R12 + B callbackasm1(SB) + HINT $38 + MOVD $812, R12 + B callbackasm1(SB) + HINT $38 + MOVD $813, R12 + B callbackasm1(SB) + HINT $38 + MOVD $814, R12 + B callbackasm1(SB) + HINT $38 + MOVD $815, R12 + B callbackasm1(SB) + HINT $38 + MOVD $816, R12 + B callbackasm1(SB) + HINT $38 + MOVD $817, R12 + B callbackasm1(SB) + HINT $38 + MOVD $818, R12 + B callbackasm1(SB) + HINT $38 + MOVD $819, R12 + B callbackasm1(SB) + HINT $38 + MOVD $820, R12 + B callbackasm1(SB) + HINT $38 + MOVD $821, R12 + B callbackasm1(SB) + HINT $38 + MOVD $822, R12 + B callbackasm1(SB) + HINT $38 + MOVD $823, R12 + B callbackasm1(SB) + HINT $38 + MOVD $824, R12 + B callbackasm1(SB) + HINT $38 + MOVD $825, R12 + B callbackasm1(SB) + HINT $38 + MOVD $826, R12 + B callbackasm1(SB) + HINT $38 + MOVD $827, R12 + B callbackasm1(SB) + HINT $38 + MOVD $828, R12 + B callbackasm1(SB) + HINT $38 + MOVD $829, R12 + B callbackasm1(SB) + HINT $38 + MOVD $830, R12 + B callbackasm1(SB) + HINT $38 + MOVD $831, R12 + B callbackasm1(SB) + HINT $38 + MOVD $832, R12 + B callbackasm1(SB) + HINT $38 + MOVD $833, R12 + B callbackasm1(SB) + HINT $38 + MOVD $834, R12 + B callbackasm1(SB) + HINT $38 + MOVD $835, R12 + B callbackasm1(SB) + HINT $38 + MOVD $836, R12 + B callbackasm1(SB) + HINT $38 + MOVD $837, R12 + B callbackasm1(SB) + HINT $38 + MOVD $838, R12 + B callbackasm1(SB) + HINT $38 + MOVD $839, R12 + B callbackasm1(SB) + HINT $38 + MOVD $840, R12 + B callbackasm1(SB) + HINT $38 + MOVD $841, R12 + B callbackasm1(SB) + HINT $38 + MOVD $842, R12 + B callbackasm1(SB) + HINT $38 + MOVD $843, R12 + B callbackasm1(SB) + HINT $38 + MOVD $844, R12 + B callbackasm1(SB) + HINT $38 + MOVD $845, R12 + B callbackasm1(SB) + HINT $38 + MOVD $846, R12 + B callbackasm1(SB) + HINT $38 + MOVD $847, R12 + B callbackasm1(SB) + HINT $38 + MOVD $848, R12 + B callbackasm1(SB) + HINT $38 + MOVD $849, R12 + B callbackasm1(SB) + HINT $38 + MOVD $850, R12 + B callbackasm1(SB) + HINT $38 + MOVD $851, R12 + B callbackasm1(SB) + HINT $38 + MOVD $852, R12 + B callbackasm1(SB) + HINT $38 + MOVD $853, R12 + B callbackasm1(SB) + HINT $38 + MOVD $854, R12 + B callbackasm1(SB) + HINT $38 + MOVD $855, R12 + B callbackasm1(SB) + HINT $38 + MOVD $856, R12 + B callbackasm1(SB) + HINT $38 + MOVD $857, R12 + B callbackasm1(SB) + HINT $38 + MOVD $858, R12 + B callbackasm1(SB) + HINT $38 + MOVD $859, R12 + B callbackasm1(SB) + HINT $38 + MOVD $860, R12 + B callbackasm1(SB) + HINT $38 + MOVD $861, R12 + B callbackasm1(SB) + HINT $38 + MOVD $862, R12 + B callbackasm1(SB) + HINT $38 + MOVD $863, R12 + B callbackasm1(SB) + HINT $38 + MOVD $864, R12 + B callbackasm1(SB) + HINT $38 + MOVD $865, R12 + B callbackasm1(SB) + HINT $38 + MOVD $866, R12 + B callbackasm1(SB) + HINT $38 + MOVD $867, R12 + B callbackasm1(SB) + HINT $38 + MOVD $868, R12 + B callbackasm1(SB) + HINT $38 + MOVD $869, R12 + B callbackasm1(SB) + HINT $38 + MOVD $870, R12 + B callbackasm1(SB) + HINT $38 + MOVD $871, R12 + B callbackasm1(SB) + HINT $38 + MOVD $872, R12 + B callbackasm1(SB) + HINT $38 + MOVD $873, R12 + B callbackasm1(SB) + HINT $38 + MOVD $874, R12 + B callbackasm1(SB) + HINT $38 + MOVD $875, R12 + B callbackasm1(SB) + HINT $38 + MOVD $876, R12 + B callbackasm1(SB) + HINT $38 + MOVD $877, R12 + B callbackasm1(SB) + HINT $38 + MOVD $878, R12 + B callbackasm1(SB) + HINT $38 + MOVD $879, R12 + B callbackasm1(SB) + HINT $38 + MOVD $880, R12 + B callbackasm1(SB) + HINT $38 + MOVD $881, R12 + B callbackasm1(SB) + HINT $38 + MOVD $882, R12 + B callbackasm1(SB) + HINT $38 + MOVD $883, R12 + B callbackasm1(SB) + HINT $38 + MOVD $884, R12 + B callbackasm1(SB) + HINT $38 + MOVD $885, R12 + B callbackasm1(SB) + HINT $38 + MOVD $886, R12 + B callbackasm1(SB) + HINT $38 + MOVD $887, R12 + B callbackasm1(SB) + HINT $38 + MOVD $888, R12 + B callbackasm1(SB) + HINT $38 + MOVD $889, R12 + B callbackasm1(SB) + HINT $38 + MOVD $890, R12 + B callbackasm1(SB) + HINT $38 + MOVD $891, R12 + B callbackasm1(SB) + HINT $38 + MOVD $892, R12 + B callbackasm1(SB) + HINT $38 + MOVD $893, R12 + B callbackasm1(SB) + HINT $38 + MOVD $894, R12 + B callbackasm1(SB) + HINT $38 + MOVD $895, R12 + B callbackasm1(SB) + HINT $38 + MOVD $896, R12 + B callbackasm1(SB) + HINT $38 + MOVD $897, R12 + B callbackasm1(SB) + HINT $38 + MOVD $898, R12 + B callbackasm1(SB) + HINT $38 + MOVD $899, R12 + B callbackasm1(SB) + HINT $38 + MOVD $900, R12 + B callbackasm1(SB) + HINT $38 + MOVD $901, R12 + B callbackasm1(SB) + HINT $38 + MOVD $902, R12 + B callbackasm1(SB) + HINT $38 + MOVD $903, R12 + B callbackasm1(SB) + HINT $38 + MOVD $904, R12 + B callbackasm1(SB) + HINT $38 + MOVD $905, R12 + B callbackasm1(SB) + HINT $38 + MOVD $906, R12 + B callbackasm1(SB) + HINT $38 + MOVD $907, R12 + B callbackasm1(SB) + HINT $38 + MOVD $908, R12 + B callbackasm1(SB) + HINT $38 + MOVD $909, R12 + B callbackasm1(SB) + HINT $38 + MOVD $910, R12 + B callbackasm1(SB) + HINT $38 + MOVD $911, R12 + B callbackasm1(SB) + HINT $38 + MOVD $912, R12 + B callbackasm1(SB) + HINT $38 + MOVD $913, R12 + B callbackasm1(SB) + HINT $38 + MOVD $914, R12 + B callbackasm1(SB) + HINT $38 + MOVD $915, R12 + B callbackasm1(SB) + HINT $38 + MOVD $916, R12 + B callbackasm1(SB) + HINT $38 + MOVD $917, R12 + B callbackasm1(SB) + HINT $38 + MOVD $918, R12 + B callbackasm1(SB) + HINT $38 + MOVD $919, R12 + B callbackasm1(SB) + HINT $38 + MOVD $920, R12 + B callbackasm1(SB) + HINT $38 + MOVD $921, R12 + B callbackasm1(SB) + HINT $38 + MOVD $922, R12 + B callbackasm1(SB) + HINT $38 + MOVD $923, R12 + B callbackasm1(SB) + HINT $38 + MOVD $924, R12 + B callbackasm1(SB) + HINT $38 + MOVD $925, R12 + B callbackasm1(SB) + HINT $38 + MOVD $926, R12 + B callbackasm1(SB) + HINT $38 + MOVD $927, R12 + B callbackasm1(SB) + HINT $38 + MOVD $928, R12 + B callbackasm1(SB) + HINT $38 + MOVD $929, R12 + B callbackasm1(SB) + HINT $38 + MOVD $930, R12 + B callbackasm1(SB) + HINT $38 + MOVD $931, R12 + B callbackasm1(SB) + HINT $38 + MOVD $932, R12 + B callbackasm1(SB) + HINT $38 + MOVD $933, R12 + B callbackasm1(SB) + HINT $38 + MOVD $934, R12 + B callbackasm1(SB) + HINT $38 + MOVD $935, R12 + B callbackasm1(SB) + HINT $38 + MOVD $936, R12 + B callbackasm1(SB) + HINT $38 + MOVD $937, R12 + B callbackasm1(SB) + HINT $38 + MOVD $938, R12 + B callbackasm1(SB) + HINT $38 + MOVD $939, R12 + B callbackasm1(SB) + HINT $38 + MOVD $940, R12 + B callbackasm1(SB) + HINT $38 + MOVD $941, R12 + B callbackasm1(SB) + HINT $38 + MOVD $942, R12 + B callbackasm1(SB) + HINT $38 + MOVD $943, R12 + B callbackasm1(SB) + HINT $38 + MOVD $944, R12 + B callbackasm1(SB) + HINT $38 + MOVD $945, R12 + B callbackasm1(SB) + HINT $38 + MOVD $946, R12 + B callbackasm1(SB) + HINT $38 + MOVD $947, R12 + B callbackasm1(SB) + HINT $38 + MOVD $948, R12 + B callbackasm1(SB) + HINT $38 + MOVD $949, R12 + B callbackasm1(SB) + HINT $38 + MOVD $950, R12 + B callbackasm1(SB) + HINT $38 + MOVD $951, R12 + B callbackasm1(SB) + HINT $38 + MOVD $952, R12 + B callbackasm1(SB) + HINT $38 + MOVD $953, R12 + B callbackasm1(SB) + HINT $38 + MOVD $954, R12 + B callbackasm1(SB) + HINT $38 + MOVD $955, R12 + B callbackasm1(SB) + HINT $38 + MOVD $956, R12 + B callbackasm1(SB) + HINT $38 + MOVD $957, R12 + B callbackasm1(SB) + HINT $38 + MOVD $958, R12 + B callbackasm1(SB) + HINT $38 + MOVD $959, R12 + B callbackasm1(SB) + HINT $38 + MOVD $960, R12 + B callbackasm1(SB) + HINT $38 + MOVD $961, R12 + B callbackasm1(SB) + HINT $38 + MOVD $962, R12 + B callbackasm1(SB) + HINT $38 + MOVD $963, R12 + B callbackasm1(SB) + HINT $38 + MOVD $964, R12 + B callbackasm1(SB) + HINT $38 + MOVD $965, R12 + B callbackasm1(SB) + HINT $38 + MOVD $966, R12 + B callbackasm1(SB) + HINT $38 + MOVD $967, R12 + B callbackasm1(SB) + HINT $38 + MOVD $968, R12 + B callbackasm1(SB) + HINT $38 + MOVD $969, R12 + B callbackasm1(SB) + HINT $38 + MOVD $970, R12 + B callbackasm1(SB) + HINT $38 + MOVD $971, R12 + B callbackasm1(SB) + HINT $38 + MOVD $972, R12 + B callbackasm1(SB) + HINT $38 + MOVD $973, R12 + B callbackasm1(SB) + HINT $38 + MOVD $974, R12 + B callbackasm1(SB) + HINT $38 + MOVD $975, R12 + B callbackasm1(SB) + HINT $38 + MOVD $976, R12 + B callbackasm1(SB) + HINT $38 + MOVD $977, R12 + B callbackasm1(SB) + HINT $38 + MOVD $978, R12 + B callbackasm1(SB) + HINT $38 + MOVD $979, R12 + B callbackasm1(SB) + HINT $38 + MOVD $980, R12 + B callbackasm1(SB) + HINT $38 + MOVD $981, R12 + B callbackasm1(SB) + HINT $38 + MOVD $982, R12 + B callbackasm1(SB) + HINT $38 + MOVD $983, R12 + B callbackasm1(SB) + HINT $38 + MOVD $984, R12 + B callbackasm1(SB) + HINT $38 + MOVD $985, R12 + B callbackasm1(SB) + HINT $38 + MOVD $986, R12 + B callbackasm1(SB) + HINT $38 + MOVD $987, R12 + B callbackasm1(SB) + HINT $38 + MOVD $988, R12 + B callbackasm1(SB) + HINT $38 + MOVD $989, R12 + B callbackasm1(SB) + HINT $38 + MOVD $990, R12 + B callbackasm1(SB) + HINT $38 + MOVD $991, R12 + B callbackasm1(SB) + HINT $38 + MOVD $992, R12 + B callbackasm1(SB) + HINT $38 + MOVD $993, R12 + B callbackasm1(SB) + HINT $38 + MOVD $994, R12 + B callbackasm1(SB) + HINT $38 + MOVD $995, R12 + B callbackasm1(SB) + HINT $38 + MOVD $996, R12 + B callbackasm1(SB) + HINT $38 + MOVD $997, R12 + B callbackasm1(SB) + HINT $38 + MOVD $998, R12 + B callbackasm1(SB) + HINT $38 + MOVD $999, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1000, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1001, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1002, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1003, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1004, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1005, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1006, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1007, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1008, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1009, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1010, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1011, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1012, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1013, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1014, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1015, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1016, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1017, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1018, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1019, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1020, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1021, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1022, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1023, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1024, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1025, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1026, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1027, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1028, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1029, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1030, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1031, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1032, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1033, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1034, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1035, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1036, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1037, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1038, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1039, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1040, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1041, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1042, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1043, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1044, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1045, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1046, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1047, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1048, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1049, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1050, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1051, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1052, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1053, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1054, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1055, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1056, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1057, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1058, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1059, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1060, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1061, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1062, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1063, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1064, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1065, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1066, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1067, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1068, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1069, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1070, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1071, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1072, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1073, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1074, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1075, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1076, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1077, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1078, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1079, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1080, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1081, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1082, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1083, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1084, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1085, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1086, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1087, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1088, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1089, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1090, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1091, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1092, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1093, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1094, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1095, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1096, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1097, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1098, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1099, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1100, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1101, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1102, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1103, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1104, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1105, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1106, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1107, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1108, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1109, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1110, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1111, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1112, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1113, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1114, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1115, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1116, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1117, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1118, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1119, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1120, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1121, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1122, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1123, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1124, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1125, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1126, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1127, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1128, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1129, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1130, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1131, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1132, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1133, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1134, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1135, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1136, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1137, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1138, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1139, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1140, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1141, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1142, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1143, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1144, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1145, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1146, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1147, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1148, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1149, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1150, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1151, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1152, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1153, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1154, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1155, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1156, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1157, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1158, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1159, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1160, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1161, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1162, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1163, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1164, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1165, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1166, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1167, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1168, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1169, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1170, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1171, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1172, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1173, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1174, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1175, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1176, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1177, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1178, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1179, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1180, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1181, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1182, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1183, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1184, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1185, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1186, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1187, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1188, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1189, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1190, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1191, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1192, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1193, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1194, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1195, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1196, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1197, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1198, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1199, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1200, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1201, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1202, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1203, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1204, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1205, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1206, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1207, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1208, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1209, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1210, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1211, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1212, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1213, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1214, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1215, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1216, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1217, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1218, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1219, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1220, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1221, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1222, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1223, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1224, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1225, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1226, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1227, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1228, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1229, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1230, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1231, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1232, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1233, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1234, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1235, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1236, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1237, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1238, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1239, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1240, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1241, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1242, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1243, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1244, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1245, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1246, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1247, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1248, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1249, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1250, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1251, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1252, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1253, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1254, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1255, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1256, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1257, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1258, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1259, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1260, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1261, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1262, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1263, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1264, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1265, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1266, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1267, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1268, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1269, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1270, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1271, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1272, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1273, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1274, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1275, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1276, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1277, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1278, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1279, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1280, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1281, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1282, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1283, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1284, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1285, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1286, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1287, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1288, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1289, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1290, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1291, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1292, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1293, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1294, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1295, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1296, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1297, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1298, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1299, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1300, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1301, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1302, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1303, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1304, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1305, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1306, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1307, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1308, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1309, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1310, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1311, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1312, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1313, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1314, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1315, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1316, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1317, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1318, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1319, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1320, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1321, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1322, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1323, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1324, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1325, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1326, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1327, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1328, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1329, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1330, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1331, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1332, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1333, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1334, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1335, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1336, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1337, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1338, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1339, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1340, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1341, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1342, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1343, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1344, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1345, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1346, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1347, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1348, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1349, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1350, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1351, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1352, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1353, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1354, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1355, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1356, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1357, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1358, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1359, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1360, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1361, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1362, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1363, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1364, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1365, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1366, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1367, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1368, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1369, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1370, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1371, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1372, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1373, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1374, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1375, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1376, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1377, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1378, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1379, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1380, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1381, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1382, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1383, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1384, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1385, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1386, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1387, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1388, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1389, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1390, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1391, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1392, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1393, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1394, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1395, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1396, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1397, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1398, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1399, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1400, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1401, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1402, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1403, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1404, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1405, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1406, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1407, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1408, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1409, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1410, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1411, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1412, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1413, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1414, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1415, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1416, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1417, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1418, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1419, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1420, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1421, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1422, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1423, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1424, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1425, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1426, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1427, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1428, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1429, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1430, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1431, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1432, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1433, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1434, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1435, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1436, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1437, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1438, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1439, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1440, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1441, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1442, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1443, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1444, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1445, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1446, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1447, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1448, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1449, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1450, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1451, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1452, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1453, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1454, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1455, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1456, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1457, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1458, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1459, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1460, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1461, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1462, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1463, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1464, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1465, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1466, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1467, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1468, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1469, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1470, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1471, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1472, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1473, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1474, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1475, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1476, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1477, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1478, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1479, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1480, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1481, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1482, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1483, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1484, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1485, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1486, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1487, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1488, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1489, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1490, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1491, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1492, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1493, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1494, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1495, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1496, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1497, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1498, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1499, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1500, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1501, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1502, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1503, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1504, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1505, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1506, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1507, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1508, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1509, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1510, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1511, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1512, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1513, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1514, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1515, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1516, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1517, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1518, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1519, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1520, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1521, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1522, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1523, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1524, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1525, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1526, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1527, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1528, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1529, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1530, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1531, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1532, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1533, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1534, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1535, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1536, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1537, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1538, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1539, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1540, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1541, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1542, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1543, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1544, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1545, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1546, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1547, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1548, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1549, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1550, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1551, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1552, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1553, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1554, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1555, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1556, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1557, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1558, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1559, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1560, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1561, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1562, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1563, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1564, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1565, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1566, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1567, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1568, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1569, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1570, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1571, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1572, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1573, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1574, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1575, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1576, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1577, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1578, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1579, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1580, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1581, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1582, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1583, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1584, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1585, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1586, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1587, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1588, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1589, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1590, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1591, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1592, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1593, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1594, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1595, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1596, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1597, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1598, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1599, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1600, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1601, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1602, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1603, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1604, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1605, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1606, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1607, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1608, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1609, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1610, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1611, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1612, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1613, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1614, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1615, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1616, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1617, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1618, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1619, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1620, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1621, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1622, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1623, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1624, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1625, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1626, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1627, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1628, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1629, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1630, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1631, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1632, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1633, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1634, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1635, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1636, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1637, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1638, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1639, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1640, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1641, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1642, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1643, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1644, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1645, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1646, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1647, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1648, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1649, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1650, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1651, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1652, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1653, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1654, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1655, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1656, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1657, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1658, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1659, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1660, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1661, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1662, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1663, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1664, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1665, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1666, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1667, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1668, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1669, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1670, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1671, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1672, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1673, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1674, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1675, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1676, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1677, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1678, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1679, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1680, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1681, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1682, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1683, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1684, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1685, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1686, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1687, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1688, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1689, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1690, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1691, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1692, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1693, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1694, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1695, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1696, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1697, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1698, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1699, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1700, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1701, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1702, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1703, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1704, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1705, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1706, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1707, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1708, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1709, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1710, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1711, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1712, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1713, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1714, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1715, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1716, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1717, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1718, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1719, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1720, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1721, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1722, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1723, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1724, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1725, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1726, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1727, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1728, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1729, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1730, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1731, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1732, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1733, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1734, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1735, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1736, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1737, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1738, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1739, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1740, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1741, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1742, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1743, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1744, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1745, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1746, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1747, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1748, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1749, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1750, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1751, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1752, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1753, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1754, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1755, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1756, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1757, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1758, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1759, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1760, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1761, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1762, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1763, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1764, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1765, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1766, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1767, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1768, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1769, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1770, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1771, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1772, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1773, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1774, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1775, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1776, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1777, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1778, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1779, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1780, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1781, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1782, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1783, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1784, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1785, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1786, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1787, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1788, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1789, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1790, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1791, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1792, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1793, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1794, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1795, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1796, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1797, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1798, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1799, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1800, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1801, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1802, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1803, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1804, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1805, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1806, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1807, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1808, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1809, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1810, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1811, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1812, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1813, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1814, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1815, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1816, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1817, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1818, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1819, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1820, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1821, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1822, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1823, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1824, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1825, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1826, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1827, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1828, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1829, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1830, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1831, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1832, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1833, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1834, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1835, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1836, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1837, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1838, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1839, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1840, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1841, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1842, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1843, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1844, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1845, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1846, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1847, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1848, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1849, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1850, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1851, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1852, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1853, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1854, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1855, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1856, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1857, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1858, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1859, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1860, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1861, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1862, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1863, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1864, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1865, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1866, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1867, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1868, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1869, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1870, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1871, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1872, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1873, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1874, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1875, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1876, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1877, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1878, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1879, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1880, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1881, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1882, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1883, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1884, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1885, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1886, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1887, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1888, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1889, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1890, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1891, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1892, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1893, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1894, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1895, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1896, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1897, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1898, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1899, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1900, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1901, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1902, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1903, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1904, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1905, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1906, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1907, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1908, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1909, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1910, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1911, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1912, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1913, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1914, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1915, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1916, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1917, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1918, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1919, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1920, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1921, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1922, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1923, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1924, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1925, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1926, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1927, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1928, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1929, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1930, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1931, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1932, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1933, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1934, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1935, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1936, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1937, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1938, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1939, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1940, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1941, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1942, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1943, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1944, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1945, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1946, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1947, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1948, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1949, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1950, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1951, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1952, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1953, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1954, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1955, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1956, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1957, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1958, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1959, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1960, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1961, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1962, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1963, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1964, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1965, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1966, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1967, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1968, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1969, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1970, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1971, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1972, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1973, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1974, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1975, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1976, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1977, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1978, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1979, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1980, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1981, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1982, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1983, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1984, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1985, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1986, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1987, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1988, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1989, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1990, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1991, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1992, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1993, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1994, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1995, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1996, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1997, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1998, R12 + B callbackasm1(SB) + HINT $38 + MOVD $1999, R12 + B callbackasm1(SB) diff --git a/zcallback_riscv64.s b/zcallback_riscv64.s index f341a87e..39a45e4a 100644 --- a/zcallback_riscv64.s +++ b/zcallback_riscv64.s @@ -1,6 +1,6 @@ // Code generated by wincallback.go using 'go generate'. DO NOT EDIT. -//go:build darwin || freebsd || linux || netbsd +//go:build darwin || freebsd || linux || netbsd || openbsd // External code calls into callbackasm at an offset corresponding // to the callback index. Callbackasm is a table of MOV and JMP instructions.