diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index f40bf86c..a974e33a 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -72,6 +72,7 @@ jobs:
- name: go build (Linux minor architectures)
# Test them only on the latest Go to reduce CI time.
+ # s390x cannot be tested here as it requires Cgo.
if: startsWith(matrix.go, '1.26.')
run: |
# Check cross-compiling Linux binaries for minor architectures.
@@ -179,6 +180,7 @@ jobs:
gcc-14-loongarch64-linux-gnu g++-14-loongarch64-linux-gnu \
gcc-powerpc64le-linux-gnu g++-powerpc64le-linux-gnu \
gcc-riscv64-linux-gnu g++-riscv64-linux-gnu \
+ gcc-s390x-linux-gnu g++-s390x-linux-gnu \
qemu-user
- name: go test (Linux loong64)
@@ -216,6 +218,15 @@ jobs:
go env -u CC
go env -u CXX
+ - name: go test (Linux s390x)
+ run: |
+ go env -w CC=s390x-linux-gnu-gcc
+ go env -w CXX=s390x-linux-gnu-g++
+ env GOOS=linux GOARCH=s390x CGO_ENABLED=1 go test -c -o=purego-test-cgo .
+ env QEMU_LD_PREFIX=/usr/s390x-linux-gnu qemu-s390x ./purego-test-cgo -test.shuffle=on -test.v -test.count=10
+ go env -u CC
+ go env -u CXX
+
bsd:
strategy:
matrix:
diff --git a/README.md b/README.md
index ff8f383f..8fb85c2c 100644
--- a/README.md
+++ b/README.md
@@ -42,7 +42,7 @@ Tier 2 platforms are supported by PureGo on a best-effort basis. Critical bugs o
- **Android**: 3861, arm1
- **FreeBSD**: amd642, arm642
-- **Linux**: 386, arm, loong64, ppc64le, riscv64
+- **Linux**: 386, arm, loong64, ppc64le, riscv64, s390x1
- **Windows**: 3863, arm3,4
#### Support Notes
diff --git a/callback_test.go b/callback_test.go
index 3b4ffc72..e373c02a 100644
--- a/callback_test.go
+++ b/callback_test.go
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: Apache-2.0
// SPDX-FileCopyrightText: 2023 The Ebitengine Authors
-//go:build darwin || (linux && (386 || amd64 || arm || arm64 || loong64 || ppc64le || riscv64))
+//go:build darwin || (linux && (386 || amd64 || arm || arm64 || loong64 || ppc64le || riscv64 || s390x))
package purego_test
@@ -126,6 +126,11 @@ func TestNewCallbackFloat32(t *testing.T) {
}
func TestNewCallbackFloat32AndFloat64(t *testing.T) {
+ if runtime.GOARCH == "s390x" {
+ // S390X has only 4 float registers (F0,F2,F4,F6), so 15 floats requires
+ // 11 stack slots, but only 10 are available (maxArgs - numIntRegs = 15 - 5)
+ t.Skip("Test requires too many stack arguments for s390x")
+ }
// This tests that calling a function with a mix of float32 and float64 arguments works
const (
expectedCbTotalF32 = float32(72)
diff --git a/func.go b/func.go
index 0e6c055b..0da2c269 100644
--- a/func.go
+++ b/func.go
@@ -133,7 +133,7 @@ func RegisterFunc(fptr any, cfn uintptr) {
panic("purego: cfn is nil")
}
if ty.NumOut() == 1 && (ty.Out(0).Kind() == reflect.Float32 || ty.Out(0).Kind() == reflect.Float64) &&
- runtime.GOARCH != "arm" && runtime.GOARCH != "arm64" && runtime.GOARCH != "386" && runtime.GOARCH != "amd64" && runtime.GOARCH != "loong64" && runtime.GOARCH != "ppc64le" && runtime.GOARCH != "riscv64" {
+ runtime.GOARCH != "arm" && runtime.GOARCH != "arm64" && runtime.GOARCH != "386" && runtime.GOARCH != "amd64" && runtime.GOARCH != "loong64" && runtime.GOARCH != "ppc64le" && runtime.GOARCH != "riscv64" && runtime.GOARCH != "s390x" {
panic("purego: float returns are not supported")
}
{
@@ -273,7 +273,7 @@ func RegisterFunc(fptr any, cfn uintptr) {
var arm64_r8 uintptr
if ty.NumOut() == 1 && ty.Out(0).Kind() == reflect.Struct {
outType := ty.Out(0)
- if (runtime.GOARCH == "amd64" || runtime.GOARCH == "loong64" || runtime.GOARCH == "ppc64le" || runtime.GOARCH == "riscv64") && outType.Size() > maxRegAllocStructSize {
+ if (runtime.GOARCH == "amd64" || runtime.GOARCH == "loong64" || runtime.GOARCH == "ppc64le" || runtime.GOARCH == "riscv64" || runtime.GOARCH == "s390x") && outType.Size() > maxRegAllocStructSize {
val := reflect.New(outType)
keepAlive = append(keepAlive, val)
addInt(val.Pointer())
@@ -313,7 +313,7 @@ func RegisterFunc(fptr any, cfn uintptr) {
syscall := thePool.Get().(*syscall15Args)
defer thePool.Put(syscall)
- if runtime.GOARCH == "loong64" || runtime.GOARCH == "ppc64le" || runtime.GOARCH == "riscv64" {
+ if runtime.GOARCH == "loong64" || runtime.GOARCH == "ppc64le" || runtime.GOARCH == "riscv64" || runtime.GOARCH == "s390x" {
syscall.Set(cfn, sysargs[:], floats[:], 0)
runtime_cgocall(syscall15XABI0, unsafe.Pointer(syscall))
} else if runtime.GOARCH == "arm64" || runtime.GOOS != "windows" {
@@ -356,11 +356,15 @@ func RegisterFunc(fptr any, cfn uintptr) {
// On 32bit platforms syscall.r2 is the upper part of a 64bit return.
// On 386, x87 FPU returns floats as float64 in ST(0), so we read as float64 and convert.
// On PPC64LE, C ABI converts float32 to double in FPR, so we read as float64.
+ // On S390X (big-endian), float32 is in upper 32 bits of the 64-bit FP register.
switch runtime.GOARCH {
case "386":
v.SetFloat(math.Float64frombits(uint64(syscall.f1) | (uint64(syscall.f2) << 32)))
case "ppc64le":
v.SetFloat(math.Float64frombits(uint64(syscall.f1)))
+ case "s390x":
+ // S390X is big-endian: float32 in upper 32 bits of 64-bit register
+ v.SetFloat(float64(math.Float32frombits(uint32(syscall.f1 >> 32))))
default:
v.SetFloat(float64(math.Float32frombits(uint32(syscall.f1))))
}
@@ -411,7 +415,12 @@ func addValue(v reflect.Value, keepAlive []any, addInt func(x uintptr), addFloat
addInt(0)
}
case reflect.Float32:
- addFloat(uintptr(math.Float32bits(float32(v.Float()))))
+ // On S390X big-endian, float32 goes in upper 32 bits of 64-bit FP register
+ if runtime.GOARCH == "s390x" {
+ addFloat(uintptr(math.Float32bits(float32(v.Float()))) << 32)
+ } else {
+ addFloat(uintptr(math.Float32bits(float32(v.Float()))))
+ }
case reflect.Float64:
if is32bit {
bits := math.Float64bits(v.Float())
@@ -498,6 +507,8 @@ func numOfFloatRegisters() int {
switch runtime.GOARCH {
case "amd64", "arm64", "loong64", "ppc64le", "riscv64":
return 8
+ case "s390x":
+ return 4
case "arm":
return 16
case "386":
@@ -516,6 +527,9 @@ func numOfIntegerRegisters() int {
return 8
case "amd64":
return 6
+ case "s390x":
+ // S390X uses R2-R6 for integer arguments
+ return 5
case "arm":
return 4
case "386":
diff --git a/func_test.go b/func_test.go
index 4568cb83..6ae69c40 100644
--- a/func_test.go
+++ b/func_test.go
@@ -50,7 +50,7 @@ func TestRegisterFunc(t *testing.T) {
}
func Test_qsort(t *testing.T) {
- if runtime.GOARCH != "arm" && runtime.GOARCH != "arm64" && runtime.GOARCH != "386" && runtime.GOARCH != "amd64" && runtime.GOARCH != "loong64" && runtime.GOARCH != "ppc64le" && runtime.GOARCH != "riscv64" {
+ if runtime.GOARCH != "arm" && runtime.GOARCH != "arm64" && runtime.GOARCH != "386" && runtime.GOARCH != "amd64" && runtime.GOARCH != "loong64" && runtime.GOARCH != "ppc64le" && runtime.GOARCH != "riscv64" && runtime.GOARCH != "s390x" {
t.Skip("Platform doesn't support Floats")
return
}
@@ -79,7 +79,7 @@ func Test_qsort(t *testing.T) {
}
func TestRegisterFunc_Floats(t *testing.T) {
- if runtime.GOARCH != "arm" && runtime.GOARCH != "arm64" && runtime.GOARCH != "386" && runtime.GOARCH != "amd64" && runtime.GOARCH != "loong64" && runtime.GOARCH != "ppc64le" && runtime.GOARCH != "riscv64" {
+ if runtime.GOARCH != "arm" && runtime.GOARCH != "arm64" && runtime.GOARCH != "386" && runtime.GOARCH != "amd64" && runtime.GOARCH != "loong64" && runtime.GOARCH != "ppc64le" && runtime.GOARCH != "riscv64" && runtime.GOARCH != "s390x" {
t.Skip("Platform doesn't support Floats")
return
}
@@ -121,7 +121,7 @@ func TestRegisterFunc_Floats(t *testing.T) {
}
func TestRegisterLibFunc_Bool(t *testing.T) {
- if runtime.GOARCH != "arm" && runtime.GOARCH != "arm64" && runtime.GOARCH != "386" && runtime.GOARCH != "amd64" && runtime.GOARCH != "loong64" && runtime.GOARCH != "ppc64le" && runtime.GOARCH != "riscv64" {
+ if runtime.GOARCH != "arm" && runtime.GOARCH != "arm64" && runtime.GOARCH != "386" && runtime.GOARCH != "amd64" && runtime.GOARCH != "loong64" && runtime.GOARCH != "ppc64le" && runtime.GOARCH != "riscv64" && runtime.GOARCH != "s390x" {
t.Skip("Platform doesn't support callbacks")
return
}
@@ -376,7 +376,7 @@ func TestABI_ArgumentPassing(t *testing.T) {
if tt.name == "20_int32" && (runtime.GOOS != "darwin" || runtime.GOARCH != "arm64") {
t.Skip("20 int32 arguments only supported on Darwin ARM64 with smart stack checking")
}
- if tt.name == "10_float32" && (runtime.GOARCH == "loong64" || runtime.GOARCH == "ppc64le" || runtime.GOARCH == "riscv64") {
+ if tt.name == "10_float32" && (runtime.GOARCH == "loong64" || runtime.GOARCH == "ppc64le" || runtime.GOARCH == "riscv64" || runtime.GOARCH == "s390x") {
t.Skip("float32 stack arguments not yet supported on this platform")
}
// Struct tests require Darwin ARM64 or AMD64
diff --git a/internal/fakecgo/asm_s390x.s b/internal/fakecgo/asm_s390x.s
new file mode 100644
index 00000000..b6446650
--- /dev/null
+++ b/internal/fakecgo/asm_s390x.s
@@ -0,0 +1,55 @@
+// Copyright 2016 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.
+
+#include "textflag.h"
+
+// Called by C code generated by cmd/cgo.
+// func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr)
+// Saves C callee-saved registers and calls cgocallback with three arguments.
+// fn is the PC of a func(a unsafe.Pointer) function.
+TEXT crosscall2(SB), NOSPLIT|NOFRAME, $0
+ // Start with standard C stack frame layout and linkage.
+
+ // Save R6-R15 in the register save area of the calling function.
+ STMG R6, R15, 48(R15)
+
+ // Allocate 96 bytes on the stack.
+ MOVD $-96(R15), R15
+
+ // Save F8-F15 in our stack frame.
+ FMOVD F8, 32(R15)
+ FMOVD F9, 40(R15)
+ FMOVD F10, 48(R15)
+ FMOVD F11, 56(R15)
+ FMOVD F12, 64(R15)
+ FMOVD F13, 72(R15)
+ FMOVD F14, 80(R15)
+ FMOVD F15, 88(R15)
+
+ // Initialize Go ABI environment.
+ BL runtime·load_g(SB)
+
+ MOVD R2, 8(R15) // fn unsafe.Pointer
+ MOVD R3, 16(R15) // a unsafe.Pointer
+
+ // Skip R4 = n uint32
+ MOVD R5, 24(R15) // ctxt uintptr
+ BL runtime·cgocallback(SB)
+
+ FMOVD 32(R15), F8
+ FMOVD 40(R15), F9
+ FMOVD 48(R15), F10
+ FMOVD 56(R15), F11
+ FMOVD 64(R15), F12
+ FMOVD 72(R15), F13
+ FMOVD 80(R15), F14
+ FMOVD 88(R15), F15
+
+ // De-allocate stack frame.
+ MOVD $96(R15), R15
+
+ // Restore R6-R15.
+ LMG 48(R15), R6, R15
+
+ RET
diff --git a/struct_s390x.go b/struct_s390x.go
new file mode 100644
index 00000000..7ec5e813
--- /dev/null
+++ b/struct_s390x.go
@@ -0,0 +1,143 @@
+// SPDX-License-Identifier: Apache-2.0
+// SPDX-FileCopyrightText: 2026 The Ebitengine Authors
+
+package purego
+
+import (
+ "reflect"
+ "unsafe"
+)
+
+func getStruct(outType reflect.Type, syscall syscall15Args) reflect.Value {
+ outSize := outType.Size()
+
+ switch {
+ case outSize == 0:
+ return reflect.New(outType).Elem()
+
+ case outSize <= 16:
+ // Reconstruct from registers by copying raw bytes
+ var buf [16]byte
+
+ // Integer registers
+ *(*uintptr)(unsafe.Pointer(&buf[0])) = syscall.a1
+ if outSize > 8 {
+ *(*uintptr)(unsafe.Pointer(&buf[8])) = syscall.a2
+ }
+
+ // Homogeneous float aggregates override integer regs
+ if isAllFloats, numFields := isAllSameFloat(outType); isAllFloats {
+ if outType.Field(0).Type.Kind() == reflect.Float32 {
+ // float32 values in FP regs
+ f := []uintptr{syscall.f1, syscall.f2, syscall.f3, syscall.f4}
+ for i := 0; i < numFields; i++ {
+ *(*uint32)(unsafe.Pointer(&buf[i*4])) = uint32(f[i])
+ }
+ } else {
+ // float64: whole register value is valid
+ *(*uintptr)(unsafe.Pointer(&buf[0])) = syscall.f1
+ if outSize > 8 {
+ *(*uintptr)(unsafe.Pointer(&buf[8])) = syscall.f2
+ }
+ }
+ }
+
+ return reflect.NewAt(outType, unsafe.Pointer(&buf[0])).Elem()
+
+ default:
+ // Returned indirectly via pointer in a1
+ ptr := *(*unsafe.Pointer)(unsafe.Pointer(&syscall.a1))
+ return reflect.NewAt(outType, ptr).Elem()
+ }
+}
+
+func addStruct(
+ v reflect.Value,
+ numInts, numFloats, numStack *int,
+ addInt, addFloat, addStack func(uintptr),
+ keepAlive []any,
+) []any {
+ size := v.Type().Size()
+ if size == 0 {
+ return keepAlive
+ }
+
+ if size <= 16 {
+ return placeSmallAggregateS390X(v, addFloat, addInt, keepAlive)
+ }
+
+ return placeStack(v, keepAlive, addInt)
+}
+
+func placeSmallAggregateS390X(
+ v reflect.Value,
+ addFloat, addInt func(uintptr),
+ keepAlive []any,
+) []any {
+ size := v.Type().Size()
+
+ var ptr unsafe.Pointer
+ if v.CanAddr() {
+ ptr = v.Addr().UnsafePointer()
+ } else {
+ tmp := reflect.New(v.Type())
+ tmp.Elem().Set(v)
+ ptr = tmp.UnsafePointer()
+ keepAlive = append(keepAlive, tmp.Interface())
+ }
+
+ var buf [16]byte
+ src := unsafe.Slice((*byte)(ptr), size)
+ copy(buf[:], src)
+
+ w0 := *(*uintptr)(unsafe.Pointer(&buf[0]))
+ w1 := uintptr(0)
+ if size > 8 {
+ w1 = *(*uintptr)(unsafe.Pointer(&buf[8]))
+ }
+
+ if isFloats, _ := isAllSameFloat(v.Type()); isFloats {
+ addFloat(w0)
+ if size > 8 {
+ addFloat(w1)
+ }
+ } else {
+ addInt(w0)
+ if size > 8 {
+ addInt(w1)
+ }
+ }
+
+ return keepAlive
+}
+
+// placeStack is a fallback for structs that are too large to fit in registers
+func placeStack(v reflect.Value, keepAlive []any, addInt func(uintptr)) []any {
+ if v.CanAddr() {
+ addInt(v.Addr().Pointer())
+ return keepAlive
+ }
+ ptr := reflect.New(v.Type())
+ ptr.Elem().Set(v)
+ addInt(ptr.Pointer())
+ return append(keepAlive, ptr.Interface())
+}
+
+func shouldBundleStackArgs(v reflect.Value, numInts, numFloats int) bool {
+ // S390X does not bundle stack args
+ return false
+}
+
+func collectStackArgs(
+ args []reflect.Value,
+ i, numInts, numFloats int,
+ keepAlive []any,
+ addInt, addFloat, addStack func(uintptr),
+ numIntsPtr, numFloatsPtr, numStackPtr *int,
+) ([]reflect.Value, []any) {
+ return nil, keepAlive
+}
+
+func bundleStackArgs(stackArgs []reflect.Value, addStack func(uintptr)) {
+ panic("bundleStackArgs not supported on S390X")
+}
diff --git a/sys_s390x.s b/sys_s390x.s
new file mode 100644
index 00000000..a044e34d
--- /dev/null
+++ b/sys_s390x.s
@@ -0,0 +1,114 @@
+// SPDX-License-Identifier: Apache-2.0
+// SPDX-FileCopyrightText: 2026 The Ebitengine Authors
+
+//go:build linux
+
+#include "textflag.h"
+#include "go_asm.h"
+#include "funcdata.h"
+
+// S390X ELF ABI:
+// - Integer args: R2-R6 (5 registers)
+// - Float args: F0, F2, F4, F6 (4 registers, even-numbered)
+// - Return: R2 (integer), F0 (float)
+// - Stack pointer: R15
+// - Link register: R14
+// - Callee-saved: R6-R13, F8-F15 (but R6 is also used for 5th param)
+//
+// Stack frame layout (aligned to 8 bytes):
+// 0(R15) - back chain
+// 8(R15) - reserved
+// 16(R15) - reserved
+// ... - register save area (R6-R15 at 48(R15))
+// 160(R15) - parameter area start (args beyond registers)
+//
+// We need space for:
+// - 160 bytes standard frame (with register save area)
+// - Stack args a6-a15 (10 * 8 = 80 bytes)
+// - Saved args pointer (8 bytes)
+// - Padding for alignment
+// Total: 264 bytes (rounded to 8-byte alignment)
+
+#define STACK_SIZE 264
+#define STACK_ARGS 160
+#define ARGP_SAVE 248
+
+GLOBL ·syscall15XABI0(SB), NOPTR|RODATA, $8
+DATA ·syscall15XABI0(SB)/8, $syscall15X(SB)
+
+TEXT syscall15X(SB), NOSPLIT, $0
+ // On entry, R2 contains the args pointer
+ // Save callee-saved registers in caller's frame (per ABI)
+ STMG R6, R15, 48(R15)
+
+ // Allocate our stack frame
+ MOVD R15, R1
+ SUB $STACK_SIZE, R15
+ MOVD R1, 0(R15) // back chain
+
+ // Save args pointer
+ MOVD R2, ARGP_SAVE(R15)
+
+ // R9 := args pointer (syscall15Args*)
+ MOVD R2, R9
+
+ // Load float args into F0, F2, F4, F6 (s390x uses even-numbered FPRs)
+ FMOVD syscall15Args_f1(R9), F0
+ FMOVD syscall15Args_f2(R9), F2
+ FMOVD syscall15Args_f3(R9), F4
+ FMOVD syscall15Args_f4(R9), F6
+
+ // Load integer args into R2-R6 (5 registers)
+ MOVD syscall15Args_a1(R9), R2
+ MOVD syscall15Args_a2(R9), R3
+ MOVD syscall15Args_a3(R9), R4
+ MOVD syscall15Args_a4(R9), R5
+ MOVD syscall15Args_a5(R9), R6
+
+ // Spill remaining args (a6-a15) onto the stack at 160(R15)
+ MOVD ARGP_SAVE(R15), R9 // reload args pointer
+ MOVD syscall15Args_a6(R9), R1
+ MOVD R1, (STACK_ARGS+0*8)(R15)
+ MOVD syscall15Args_a7(R9), R1
+ MOVD R1, (STACK_ARGS+1*8)(R15)
+ MOVD syscall15Args_a8(R9), R1
+ MOVD R1, (STACK_ARGS+2*8)(R15)
+ MOVD syscall15Args_a9(R9), R1
+ MOVD R1, (STACK_ARGS+3*8)(R15)
+ MOVD syscall15Args_a10(R9), R1
+ MOVD R1, (STACK_ARGS+4*8)(R15)
+ MOVD syscall15Args_a11(R9), R1
+ MOVD R1, (STACK_ARGS+5*8)(R15)
+ MOVD syscall15Args_a12(R9), R1
+ MOVD R1, (STACK_ARGS+6*8)(R15)
+ MOVD syscall15Args_a13(R9), R1
+ MOVD R1, (STACK_ARGS+7*8)(R15)
+ MOVD syscall15Args_a14(R9), R1
+ MOVD R1, (STACK_ARGS+8*8)(R15)
+ MOVD syscall15Args_a15(R9), R1
+ MOVD R1, (STACK_ARGS+9*8)(R15)
+
+ // Call function
+ MOVD syscall15Args_fn(R9), R1
+ BL (R1)
+
+ // Restore args pointer for storing results
+ MOVD ARGP_SAVE(R15), R9
+
+ // Store integer results back (R2, R3)
+ MOVD R2, syscall15Args_a1(R9)
+ MOVD R3, syscall15Args_a2(R9)
+
+ // Store float return values (F0, F2, F4, F6)
+ FMOVD F0, syscall15Args_f1(R9)
+ FMOVD F2, syscall15Args_f2(R9)
+ FMOVD F4, syscall15Args_f3(R9)
+ FMOVD F6, syscall15Args_f4(R9)
+
+ // Deallocate stack frame
+ ADD $STACK_SIZE, R15
+
+ // Restore callee-saved registers from caller's save area
+ LMG 48(R15), R6, R15
+
+ RET
diff --git a/sys_unix_s390x.s b/sys_unix_s390x.s
new file mode 100644
index 00000000..9eed6d29
--- /dev/null
+++ b/sys_unix_s390x.s
@@ -0,0 +1,109 @@
+// SPDX-License-Identifier: Apache-2.0
+// SPDX-FileCopyrightText: 2026 The Ebitengine Authors
+
+//go:build linux
+
+#include "textflag.h"
+#include "go_asm.h"
+#include "funcdata.h"
+
+// S390X ELF ABI callbackasm1 implementation
+// On entry, R0 contains the callback index (set by callbackasm)
+// NOTE: We use R0 instead of R11 because R11 is callee-saved on S390X.
+//
+// S390X stack frame layout:
+// 0(R15) - back chain
+// 48(R15) - register save area (R6-R15)
+// 160(R15) - parameter area
+//
+// S390X uses R2-R6 for integer arguments (5 registers) and F0,F2,F4,F6 for floats (4 registers).
+//
+// Our frame layout (total 264 bytes, 8-byte aligned):
+// 0(R15) - back chain
+// 48(R15) - saved R6-R15 (done by STMG)
+// 160(R15) - callbackArgs struct (32 bytes: index, args, result, stackArgs)
+// 192(R15) - args array start
+//
+// Args array layout:
+// - floats F0,F2,F4,F6 (32 bytes)
+// - ints R2-R6 (40 bytes)
+// Total args array: 72 bytes, ends at 264
+//
+// Stack args in caller's frame start at old_R15+160
+
+#define FRAME_SIZE 264
+#define CB_ARGS 160
+#define ARGS_ARRAY 192
+#define FLOAT_OFF 0
+#define INT_OFF 32
+
+TEXT callbackasm1(SB), NOSPLIT|NOFRAME, $0
+ NO_LOCAL_POINTERS
+
+ // On entry, the trampoline in zcallback_s390x.s left
+ // the callback index in R0 (NOT R11, since R11 is callee-saved).
+ // R6 contains the 5th integer argument.
+
+ // Save R6-R15 in caller's frame (per S390X ABI) BEFORE allocating our frame
+ // STMG stores R6's current value (the 5th arg) at 48(R15)
+ STMG R6, R15, 48(R15)
+
+ // Save current stack pointer (will be back chain)
+ MOVD R15, R1
+
+ // Allocate our stack frame
+ SUB $FRAME_SIZE, R15
+ MOVD R1, 0(R15) // back chain
+
+ // Save R0 (callback index) immediately - it's volatile
+ MOVD R0, (CB_ARGS+0)(R15)
+
+ // Save callback arguments to args array.
+ // Layout: floats first (F0,F2,F4,F6), then ints (R2-R6)
+ FMOVD F0, (ARGS_ARRAY+FLOAT_OFF+0*8)(R15)
+ FMOVD F2, (ARGS_ARRAY+FLOAT_OFF+1*8)(R15)
+ FMOVD F4, (ARGS_ARRAY+FLOAT_OFF+2*8)(R15)
+ FMOVD F6, (ARGS_ARRAY+FLOAT_OFF+3*8)(R15)
+
+ MOVD R2, (ARGS_ARRAY+INT_OFF+0*8)(R15)
+ MOVD R3, (ARGS_ARRAY+INT_OFF+1*8)(R15)
+ MOVD R4, (ARGS_ARRAY+INT_OFF+2*8)(R15)
+ MOVD R5, (ARGS_ARRAY+INT_OFF+3*8)(R15)
+
+ // R6 (5th int arg) was saved at 48(old_R15) by STMG
+ // old_R15 = current R15 + FRAME_SIZE, so R6 is at 48+FRAME_SIZE(R15) = 312(R15)
+ MOVD (48+FRAME_SIZE)(R15), R1
+ MOVD R1, (ARGS_ARRAY+INT_OFF+4*8)(R15)
+
+ // Finish setting up callbackArgs struct at CB_ARGS(R15)
+ // struct { index uintptr; args unsafe.Pointer; result uintptr; stackArgs unsafe.Pointer }
+ // Note: index was already saved earlier
+ ADD $ARGS_ARRAY, R15, R1
+ MOVD R1, (CB_ARGS+8)(R15) // args = address of register args
+ MOVD $0, (CB_ARGS+16)(R15) // result = 0
+
+ // stackArgs points to caller's stack arguments at old_R15+160 = R15+FRAME_SIZE+160
+ ADD $(FRAME_SIZE+160), R15, R1
+ MOVD R1, (CB_ARGS+24)(R15) // stackArgs = &caller_stack_args
+
+ // Call crosscall2 with arguments in registers:
+ // R2 = fn (from callbackWrap_call closure)
+ // R3 = frame (address of callbackArgs)
+ // R5 = ctxt (0)
+ MOVD ·callbackWrap_call(SB), R2
+ MOVD (R2), R2 // dereference closure to get fn
+ ADD $CB_ARGS, R15, R3 // frame = &callbackArgs
+ MOVD $0, R5 // ctxt = 0
+
+ BL crosscall2(SB)
+
+ // Get callback result into R2
+ MOVD (CB_ARGS+16)(R15), R2
+
+ // Deallocate frame
+ ADD $FRAME_SIZE, R15
+
+ // Restore R6-R15 from caller's frame
+ LMG 48(R15), R6, R15
+
+ RET
diff --git a/syscall_cgo_linux.go b/syscall_cgo_linux.go
index 0596d821..179167f4 100644
--- a/syscall_cgo_linux.go
+++ b/syscall_cgo_linux.go
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: Apache-2.0
// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
-//go:build cgo && !(386 || amd64 || arm || arm64 || loong64 || ppc64le || riscv64)
+//go:build cgo && !(386 || amd64 || arm || arm64 || loong64 || ppc64le || riscv64 || s390x)
package purego
@@ -17,5 +17,5 @@ func syscall_syscall15X(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a
}
func NewCallback(_ any) uintptr {
- panic("purego: NewCallback on Linux is only supported on 386/amd64/arm64/arm/loong64/ppc64le/riscv64")
+ panic("purego: NewCallback on Linux is only supported on 386/amd64/arm64/arm/loong64/ppc64le/riscv64/s390x")
}
diff --git a/syscall_sysv.go b/syscall_sysv.go
index d2aafbe8..e35b32e7 100644
--- a/syscall_sysv.go
+++ b/syscall_sysv.go
@@ -1,7 +1,8 @@
// SPDX-License-Identifier: Apache-2.0
// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
-//go:build darwin || freebsd || (linux && (386 || amd64 || arm || arm64 || loong64 || ppc64le || riscv64)) || netbsd
+// TODO: remove s390x cgo dependency once golang/go#77449 is resolved
+//go:build darwin || freebsd || (linux && (386 || amd64 || arm || arm64 || loong64 || ppc64le || riscv64 || (cgo && s390x))) || netbsd
package purego
@@ -164,15 +165,25 @@ func callbackWrap(a *callbackArgs) {
// Darwin ARM64: read from packed stack with proper alignment
args[i] = callbackArgFromStack(a.args, stackSlot, &stackByteOffset, inType)
} else if stackFrame != nil {
- // ppc64le: stack args are in separate stackFrame
- args[i] = reflect.NewAt(inType, unsafe.Pointer(&stackFrame[stackSlot])).Elem()
+ // ppc64le/s390x: stack args are in separate stackFrame
+ if runtime.GOARCH == "s390x" {
+ // s390x big-endian: sub-8-byte values are right-justified
+ args[i] = callbackArgFromSlotBigEndian(unsafe.Pointer(&stackFrame[stackSlot]), inType)
+ } else {
+ args[i] = reflect.NewAt(inType, unsafe.Pointer(&stackFrame[stackSlot])).Elem()
+ }
stackSlot += slots
} else {
args[i] = reflect.NewAt(inType, unsafe.Pointer(&frame[stackSlot])).Elem()
stackSlot += slots
}
} else {
- args[i] = reflect.NewAt(inType, unsafe.Pointer(&frame[floatsN])).Elem()
+ if runtime.GOARCH == "s390x" {
+ // s390x big-endian: float32 is right-justified in 8-byte FPR slot
+ args[i] = callbackArgFromSlotBigEndian(unsafe.Pointer(&frame[floatsN]), inType)
+ } else {
+ args[i] = reflect.NewAt(inType, unsafe.Pointer(&frame[floatsN])).Elem()
+ }
}
floatsN += slots
case reflect.Struct:
@@ -185,8 +196,13 @@ func callbackWrap(a *callbackArgs) {
// Darwin ARM64: read from packed stack with proper alignment
args[i] = callbackArgFromStack(a.args, stackSlot, &stackByteOffset, inType)
} else if stackFrame != nil {
- // ppc64le: stack args are in separate stackFrame
- args[i] = reflect.NewAt(inType, unsafe.Pointer(&stackFrame[stackSlot])).Elem()
+ // ppc64le/s390x: stack args are in separate stackFrame
+ if runtime.GOARCH == "s390x" {
+ // s390x big-endian: sub-8-byte values are right-justified
+ args[i] = callbackArgFromSlotBigEndian(unsafe.Pointer(&stackFrame[stackSlot]), inType)
+ } else {
+ args[i] = reflect.NewAt(inType, unsafe.Pointer(&stackFrame[stackSlot])).Elem()
+ }
stackSlot += slots
} else {
args[i] = reflect.NewAt(inType, unsafe.Pointer(&frame[stackSlot])).Elem()
@@ -195,7 +211,12 @@ func callbackWrap(a *callbackArgs) {
} else {
// the integers begin after the floats in frame
pos := intsN + numOfFloatRegisters()
- args[i] = reflect.NewAt(inType, unsafe.Pointer(&frame[pos])).Elem()
+ if runtime.GOARCH == "s390x" {
+ // s390x big-endian: sub-8-byte values are right-justified in GPR slot
+ args[i] = callbackArgFromSlotBigEndian(unsafe.Pointer(&frame[pos]), inType)
+ } else {
+ args[i] = reflect.NewAt(inType, unsafe.Pointer(&frame[pos])).Elem()
+ }
}
intsN += slots
}
@@ -246,6 +267,27 @@ func callbackArgFromStack(argsBase unsafe.Pointer, stackSlot int, stackByteOffse
return reflect.NewAt(inType, ptr).Elem()
}
+// callbackArgFromSlotBigEndian reads an argument from an 8-byte slot on big-endian architectures.
+// On s390x:
+// - Integer types are right-justified in GPRs: sub-8-byte values are at offset (8 - size)
+// - Float32 in FPRs is left-justified: stored in upper 32 bits, so at offset 0
+// - Float64 occupies the full 8-byte slot
+func callbackArgFromSlotBigEndian(slotPtr unsafe.Pointer, inType reflect.Type) reflect.Value {
+ size := inType.Size()
+ if size >= 8 {
+ // 8-byte values occupy the entire slot
+ return reflect.NewAt(inType, slotPtr).Elem()
+ }
+ // Float32 is left-justified in FPRs (upper 32 bits), so offset is 0
+ if inType.Kind() == reflect.Float32 {
+ return reflect.NewAt(inType, slotPtr).Elem()
+ }
+ // Integer types are right-justified: offset = 8 - size
+ offset := 8 - size
+ ptr := unsafe.Add(slotPtr, offset)
+ return reflect.NewAt(inType, ptr).Elem()
+}
+
// callbackasmAddr returns address of runtime.callbackasm
// function adjusted by i.
// On x86 and amd64, runtime.callbackasm is a series of CALL instructions,
@@ -270,6 +312,9 @@ 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
+ case "s390x":
+ // On S390X, each entry is LGHI (4 bytes) + JG (6 bytes)
+ entrySize = 10
}
return callbackasmABI0 + uintptr(i*entrySize)
}
diff --git a/syscall_sysv_ppc64le.go b/syscall_sysv_stackargs.go
similarity index 95%
rename from syscall_sysv_ppc64le.go
rename to syscall_sysv_stackargs.go
index aebd392d..87ed9811 100644
--- a/syscall_sysv_ppc64le.go
+++ b/syscall_sysv_stackargs.go
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: Apache-2.0
// SPDX-FileCopyrightText: 2026 The Ebitengine Authors
-//go:build linux
+//go:build linux && (ppc64le || s390x)
package purego
diff --git a/wincallback.go b/wincallback.go
index 9ce5ae5d..86fb2a4d 100644
--- a/wincallback.go
+++ b/wincallback.go
@@ -221,6 +221,35 @@ TEXT callbackasm(SB), NOSPLIT|NOFRAME, $0
}
}
+func genasmS390x() {
+ var buf bytes.Buffer
+
+ buf.WriteString(`// Code generated by wincallback.go using 'go generate'. DO NOT EDIT.
+
+//go:build linux
+
+// External code calls into callbackasm at an offset corresponding
+// to the callback index. Callbackasm is a table of MOVD and BR instructions.
+// The MOVD instruction loads R0 with the callback index, and the
+// BR instruction branches to callbackasm1.
+// callbackasm1 takes the callback index from R0 and
+// indexes into an array that stores information about each callback.
+// It then calls the Go implementation for that callback.
+// NOTE: We use R0 instead of R11 because R11 is callee-saved on S390X.
+#include "textflag.h"
+
+TEXT callbackasm(SB), NOSPLIT|NOFRAME, $0
+`)
+ for i := 0; i < maxCallback; i++ {
+ fmt.Fprintf(&buf, "\tMOVD $%d, R0\n", i)
+ buf.WriteString("\tBR callbackasm1(SB)\n")
+ }
+ if err := os.WriteFile("zcallback_s390x.s", buf.Bytes(), 0644); err != nil {
+ fmt.Fprintf(os.Stderr, "wincallback: %s\n", err)
+ os.Exit(2)
+ }
+}
+
func main() {
genasm386()
genasmAmd64()
@@ -229,4 +258,5 @@ func main() {
genasmLoong64()
genasmPpc64le()
genasmRiscv64()
+ genasmS390x()
}
diff --git a/zcallback_s390x.s b/zcallback_s390x.s
new file mode 100644
index 00000000..6b5e2b03
--- /dev/null
+++ b/zcallback_s390x.s
@@ -0,0 +1,4015 @@
+// Code generated by wincallback.go using 'go generate'. DO NOT EDIT.
+
+//go:build linux
+
+// External code calls into callbackasm at an offset corresponding
+// to the callback index. Callbackasm is a table of MOVD and BR instructions.
+// The MOVD instruction loads R0 with the callback index, and the
+// BR instruction branches to callbackasm1.
+// callbackasm1 takes the callback index from R0 and
+// indexes into an array that stores information about each callback.
+// It then calls the Go implementation for that callback.
+// NOTE: We use R0 instead of R11 because R11 is callee-saved on S390X.
+#include "textflag.h"
+
+TEXT callbackasm(SB), NOSPLIT|NOFRAME, $0
+ MOVD $0, R0
+ BR callbackasm1(SB)
+ MOVD $1, R0
+ BR callbackasm1(SB)
+ MOVD $2, R0
+ BR callbackasm1(SB)
+ MOVD $3, R0
+ BR callbackasm1(SB)
+ MOVD $4, R0
+ BR callbackasm1(SB)
+ MOVD $5, R0
+ BR callbackasm1(SB)
+ MOVD $6, R0
+ BR callbackasm1(SB)
+ MOVD $7, R0
+ BR callbackasm1(SB)
+ MOVD $8, R0
+ BR callbackasm1(SB)
+ MOVD $9, R0
+ BR callbackasm1(SB)
+ MOVD $10, R0
+ BR callbackasm1(SB)
+ MOVD $11, R0
+ BR callbackasm1(SB)
+ MOVD $12, R0
+ BR callbackasm1(SB)
+ MOVD $13, R0
+ BR callbackasm1(SB)
+ MOVD $14, R0
+ BR callbackasm1(SB)
+ MOVD $15, R0
+ BR callbackasm1(SB)
+ MOVD $16, R0
+ BR callbackasm1(SB)
+ MOVD $17, R0
+ BR callbackasm1(SB)
+ MOVD $18, R0
+ BR callbackasm1(SB)
+ MOVD $19, R0
+ BR callbackasm1(SB)
+ MOVD $20, R0
+ BR callbackasm1(SB)
+ MOVD $21, R0
+ BR callbackasm1(SB)
+ MOVD $22, R0
+ BR callbackasm1(SB)
+ MOVD $23, R0
+ BR callbackasm1(SB)
+ MOVD $24, R0
+ BR callbackasm1(SB)
+ MOVD $25, R0
+ BR callbackasm1(SB)
+ MOVD $26, R0
+ BR callbackasm1(SB)
+ MOVD $27, R0
+ BR callbackasm1(SB)
+ MOVD $28, R0
+ BR callbackasm1(SB)
+ MOVD $29, R0
+ BR callbackasm1(SB)
+ MOVD $30, R0
+ BR callbackasm1(SB)
+ MOVD $31, R0
+ BR callbackasm1(SB)
+ MOVD $32, R0
+ BR callbackasm1(SB)
+ MOVD $33, R0
+ BR callbackasm1(SB)
+ MOVD $34, R0
+ BR callbackasm1(SB)
+ MOVD $35, R0
+ BR callbackasm1(SB)
+ MOVD $36, R0
+ BR callbackasm1(SB)
+ MOVD $37, R0
+ BR callbackasm1(SB)
+ MOVD $38, R0
+ BR callbackasm1(SB)
+ MOVD $39, R0
+ BR callbackasm1(SB)
+ MOVD $40, R0
+ BR callbackasm1(SB)
+ MOVD $41, R0
+ BR callbackasm1(SB)
+ MOVD $42, R0
+ BR callbackasm1(SB)
+ MOVD $43, R0
+ BR callbackasm1(SB)
+ MOVD $44, R0
+ BR callbackasm1(SB)
+ MOVD $45, R0
+ BR callbackasm1(SB)
+ MOVD $46, R0
+ BR callbackasm1(SB)
+ MOVD $47, R0
+ BR callbackasm1(SB)
+ MOVD $48, R0
+ BR callbackasm1(SB)
+ MOVD $49, R0
+ BR callbackasm1(SB)
+ MOVD $50, R0
+ BR callbackasm1(SB)
+ MOVD $51, R0
+ BR callbackasm1(SB)
+ MOVD $52, R0
+ BR callbackasm1(SB)
+ MOVD $53, R0
+ BR callbackasm1(SB)
+ MOVD $54, R0
+ BR callbackasm1(SB)
+ MOVD $55, R0
+ BR callbackasm1(SB)
+ MOVD $56, R0
+ BR callbackasm1(SB)
+ MOVD $57, R0
+ BR callbackasm1(SB)
+ MOVD $58, R0
+ BR callbackasm1(SB)
+ MOVD $59, R0
+ BR callbackasm1(SB)
+ MOVD $60, R0
+ BR callbackasm1(SB)
+ MOVD $61, R0
+ BR callbackasm1(SB)
+ MOVD $62, R0
+ BR callbackasm1(SB)
+ MOVD $63, R0
+ BR callbackasm1(SB)
+ MOVD $64, R0
+ BR callbackasm1(SB)
+ MOVD $65, R0
+ BR callbackasm1(SB)
+ MOVD $66, R0
+ BR callbackasm1(SB)
+ MOVD $67, R0
+ BR callbackasm1(SB)
+ MOVD $68, R0
+ BR callbackasm1(SB)
+ MOVD $69, R0
+ BR callbackasm1(SB)
+ MOVD $70, R0
+ BR callbackasm1(SB)
+ MOVD $71, R0
+ BR callbackasm1(SB)
+ MOVD $72, R0
+ BR callbackasm1(SB)
+ MOVD $73, R0
+ BR callbackasm1(SB)
+ MOVD $74, R0
+ BR callbackasm1(SB)
+ MOVD $75, R0
+ BR callbackasm1(SB)
+ MOVD $76, R0
+ BR callbackasm1(SB)
+ MOVD $77, R0
+ BR callbackasm1(SB)
+ MOVD $78, R0
+ BR callbackasm1(SB)
+ MOVD $79, R0
+ BR callbackasm1(SB)
+ MOVD $80, R0
+ BR callbackasm1(SB)
+ MOVD $81, R0
+ BR callbackasm1(SB)
+ MOVD $82, R0
+ BR callbackasm1(SB)
+ MOVD $83, R0
+ BR callbackasm1(SB)
+ MOVD $84, R0
+ BR callbackasm1(SB)
+ MOVD $85, R0
+ BR callbackasm1(SB)
+ MOVD $86, R0
+ BR callbackasm1(SB)
+ MOVD $87, R0
+ BR callbackasm1(SB)
+ MOVD $88, R0
+ BR callbackasm1(SB)
+ MOVD $89, R0
+ BR callbackasm1(SB)
+ MOVD $90, R0
+ BR callbackasm1(SB)
+ MOVD $91, R0
+ BR callbackasm1(SB)
+ MOVD $92, R0
+ BR callbackasm1(SB)
+ MOVD $93, R0
+ BR callbackasm1(SB)
+ MOVD $94, R0
+ BR callbackasm1(SB)
+ MOVD $95, R0
+ BR callbackasm1(SB)
+ MOVD $96, R0
+ BR callbackasm1(SB)
+ MOVD $97, R0
+ BR callbackasm1(SB)
+ MOVD $98, R0
+ BR callbackasm1(SB)
+ MOVD $99, R0
+ BR callbackasm1(SB)
+ MOVD $100, R0
+ BR callbackasm1(SB)
+ MOVD $101, R0
+ BR callbackasm1(SB)
+ MOVD $102, R0
+ BR callbackasm1(SB)
+ MOVD $103, R0
+ BR callbackasm1(SB)
+ MOVD $104, R0
+ BR callbackasm1(SB)
+ MOVD $105, R0
+ BR callbackasm1(SB)
+ MOVD $106, R0
+ BR callbackasm1(SB)
+ MOVD $107, R0
+ BR callbackasm1(SB)
+ MOVD $108, R0
+ BR callbackasm1(SB)
+ MOVD $109, R0
+ BR callbackasm1(SB)
+ MOVD $110, R0
+ BR callbackasm1(SB)
+ MOVD $111, R0
+ BR callbackasm1(SB)
+ MOVD $112, R0
+ BR callbackasm1(SB)
+ MOVD $113, R0
+ BR callbackasm1(SB)
+ MOVD $114, R0
+ BR callbackasm1(SB)
+ MOVD $115, R0
+ BR callbackasm1(SB)
+ MOVD $116, R0
+ BR callbackasm1(SB)
+ MOVD $117, R0
+ BR callbackasm1(SB)
+ MOVD $118, R0
+ BR callbackasm1(SB)
+ MOVD $119, R0
+ BR callbackasm1(SB)
+ MOVD $120, R0
+ BR callbackasm1(SB)
+ MOVD $121, R0
+ BR callbackasm1(SB)
+ MOVD $122, R0
+ BR callbackasm1(SB)
+ MOVD $123, R0
+ BR callbackasm1(SB)
+ MOVD $124, R0
+ BR callbackasm1(SB)
+ MOVD $125, R0
+ BR callbackasm1(SB)
+ MOVD $126, R0
+ BR callbackasm1(SB)
+ MOVD $127, R0
+ BR callbackasm1(SB)
+ MOVD $128, R0
+ BR callbackasm1(SB)
+ MOVD $129, R0
+ BR callbackasm1(SB)
+ MOVD $130, R0
+ BR callbackasm1(SB)
+ MOVD $131, R0
+ BR callbackasm1(SB)
+ MOVD $132, R0
+ BR callbackasm1(SB)
+ MOVD $133, R0
+ BR callbackasm1(SB)
+ MOVD $134, R0
+ BR callbackasm1(SB)
+ MOVD $135, R0
+ BR callbackasm1(SB)
+ MOVD $136, R0
+ BR callbackasm1(SB)
+ MOVD $137, R0
+ BR callbackasm1(SB)
+ MOVD $138, R0
+ BR callbackasm1(SB)
+ MOVD $139, R0
+ BR callbackasm1(SB)
+ MOVD $140, R0
+ BR callbackasm1(SB)
+ MOVD $141, R0
+ BR callbackasm1(SB)
+ MOVD $142, R0
+ BR callbackasm1(SB)
+ MOVD $143, R0
+ BR callbackasm1(SB)
+ MOVD $144, R0
+ BR callbackasm1(SB)
+ MOVD $145, R0
+ BR callbackasm1(SB)
+ MOVD $146, R0
+ BR callbackasm1(SB)
+ MOVD $147, R0
+ BR callbackasm1(SB)
+ MOVD $148, R0
+ BR callbackasm1(SB)
+ MOVD $149, R0
+ BR callbackasm1(SB)
+ MOVD $150, R0
+ BR callbackasm1(SB)
+ MOVD $151, R0
+ BR callbackasm1(SB)
+ MOVD $152, R0
+ BR callbackasm1(SB)
+ MOVD $153, R0
+ BR callbackasm1(SB)
+ MOVD $154, R0
+ BR callbackasm1(SB)
+ MOVD $155, R0
+ BR callbackasm1(SB)
+ MOVD $156, R0
+ BR callbackasm1(SB)
+ MOVD $157, R0
+ BR callbackasm1(SB)
+ MOVD $158, R0
+ BR callbackasm1(SB)
+ MOVD $159, R0
+ BR callbackasm1(SB)
+ MOVD $160, R0
+ BR callbackasm1(SB)
+ MOVD $161, R0
+ BR callbackasm1(SB)
+ MOVD $162, R0
+ BR callbackasm1(SB)
+ MOVD $163, R0
+ BR callbackasm1(SB)
+ MOVD $164, R0
+ BR callbackasm1(SB)
+ MOVD $165, R0
+ BR callbackasm1(SB)
+ MOVD $166, R0
+ BR callbackasm1(SB)
+ MOVD $167, R0
+ BR callbackasm1(SB)
+ MOVD $168, R0
+ BR callbackasm1(SB)
+ MOVD $169, R0
+ BR callbackasm1(SB)
+ MOVD $170, R0
+ BR callbackasm1(SB)
+ MOVD $171, R0
+ BR callbackasm1(SB)
+ MOVD $172, R0
+ BR callbackasm1(SB)
+ MOVD $173, R0
+ BR callbackasm1(SB)
+ MOVD $174, R0
+ BR callbackasm1(SB)
+ MOVD $175, R0
+ BR callbackasm1(SB)
+ MOVD $176, R0
+ BR callbackasm1(SB)
+ MOVD $177, R0
+ BR callbackasm1(SB)
+ MOVD $178, R0
+ BR callbackasm1(SB)
+ MOVD $179, R0
+ BR callbackasm1(SB)
+ MOVD $180, R0
+ BR callbackasm1(SB)
+ MOVD $181, R0
+ BR callbackasm1(SB)
+ MOVD $182, R0
+ BR callbackasm1(SB)
+ MOVD $183, R0
+ BR callbackasm1(SB)
+ MOVD $184, R0
+ BR callbackasm1(SB)
+ MOVD $185, R0
+ BR callbackasm1(SB)
+ MOVD $186, R0
+ BR callbackasm1(SB)
+ MOVD $187, R0
+ BR callbackasm1(SB)
+ MOVD $188, R0
+ BR callbackasm1(SB)
+ MOVD $189, R0
+ BR callbackasm1(SB)
+ MOVD $190, R0
+ BR callbackasm1(SB)
+ MOVD $191, R0
+ BR callbackasm1(SB)
+ MOVD $192, R0
+ BR callbackasm1(SB)
+ MOVD $193, R0
+ BR callbackasm1(SB)
+ MOVD $194, R0
+ BR callbackasm1(SB)
+ MOVD $195, R0
+ BR callbackasm1(SB)
+ MOVD $196, R0
+ BR callbackasm1(SB)
+ MOVD $197, R0
+ BR callbackasm1(SB)
+ MOVD $198, R0
+ BR callbackasm1(SB)
+ MOVD $199, R0
+ BR callbackasm1(SB)
+ MOVD $200, R0
+ BR callbackasm1(SB)
+ MOVD $201, R0
+ BR callbackasm1(SB)
+ MOVD $202, R0
+ BR callbackasm1(SB)
+ MOVD $203, R0
+ BR callbackasm1(SB)
+ MOVD $204, R0
+ BR callbackasm1(SB)
+ MOVD $205, R0
+ BR callbackasm1(SB)
+ MOVD $206, R0
+ BR callbackasm1(SB)
+ MOVD $207, R0
+ BR callbackasm1(SB)
+ MOVD $208, R0
+ BR callbackasm1(SB)
+ MOVD $209, R0
+ BR callbackasm1(SB)
+ MOVD $210, R0
+ BR callbackasm1(SB)
+ MOVD $211, R0
+ BR callbackasm1(SB)
+ MOVD $212, R0
+ BR callbackasm1(SB)
+ MOVD $213, R0
+ BR callbackasm1(SB)
+ MOVD $214, R0
+ BR callbackasm1(SB)
+ MOVD $215, R0
+ BR callbackasm1(SB)
+ MOVD $216, R0
+ BR callbackasm1(SB)
+ MOVD $217, R0
+ BR callbackasm1(SB)
+ MOVD $218, R0
+ BR callbackasm1(SB)
+ MOVD $219, R0
+ BR callbackasm1(SB)
+ MOVD $220, R0
+ BR callbackasm1(SB)
+ MOVD $221, R0
+ BR callbackasm1(SB)
+ MOVD $222, R0
+ BR callbackasm1(SB)
+ MOVD $223, R0
+ BR callbackasm1(SB)
+ MOVD $224, R0
+ BR callbackasm1(SB)
+ MOVD $225, R0
+ BR callbackasm1(SB)
+ MOVD $226, R0
+ BR callbackasm1(SB)
+ MOVD $227, R0
+ BR callbackasm1(SB)
+ MOVD $228, R0
+ BR callbackasm1(SB)
+ MOVD $229, R0
+ BR callbackasm1(SB)
+ MOVD $230, R0
+ BR callbackasm1(SB)
+ MOVD $231, R0
+ BR callbackasm1(SB)
+ MOVD $232, R0
+ BR callbackasm1(SB)
+ MOVD $233, R0
+ BR callbackasm1(SB)
+ MOVD $234, R0
+ BR callbackasm1(SB)
+ MOVD $235, R0
+ BR callbackasm1(SB)
+ MOVD $236, R0
+ BR callbackasm1(SB)
+ MOVD $237, R0
+ BR callbackasm1(SB)
+ MOVD $238, R0
+ BR callbackasm1(SB)
+ MOVD $239, R0
+ BR callbackasm1(SB)
+ MOVD $240, R0
+ BR callbackasm1(SB)
+ MOVD $241, R0
+ BR callbackasm1(SB)
+ MOVD $242, R0
+ BR callbackasm1(SB)
+ MOVD $243, R0
+ BR callbackasm1(SB)
+ MOVD $244, R0
+ BR callbackasm1(SB)
+ MOVD $245, R0
+ BR callbackasm1(SB)
+ MOVD $246, R0
+ BR callbackasm1(SB)
+ MOVD $247, R0
+ BR callbackasm1(SB)
+ MOVD $248, R0
+ BR callbackasm1(SB)
+ MOVD $249, R0
+ BR callbackasm1(SB)
+ MOVD $250, R0
+ BR callbackasm1(SB)
+ MOVD $251, R0
+ BR callbackasm1(SB)
+ MOVD $252, R0
+ BR callbackasm1(SB)
+ MOVD $253, R0
+ BR callbackasm1(SB)
+ MOVD $254, R0
+ BR callbackasm1(SB)
+ MOVD $255, R0
+ BR callbackasm1(SB)
+ MOVD $256, R0
+ BR callbackasm1(SB)
+ MOVD $257, R0
+ BR callbackasm1(SB)
+ MOVD $258, R0
+ BR callbackasm1(SB)
+ MOVD $259, R0
+ BR callbackasm1(SB)
+ MOVD $260, R0
+ BR callbackasm1(SB)
+ MOVD $261, R0
+ BR callbackasm1(SB)
+ MOVD $262, R0
+ BR callbackasm1(SB)
+ MOVD $263, R0
+ BR callbackasm1(SB)
+ MOVD $264, R0
+ BR callbackasm1(SB)
+ MOVD $265, R0
+ BR callbackasm1(SB)
+ MOVD $266, R0
+ BR callbackasm1(SB)
+ MOVD $267, R0
+ BR callbackasm1(SB)
+ MOVD $268, R0
+ BR callbackasm1(SB)
+ MOVD $269, R0
+ BR callbackasm1(SB)
+ MOVD $270, R0
+ BR callbackasm1(SB)
+ MOVD $271, R0
+ BR callbackasm1(SB)
+ MOVD $272, R0
+ BR callbackasm1(SB)
+ MOVD $273, R0
+ BR callbackasm1(SB)
+ MOVD $274, R0
+ BR callbackasm1(SB)
+ MOVD $275, R0
+ BR callbackasm1(SB)
+ MOVD $276, R0
+ BR callbackasm1(SB)
+ MOVD $277, R0
+ BR callbackasm1(SB)
+ MOVD $278, R0
+ BR callbackasm1(SB)
+ MOVD $279, R0
+ BR callbackasm1(SB)
+ MOVD $280, R0
+ BR callbackasm1(SB)
+ MOVD $281, R0
+ BR callbackasm1(SB)
+ MOVD $282, R0
+ BR callbackasm1(SB)
+ MOVD $283, R0
+ BR callbackasm1(SB)
+ MOVD $284, R0
+ BR callbackasm1(SB)
+ MOVD $285, R0
+ BR callbackasm1(SB)
+ MOVD $286, R0
+ BR callbackasm1(SB)
+ MOVD $287, R0
+ BR callbackasm1(SB)
+ MOVD $288, R0
+ BR callbackasm1(SB)
+ MOVD $289, R0
+ BR callbackasm1(SB)
+ MOVD $290, R0
+ BR callbackasm1(SB)
+ MOVD $291, R0
+ BR callbackasm1(SB)
+ MOVD $292, R0
+ BR callbackasm1(SB)
+ MOVD $293, R0
+ BR callbackasm1(SB)
+ MOVD $294, R0
+ BR callbackasm1(SB)
+ MOVD $295, R0
+ BR callbackasm1(SB)
+ MOVD $296, R0
+ BR callbackasm1(SB)
+ MOVD $297, R0
+ BR callbackasm1(SB)
+ MOVD $298, R0
+ BR callbackasm1(SB)
+ MOVD $299, R0
+ BR callbackasm1(SB)
+ MOVD $300, R0
+ BR callbackasm1(SB)
+ MOVD $301, R0
+ BR callbackasm1(SB)
+ MOVD $302, R0
+ BR callbackasm1(SB)
+ MOVD $303, R0
+ BR callbackasm1(SB)
+ MOVD $304, R0
+ BR callbackasm1(SB)
+ MOVD $305, R0
+ BR callbackasm1(SB)
+ MOVD $306, R0
+ BR callbackasm1(SB)
+ MOVD $307, R0
+ BR callbackasm1(SB)
+ MOVD $308, R0
+ BR callbackasm1(SB)
+ MOVD $309, R0
+ BR callbackasm1(SB)
+ MOVD $310, R0
+ BR callbackasm1(SB)
+ MOVD $311, R0
+ BR callbackasm1(SB)
+ MOVD $312, R0
+ BR callbackasm1(SB)
+ MOVD $313, R0
+ BR callbackasm1(SB)
+ MOVD $314, R0
+ BR callbackasm1(SB)
+ MOVD $315, R0
+ BR callbackasm1(SB)
+ MOVD $316, R0
+ BR callbackasm1(SB)
+ MOVD $317, R0
+ BR callbackasm1(SB)
+ MOVD $318, R0
+ BR callbackasm1(SB)
+ MOVD $319, R0
+ BR callbackasm1(SB)
+ MOVD $320, R0
+ BR callbackasm1(SB)
+ MOVD $321, R0
+ BR callbackasm1(SB)
+ MOVD $322, R0
+ BR callbackasm1(SB)
+ MOVD $323, R0
+ BR callbackasm1(SB)
+ MOVD $324, R0
+ BR callbackasm1(SB)
+ MOVD $325, R0
+ BR callbackasm1(SB)
+ MOVD $326, R0
+ BR callbackasm1(SB)
+ MOVD $327, R0
+ BR callbackasm1(SB)
+ MOVD $328, R0
+ BR callbackasm1(SB)
+ MOVD $329, R0
+ BR callbackasm1(SB)
+ MOVD $330, R0
+ BR callbackasm1(SB)
+ MOVD $331, R0
+ BR callbackasm1(SB)
+ MOVD $332, R0
+ BR callbackasm1(SB)
+ MOVD $333, R0
+ BR callbackasm1(SB)
+ MOVD $334, R0
+ BR callbackasm1(SB)
+ MOVD $335, R0
+ BR callbackasm1(SB)
+ MOVD $336, R0
+ BR callbackasm1(SB)
+ MOVD $337, R0
+ BR callbackasm1(SB)
+ MOVD $338, R0
+ BR callbackasm1(SB)
+ MOVD $339, R0
+ BR callbackasm1(SB)
+ MOVD $340, R0
+ BR callbackasm1(SB)
+ MOVD $341, R0
+ BR callbackasm1(SB)
+ MOVD $342, R0
+ BR callbackasm1(SB)
+ MOVD $343, R0
+ BR callbackasm1(SB)
+ MOVD $344, R0
+ BR callbackasm1(SB)
+ MOVD $345, R0
+ BR callbackasm1(SB)
+ MOVD $346, R0
+ BR callbackasm1(SB)
+ MOVD $347, R0
+ BR callbackasm1(SB)
+ MOVD $348, R0
+ BR callbackasm1(SB)
+ MOVD $349, R0
+ BR callbackasm1(SB)
+ MOVD $350, R0
+ BR callbackasm1(SB)
+ MOVD $351, R0
+ BR callbackasm1(SB)
+ MOVD $352, R0
+ BR callbackasm1(SB)
+ MOVD $353, R0
+ BR callbackasm1(SB)
+ MOVD $354, R0
+ BR callbackasm1(SB)
+ MOVD $355, R0
+ BR callbackasm1(SB)
+ MOVD $356, R0
+ BR callbackasm1(SB)
+ MOVD $357, R0
+ BR callbackasm1(SB)
+ MOVD $358, R0
+ BR callbackasm1(SB)
+ MOVD $359, R0
+ BR callbackasm1(SB)
+ MOVD $360, R0
+ BR callbackasm1(SB)
+ MOVD $361, R0
+ BR callbackasm1(SB)
+ MOVD $362, R0
+ BR callbackasm1(SB)
+ MOVD $363, R0
+ BR callbackasm1(SB)
+ MOVD $364, R0
+ BR callbackasm1(SB)
+ MOVD $365, R0
+ BR callbackasm1(SB)
+ MOVD $366, R0
+ BR callbackasm1(SB)
+ MOVD $367, R0
+ BR callbackasm1(SB)
+ MOVD $368, R0
+ BR callbackasm1(SB)
+ MOVD $369, R0
+ BR callbackasm1(SB)
+ MOVD $370, R0
+ BR callbackasm1(SB)
+ MOVD $371, R0
+ BR callbackasm1(SB)
+ MOVD $372, R0
+ BR callbackasm1(SB)
+ MOVD $373, R0
+ BR callbackasm1(SB)
+ MOVD $374, R0
+ BR callbackasm1(SB)
+ MOVD $375, R0
+ BR callbackasm1(SB)
+ MOVD $376, R0
+ BR callbackasm1(SB)
+ MOVD $377, R0
+ BR callbackasm1(SB)
+ MOVD $378, R0
+ BR callbackasm1(SB)
+ MOVD $379, R0
+ BR callbackasm1(SB)
+ MOVD $380, R0
+ BR callbackasm1(SB)
+ MOVD $381, R0
+ BR callbackasm1(SB)
+ MOVD $382, R0
+ BR callbackasm1(SB)
+ MOVD $383, R0
+ BR callbackasm1(SB)
+ MOVD $384, R0
+ BR callbackasm1(SB)
+ MOVD $385, R0
+ BR callbackasm1(SB)
+ MOVD $386, R0
+ BR callbackasm1(SB)
+ MOVD $387, R0
+ BR callbackasm1(SB)
+ MOVD $388, R0
+ BR callbackasm1(SB)
+ MOVD $389, R0
+ BR callbackasm1(SB)
+ MOVD $390, R0
+ BR callbackasm1(SB)
+ MOVD $391, R0
+ BR callbackasm1(SB)
+ MOVD $392, R0
+ BR callbackasm1(SB)
+ MOVD $393, R0
+ BR callbackasm1(SB)
+ MOVD $394, R0
+ BR callbackasm1(SB)
+ MOVD $395, R0
+ BR callbackasm1(SB)
+ MOVD $396, R0
+ BR callbackasm1(SB)
+ MOVD $397, R0
+ BR callbackasm1(SB)
+ MOVD $398, R0
+ BR callbackasm1(SB)
+ MOVD $399, R0
+ BR callbackasm1(SB)
+ MOVD $400, R0
+ BR callbackasm1(SB)
+ MOVD $401, R0
+ BR callbackasm1(SB)
+ MOVD $402, R0
+ BR callbackasm1(SB)
+ MOVD $403, R0
+ BR callbackasm1(SB)
+ MOVD $404, R0
+ BR callbackasm1(SB)
+ MOVD $405, R0
+ BR callbackasm1(SB)
+ MOVD $406, R0
+ BR callbackasm1(SB)
+ MOVD $407, R0
+ BR callbackasm1(SB)
+ MOVD $408, R0
+ BR callbackasm1(SB)
+ MOVD $409, R0
+ BR callbackasm1(SB)
+ MOVD $410, R0
+ BR callbackasm1(SB)
+ MOVD $411, R0
+ BR callbackasm1(SB)
+ MOVD $412, R0
+ BR callbackasm1(SB)
+ MOVD $413, R0
+ BR callbackasm1(SB)
+ MOVD $414, R0
+ BR callbackasm1(SB)
+ MOVD $415, R0
+ BR callbackasm1(SB)
+ MOVD $416, R0
+ BR callbackasm1(SB)
+ MOVD $417, R0
+ BR callbackasm1(SB)
+ MOVD $418, R0
+ BR callbackasm1(SB)
+ MOVD $419, R0
+ BR callbackasm1(SB)
+ MOVD $420, R0
+ BR callbackasm1(SB)
+ MOVD $421, R0
+ BR callbackasm1(SB)
+ MOVD $422, R0
+ BR callbackasm1(SB)
+ MOVD $423, R0
+ BR callbackasm1(SB)
+ MOVD $424, R0
+ BR callbackasm1(SB)
+ MOVD $425, R0
+ BR callbackasm1(SB)
+ MOVD $426, R0
+ BR callbackasm1(SB)
+ MOVD $427, R0
+ BR callbackasm1(SB)
+ MOVD $428, R0
+ BR callbackasm1(SB)
+ MOVD $429, R0
+ BR callbackasm1(SB)
+ MOVD $430, R0
+ BR callbackasm1(SB)
+ MOVD $431, R0
+ BR callbackasm1(SB)
+ MOVD $432, R0
+ BR callbackasm1(SB)
+ MOVD $433, R0
+ BR callbackasm1(SB)
+ MOVD $434, R0
+ BR callbackasm1(SB)
+ MOVD $435, R0
+ BR callbackasm1(SB)
+ MOVD $436, R0
+ BR callbackasm1(SB)
+ MOVD $437, R0
+ BR callbackasm1(SB)
+ MOVD $438, R0
+ BR callbackasm1(SB)
+ MOVD $439, R0
+ BR callbackasm1(SB)
+ MOVD $440, R0
+ BR callbackasm1(SB)
+ MOVD $441, R0
+ BR callbackasm1(SB)
+ MOVD $442, R0
+ BR callbackasm1(SB)
+ MOVD $443, R0
+ BR callbackasm1(SB)
+ MOVD $444, R0
+ BR callbackasm1(SB)
+ MOVD $445, R0
+ BR callbackasm1(SB)
+ MOVD $446, R0
+ BR callbackasm1(SB)
+ MOVD $447, R0
+ BR callbackasm1(SB)
+ MOVD $448, R0
+ BR callbackasm1(SB)
+ MOVD $449, R0
+ BR callbackasm1(SB)
+ MOVD $450, R0
+ BR callbackasm1(SB)
+ MOVD $451, R0
+ BR callbackasm1(SB)
+ MOVD $452, R0
+ BR callbackasm1(SB)
+ MOVD $453, R0
+ BR callbackasm1(SB)
+ MOVD $454, R0
+ BR callbackasm1(SB)
+ MOVD $455, R0
+ BR callbackasm1(SB)
+ MOVD $456, R0
+ BR callbackasm1(SB)
+ MOVD $457, R0
+ BR callbackasm1(SB)
+ MOVD $458, R0
+ BR callbackasm1(SB)
+ MOVD $459, R0
+ BR callbackasm1(SB)
+ MOVD $460, R0
+ BR callbackasm1(SB)
+ MOVD $461, R0
+ BR callbackasm1(SB)
+ MOVD $462, R0
+ BR callbackasm1(SB)
+ MOVD $463, R0
+ BR callbackasm1(SB)
+ MOVD $464, R0
+ BR callbackasm1(SB)
+ MOVD $465, R0
+ BR callbackasm1(SB)
+ MOVD $466, R0
+ BR callbackasm1(SB)
+ MOVD $467, R0
+ BR callbackasm1(SB)
+ MOVD $468, R0
+ BR callbackasm1(SB)
+ MOVD $469, R0
+ BR callbackasm1(SB)
+ MOVD $470, R0
+ BR callbackasm1(SB)
+ MOVD $471, R0
+ BR callbackasm1(SB)
+ MOVD $472, R0
+ BR callbackasm1(SB)
+ MOVD $473, R0
+ BR callbackasm1(SB)
+ MOVD $474, R0
+ BR callbackasm1(SB)
+ MOVD $475, R0
+ BR callbackasm1(SB)
+ MOVD $476, R0
+ BR callbackasm1(SB)
+ MOVD $477, R0
+ BR callbackasm1(SB)
+ MOVD $478, R0
+ BR callbackasm1(SB)
+ MOVD $479, R0
+ BR callbackasm1(SB)
+ MOVD $480, R0
+ BR callbackasm1(SB)
+ MOVD $481, R0
+ BR callbackasm1(SB)
+ MOVD $482, R0
+ BR callbackasm1(SB)
+ MOVD $483, R0
+ BR callbackasm1(SB)
+ MOVD $484, R0
+ BR callbackasm1(SB)
+ MOVD $485, R0
+ BR callbackasm1(SB)
+ MOVD $486, R0
+ BR callbackasm1(SB)
+ MOVD $487, R0
+ BR callbackasm1(SB)
+ MOVD $488, R0
+ BR callbackasm1(SB)
+ MOVD $489, R0
+ BR callbackasm1(SB)
+ MOVD $490, R0
+ BR callbackasm1(SB)
+ MOVD $491, R0
+ BR callbackasm1(SB)
+ MOVD $492, R0
+ BR callbackasm1(SB)
+ MOVD $493, R0
+ BR callbackasm1(SB)
+ MOVD $494, R0
+ BR callbackasm1(SB)
+ MOVD $495, R0
+ BR callbackasm1(SB)
+ MOVD $496, R0
+ BR callbackasm1(SB)
+ MOVD $497, R0
+ BR callbackasm1(SB)
+ MOVD $498, R0
+ BR callbackasm1(SB)
+ MOVD $499, R0
+ BR callbackasm1(SB)
+ MOVD $500, R0
+ BR callbackasm1(SB)
+ MOVD $501, R0
+ BR callbackasm1(SB)
+ MOVD $502, R0
+ BR callbackasm1(SB)
+ MOVD $503, R0
+ BR callbackasm1(SB)
+ MOVD $504, R0
+ BR callbackasm1(SB)
+ MOVD $505, R0
+ BR callbackasm1(SB)
+ MOVD $506, R0
+ BR callbackasm1(SB)
+ MOVD $507, R0
+ BR callbackasm1(SB)
+ MOVD $508, R0
+ BR callbackasm1(SB)
+ MOVD $509, R0
+ BR callbackasm1(SB)
+ MOVD $510, R0
+ BR callbackasm1(SB)
+ MOVD $511, R0
+ BR callbackasm1(SB)
+ MOVD $512, R0
+ BR callbackasm1(SB)
+ MOVD $513, R0
+ BR callbackasm1(SB)
+ MOVD $514, R0
+ BR callbackasm1(SB)
+ MOVD $515, R0
+ BR callbackasm1(SB)
+ MOVD $516, R0
+ BR callbackasm1(SB)
+ MOVD $517, R0
+ BR callbackasm1(SB)
+ MOVD $518, R0
+ BR callbackasm1(SB)
+ MOVD $519, R0
+ BR callbackasm1(SB)
+ MOVD $520, R0
+ BR callbackasm1(SB)
+ MOVD $521, R0
+ BR callbackasm1(SB)
+ MOVD $522, R0
+ BR callbackasm1(SB)
+ MOVD $523, R0
+ BR callbackasm1(SB)
+ MOVD $524, R0
+ BR callbackasm1(SB)
+ MOVD $525, R0
+ BR callbackasm1(SB)
+ MOVD $526, R0
+ BR callbackasm1(SB)
+ MOVD $527, R0
+ BR callbackasm1(SB)
+ MOVD $528, R0
+ BR callbackasm1(SB)
+ MOVD $529, R0
+ BR callbackasm1(SB)
+ MOVD $530, R0
+ BR callbackasm1(SB)
+ MOVD $531, R0
+ BR callbackasm1(SB)
+ MOVD $532, R0
+ BR callbackasm1(SB)
+ MOVD $533, R0
+ BR callbackasm1(SB)
+ MOVD $534, R0
+ BR callbackasm1(SB)
+ MOVD $535, R0
+ BR callbackasm1(SB)
+ MOVD $536, R0
+ BR callbackasm1(SB)
+ MOVD $537, R0
+ BR callbackasm1(SB)
+ MOVD $538, R0
+ BR callbackasm1(SB)
+ MOVD $539, R0
+ BR callbackasm1(SB)
+ MOVD $540, R0
+ BR callbackasm1(SB)
+ MOVD $541, R0
+ BR callbackasm1(SB)
+ MOVD $542, R0
+ BR callbackasm1(SB)
+ MOVD $543, R0
+ BR callbackasm1(SB)
+ MOVD $544, R0
+ BR callbackasm1(SB)
+ MOVD $545, R0
+ BR callbackasm1(SB)
+ MOVD $546, R0
+ BR callbackasm1(SB)
+ MOVD $547, R0
+ BR callbackasm1(SB)
+ MOVD $548, R0
+ BR callbackasm1(SB)
+ MOVD $549, R0
+ BR callbackasm1(SB)
+ MOVD $550, R0
+ BR callbackasm1(SB)
+ MOVD $551, R0
+ BR callbackasm1(SB)
+ MOVD $552, R0
+ BR callbackasm1(SB)
+ MOVD $553, R0
+ BR callbackasm1(SB)
+ MOVD $554, R0
+ BR callbackasm1(SB)
+ MOVD $555, R0
+ BR callbackasm1(SB)
+ MOVD $556, R0
+ BR callbackasm1(SB)
+ MOVD $557, R0
+ BR callbackasm1(SB)
+ MOVD $558, R0
+ BR callbackasm1(SB)
+ MOVD $559, R0
+ BR callbackasm1(SB)
+ MOVD $560, R0
+ BR callbackasm1(SB)
+ MOVD $561, R0
+ BR callbackasm1(SB)
+ MOVD $562, R0
+ BR callbackasm1(SB)
+ MOVD $563, R0
+ BR callbackasm1(SB)
+ MOVD $564, R0
+ BR callbackasm1(SB)
+ MOVD $565, R0
+ BR callbackasm1(SB)
+ MOVD $566, R0
+ BR callbackasm1(SB)
+ MOVD $567, R0
+ BR callbackasm1(SB)
+ MOVD $568, R0
+ BR callbackasm1(SB)
+ MOVD $569, R0
+ BR callbackasm1(SB)
+ MOVD $570, R0
+ BR callbackasm1(SB)
+ MOVD $571, R0
+ BR callbackasm1(SB)
+ MOVD $572, R0
+ BR callbackasm1(SB)
+ MOVD $573, R0
+ BR callbackasm1(SB)
+ MOVD $574, R0
+ BR callbackasm1(SB)
+ MOVD $575, R0
+ BR callbackasm1(SB)
+ MOVD $576, R0
+ BR callbackasm1(SB)
+ MOVD $577, R0
+ BR callbackasm1(SB)
+ MOVD $578, R0
+ BR callbackasm1(SB)
+ MOVD $579, R0
+ BR callbackasm1(SB)
+ MOVD $580, R0
+ BR callbackasm1(SB)
+ MOVD $581, R0
+ BR callbackasm1(SB)
+ MOVD $582, R0
+ BR callbackasm1(SB)
+ MOVD $583, R0
+ BR callbackasm1(SB)
+ MOVD $584, R0
+ BR callbackasm1(SB)
+ MOVD $585, R0
+ BR callbackasm1(SB)
+ MOVD $586, R0
+ BR callbackasm1(SB)
+ MOVD $587, R0
+ BR callbackasm1(SB)
+ MOVD $588, R0
+ BR callbackasm1(SB)
+ MOVD $589, R0
+ BR callbackasm1(SB)
+ MOVD $590, R0
+ BR callbackasm1(SB)
+ MOVD $591, R0
+ BR callbackasm1(SB)
+ MOVD $592, R0
+ BR callbackasm1(SB)
+ MOVD $593, R0
+ BR callbackasm1(SB)
+ MOVD $594, R0
+ BR callbackasm1(SB)
+ MOVD $595, R0
+ BR callbackasm1(SB)
+ MOVD $596, R0
+ BR callbackasm1(SB)
+ MOVD $597, R0
+ BR callbackasm1(SB)
+ MOVD $598, R0
+ BR callbackasm1(SB)
+ MOVD $599, R0
+ BR callbackasm1(SB)
+ MOVD $600, R0
+ BR callbackasm1(SB)
+ MOVD $601, R0
+ BR callbackasm1(SB)
+ MOVD $602, R0
+ BR callbackasm1(SB)
+ MOVD $603, R0
+ BR callbackasm1(SB)
+ MOVD $604, R0
+ BR callbackasm1(SB)
+ MOVD $605, R0
+ BR callbackasm1(SB)
+ MOVD $606, R0
+ BR callbackasm1(SB)
+ MOVD $607, R0
+ BR callbackasm1(SB)
+ MOVD $608, R0
+ BR callbackasm1(SB)
+ MOVD $609, R0
+ BR callbackasm1(SB)
+ MOVD $610, R0
+ BR callbackasm1(SB)
+ MOVD $611, R0
+ BR callbackasm1(SB)
+ MOVD $612, R0
+ BR callbackasm1(SB)
+ MOVD $613, R0
+ BR callbackasm1(SB)
+ MOVD $614, R0
+ BR callbackasm1(SB)
+ MOVD $615, R0
+ BR callbackasm1(SB)
+ MOVD $616, R0
+ BR callbackasm1(SB)
+ MOVD $617, R0
+ BR callbackasm1(SB)
+ MOVD $618, R0
+ BR callbackasm1(SB)
+ MOVD $619, R0
+ BR callbackasm1(SB)
+ MOVD $620, R0
+ BR callbackasm1(SB)
+ MOVD $621, R0
+ BR callbackasm1(SB)
+ MOVD $622, R0
+ BR callbackasm1(SB)
+ MOVD $623, R0
+ BR callbackasm1(SB)
+ MOVD $624, R0
+ BR callbackasm1(SB)
+ MOVD $625, R0
+ BR callbackasm1(SB)
+ MOVD $626, R0
+ BR callbackasm1(SB)
+ MOVD $627, R0
+ BR callbackasm1(SB)
+ MOVD $628, R0
+ BR callbackasm1(SB)
+ MOVD $629, R0
+ BR callbackasm1(SB)
+ MOVD $630, R0
+ BR callbackasm1(SB)
+ MOVD $631, R0
+ BR callbackasm1(SB)
+ MOVD $632, R0
+ BR callbackasm1(SB)
+ MOVD $633, R0
+ BR callbackasm1(SB)
+ MOVD $634, R0
+ BR callbackasm1(SB)
+ MOVD $635, R0
+ BR callbackasm1(SB)
+ MOVD $636, R0
+ BR callbackasm1(SB)
+ MOVD $637, R0
+ BR callbackasm1(SB)
+ MOVD $638, R0
+ BR callbackasm1(SB)
+ MOVD $639, R0
+ BR callbackasm1(SB)
+ MOVD $640, R0
+ BR callbackasm1(SB)
+ MOVD $641, R0
+ BR callbackasm1(SB)
+ MOVD $642, R0
+ BR callbackasm1(SB)
+ MOVD $643, R0
+ BR callbackasm1(SB)
+ MOVD $644, R0
+ BR callbackasm1(SB)
+ MOVD $645, R0
+ BR callbackasm1(SB)
+ MOVD $646, R0
+ BR callbackasm1(SB)
+ MOVD $647, R0
+ BR callbackasm1(SB)
+ MOVD $648, R0
+ BR callbackasm1(SB)
+ MOVD $649, R0
+ BR callbackasm1(SB)
+ MOVD $650, R0
+ BR callbackasm1(SB)
+ MOVD $651, R0
+ BR callbackasm1(SB)
+ MOVD $652, R0
+ BR callbackasm1(SB)
+ MOVD $653, R0
+ BR callbackasm1(SB)
+ MOVD $654, R0
+ BR callbackasm1(SB)
+ MOVD $655, R0
+ BR callbackasm1(SB)
+ MOVD $656, R0
+ BR callbackasm1(SB)
+ MOVD $657, R0
+ BR callbackasm1(SB)
+ MOVD $658, R0
+ BR callbackasm1(SB)
+ MOVD $659, R0
+ BR callbackasm1(SB)
+ MOVD $660, R0
+ BR callbackasm1(SB)
+ MOVD $661, R0
+ BR callbackasm1(SB)
+ MOVD $662, R0
+ BR callbackasm1(SB)
+ MOVD $663, R0
+ BR callbackasm1(SB)
+ MOVD $664, R0
+ BR callbackasm1(SB)
+ MOVD $665, R0
+ BR callbackasm1(SB)
+ MOVD $666, R0
+ BR callbackasm1(SB)
+ MOVD $667, R0
+ BR callbackasm1(SB)
+ MOVD $668, R0
+ BR callbackasm1(SB)
+ MOVD $669, R0
+ BR callbackasm1(SB)
+ MOVD $670, R0
+ BR callbackasm1(SB)
+ MOVD $671, R0
+ BR callbackasm1(SB)
+ MOVD $672, R0
+ BR callbackasm1(SB)
+ MOVD $673, R0
+ BR callbackasm1(SB)
+ MOVD $674, R0
+ BR callbackasm1(SB)
+ MOVD $675, R0
+ BR callbackasm1(SB)
+ MOVD $676, R0
+ BR callbackasm1(SB)
+ MOVD $677, R0
+ BR callbackasm1(SB)
+ MOVD $678, R0
+ BR callbackasm1(SB)
+ MOVD $679, R0
+ BR callbackasm1(SB)
+ MOVD $680, R0
+ BR callbackasm1(SB)
+ MOVD $681, R0
+ BR callbackasm1(SB)
+ MOVD $682, R0
+ BR callbackasm1(SB)
+ MOVD $683, R0
+ BR callbackasm1(SB)
+ MOVD $684, R0
+ BR callbackasm1(SB)
+ MOVD $685, R0
+ BR callbackasm1(SB)
+ MOVD $686, R0
+ BR callbackasm1(SB)
+ MOVD $687, R0
+ BR callbackasm1(SB)
+ MOVD $688, R0
+ BR callbackasm1(SB)
+ MOVD $689, R0
+ BR callbackasm1(SB)
+ MOVD $690, R0
+ BR callbackasm1(SB)
+ MOVD $691, R0
+ BR callbackasm1(SB)
+ MOVD $692, R0
+ BR callbackasm1(SB)
+ MOVD $693, R0
+ BR callbackasm1(SB)
+ MOVD $694, R0
+ BR callbackasm1(SB)
+ MOVD $695, R0
+ BR callbackasm1(SB)
+ MOVD $696, R0
+ BR callbackasm1(SB)
+ MOVD $697, R0
+ BR callbackasm1(SB)
+ MOVD $698, R0
+ BR callbackasm1(SB)
+ MOVD $699, R0
+ BR callbackasm1(SB)
+ MOVD $700, R0
+ BR callbackasm1(SB)
+ MOVD $701, R0
+ BR callbackasm1(SB)
+ MOVD $702, R0
+ BR callbackasm1(SB)
+ MOVD $703, R0
+ BR callbackasm1(SB)
+ MOVD $704, R0
+ BR callbackasm1(SB)
+ MOVD $705, R0
+ BR callbackasm1(SB)
+ MOVD $706, R0
+ BR callbackasm1(SB)
+ MOVD $707, R0
+ BR callbackasm1(SB)
+ MOVD $708, R0
+ BR callbackasm1(SB)
+ MOVD $709, R0
+ BR callbackasm1(SB)
+ MOVD $710, R0
+ BR callbackasm1(SB)
+ MOVD $711, R0
+ BR callbackasm1(SB)
+ MOVD $712, R0
+ BR callbackasm1(SB)
+ MOVD $713, R0
+ BR callbackasm1(SB)
+ MOVD $714, R0
+ BR callbackasm1(SB)
+ MOVD $715, R0
+ BR callbackasm1(SB)
+ MOVD $716, R0
+ BR callbackasm1(SB)
+ MOVD $717, R0
+ BR callbackasm1(SB)
+ MOVD $718, R0
+ BR callbackasm1(SB)
+ MOVD $719, R0
+ BR callbackasm1(SB)
+ MOVD $720, R0
+ BR callbackasm1(SB)
+ MOVD $721, R0
+ BR callbackasm1(SB)
+ MOVD $722, R0
+ BR callbackasm1(SB)
+ MOVD $723, R0
+ BR callbackasm1(SB)
+ MOVD $724, R0
+ BR callbackasm1(SB)
+ MOVD $725, R0
+ BR callbackasm1(SB)
+ MOVD $726, R0
+ BR callbackasm1(SB)
+ MOVD $727, R0
+ BR callbackasm1(SB)
+ MOVD $728, R0
+ BR callbackasm1(SB)
+ MOVD $729, R0
+ BR callbackasm1(SB)
+ MOVD $730, R0
+ BR callbackasm1(SB)
+ MOVD $731, R0
+ BR callbackasm1(SB)
+ MOVD $732, R0
+ BR callbackasm1(SB)
+ MOVD $733, R0
+ BR callbackasm1(SB)
+ MOVD $734, R0
+ BR callbackasm1(SB)
+ MOVD $735, R0
+ BR callbackasm1(SB)
+ MOVD $736, R0
+ BR callbackasm1(SB)
+ MOVD $737, R0
+ BR callbackasm1(SB)
+ MOVD $738, R0
+ BR callbackasm1(SB)
+ MOVD $739, R0
+ BR callbackasm1(SB)
+ MOVD $740, R0
+ BR callbackasm1(SB)
+ MOVD $741, R0
+ BR callbackasm1(SB)
+ MOVD $742, R0
+ BR callbackasm1(SB)
+ MOVD $743, R0
+ BR callbackasm1(SB)
+ MOVD $744, R0
+ BR callbackasm1(SB)
+ MOVD $745, R0
+ BR callbackasm1(SB)
+ MOVD $746, R0
+ BR callbackasm1(SB)
+ MOVD $747, R0
+ BR callbackasm1(SB)
+ MOVD $748, R0
+ BR callbackasm1(SB)
+ MOVD $749, R0
+ BR callbackasm1(SB)
+ MOVD $750, R0
+ BR callbackasm1(SB)
+ MOVD $751, R0
+ BR callbackasm1(SB)
+ MOVD $752, R0
+ BR callbackasm1(SB)
+ MOVD $753, R0
+ BR callbackasm1(SB)
+ MOVD $754, R0
+ BR callbackasm1(SB)
+ MOVD $755, R0
+ BR callbackasm1(SB)
+ MOVD $756, R0
+ BR callbackasm1(SB)
+ MOVD $757, R0
+ BR callbackasm1(SB)
+ MOVD $758, R0
+ BR callbackasm1(SB)
+ MOVD $759, R0
+ BR callbackasm1(SB)
+ MOVD $760, R0
+ BR callbackasm1(SB)
+ MOVD $761, R0
+ BR callbackasm1(SB)
+ MOVD $762, R0
+ BR callbackasm1(SB)
+ MOVD $763, R0
+ BR callbackasm1(SB)
+ MOVD $764, R0
+ BR callbackasm1(SB)
+ MOVD $765, R0
+ BR callbackasm1(SB)
+ MOVD $766, R0
+ BR callbackasm1(SB)
+ MOVD $767, R0
+ BR callbackasm1(SB)
+ MOVD $768, R0
+ BR callbackasm1(SB)
+ MOVD $769, R0
+ BR callbackasm1(SB)
+ MOVD $770, R0
+ BR callbackasm1(SB)
+ MOVD $771, R0
+ BR callbackasm1(SB)
+ MOVD $772, R0
+ BR callbackasm1(SB)
+ MOVD $773, R0
+ BR callbackasm1(SB)
+ MOVD $774, R0
+ BR callbackasm1(SB)
+ MOVD $775, R0
+ BR callbackasm1(SB)
+ MOVD $776, R0
+ BR callbackasm1(SB)
+ MOVD $777, R0
+ BR callbackasm1(SB)
+ MOVD $778, R0
+ BR callbackasm1(SB)
+ MOVD $779, R0
+ BR callbackasm1(SB)
+ MOVD $780, R0
+ BR callbackasm1(SB)
+ MOVD $781, R0
+ BR callbackasm1(SB)
+ MOVD $782, R0
+ BR callbackasm1(SB)
+ MOVD $783, R0
+ BR callbackasm1(SB)
+ MOVD $784, R0
+ BR callbackasm1(SB)
+ MOVD $785, R0
+ BR callbackasm1(SB)
+ MOVD $786, R0
+ BR callbackasm1(SB)
+ MOVD $787, R0
+ BR callbackasm1(SB)
+ MOVD $788, R0
+ BR callbackasm1(SB)
+ MOVD $789, R0
+ BR callbackasm1(SB)
+ MOVD $790, R0
+ BR callbackasm1(SB)
+ MOVD $791, R0
+ BR callbackasm1(SB)
+ MOVD $792, R0
+ BR callbackasm1(SB)
+ MOVD $793, R0
+ BR callbackasm1(SB)
+ MOVD $794, R0
+ BR callbackasm1(SB)
+ MOVD $795, R0
+ BR callbackasm1(SB)
+ MOVD $796, R0
+ BR callbackasm1(SB)
+ MOVD $797, R0
+ BR callbackasm1(SB)
+ MOVD $798, R0
+ BR callbackasm1(SB)
+ MOVD $799, R0
+ BR callbackasm1(SB)
+ MOVD $800, R0
+ BR callbackasm1(SB)
+ MOVD $801, R0
+ BR callbackasm1(SB)
+ MOVD $802, R0
+ BR callbackasm1(SB)
+ MOVD $803, R0
+ BR callbackasm1(SB)
+ MOVD $804, R0
+ BR callbackasm1(SB)
+ MOVD $805, R0
+ BR callbackasm1(SB)
+ MOVD $806, R0
+ BR callbackasm1(SB)
+ MOVD $807, R0
+ BR callbackasm1(SB)
+ MOVD $808, R0
+ BR callbackasm1(SB)
+ MOVD $809, R0
+ BR callbackasm1(SB)
+ MOVD $810, R0
+ BR callbackasm1(SB)
+ MOVD $811, R0
+ BR callbackasm1(SB)
+ MOVD $812, R0
+ BR callbackasm1(SB)
+ MOVD $813, R0
+ BR callbackasm1(SB)
+ MOVD $814, R0
+ BR callbackasm1(SB)
+ MOVD $815, R0
+ BR callbackasm1(SB)
+ MOVD $816, R0
+ BR callbackasm1(SB)
+ MOVD $817, R0
+ BR callbackasm1(SB)
+ MOVD $818, R0
+ BR callbackasm1(SB)
+ MOVD $819, R0
+ BR callbackasm1(SB)
+ MOVD $820, R0
+ BR callbackasm1(SB)
+ MOVD $821, R0
+ BR callbackasm1(SB)
+ MOVD $822, R0
+ BR callbackasm1(SB)
+ MOVD $823, R0
+ BR callbackasm1(SB)
+ MOVD $824, R0
+ BR callbackasm1(SB)
+ MOVD $825, R0
+ BR callbackasm1(SB)
+ MOVD $826, R0
+ BR callbackasm1(SB)
+ MOVD $827, R0
+ BR callbackasm1(SB)
+ MOVD $828, R0
+ BR callbackasm1(SB)
+ MOVD $829, R0
+ BR callbackasm1(SB)
+ MOVD $830, R0
+ BR callbackasm1(SB)
+ MOVD $831, R0
+ BR callbackasm1(SB)
+ MOVD $832, R0
+ BR callbackasm1(SB)
+ MOVD $833, R0
+ BR callbackasm1(SB)
+ MOVD $834, R0
+ BR callbackasm1(SB)
+ MOVD $835, R0
+ BR callbackasm1(SB)
+ MOVD $836, R0
+ BR callbackasm1(SB)
+ MOVD $837, R0
+ BR callbackasm1(SB)
+ MOVD $838, R0
+ BR callbackasm1(SB)
+ MOVD $839, R0
+ BR callbackasm1(SB)
+ MOVD $840, R0
+ BR callbackasm1(SB)
+ MOVD $841, R0
+ BR callbackasm1(SB)
+ MOVD $842, R0
+ BR callbackasm1(SB)
+ MOVD $843, R0
+ BR callbackasm1(SB)
+ MOVD $844, R0
+ BR callbackasm1(SB)
+ MOVD $845, R0
+ BR callbackasm1(SB)
+ MOVD $846, R0
+ BR callbackasm1(SB)
+ MOVD $847, R0
+ BR callbackasm1(SB)
+ MOVD $848, R0
+ BR callbackasm1(SB)
+ MOVD $849, R0
+ BR callbackasm1(SB)
+ MOVD $850, R0
+ BR callbackasm1(SB)
+ MOVD $851, R0
+ BR callbackasm1(SB)
+ MOVD $852, R0
+ BR callbackasm1(SB)
+ MOVD $853, R0
+ BR callbackasm1(SB)
+ MOVD $854, R0
+ BR callbackasm1(SB)
+ MOVD $855, R0
+ BR callbackasm1(SB)
+ MOVD $856, R0
+ BR callbackasm1(SB)
+ MOVD $857, R0
+ BR callbackasm1(SB)
+ MOVD $858, R0
+ BR callbackasm1(SB)
+ MOVD $859, R0
+ BR callbackasm1(SB)
+ MOVD $860, R0
+ BR callbackasm1(SB)
+ MOVD $861, R0
+ BR callbackasm1(SB)
+ MOVD $862, R0
+ BR callbackasm1(SB)
+ MOVD $863, R0
+ BR callbackasm1(SB)
+ MOVD $864, R0
+ BR callbackasm1(SB)
+ MOVD $865, R0
+ BR callbackasm1(SB)
+ MOVD $866, R0
+ BR callbackasm1(SB)
+ MOVD $867, R0
+ BR callbackasm1(SB)
+ MOVD $868, R0
+ BR callbackasm1(SB)
+ MOVD $869, R0
+ BR callbackasm1(SB)
+ MOVD $870, R0
+ BR callbackasm1(SB)
+ MOVD $871, R0
+ BR callbackasm1(SB)
+ MOVD $872, R0
+ BR callbackasm1(SB)
+ MOVD $873, R0
+ BR callbackasm1(SB)
+ MOVD $874, R0
+ BR callbackasm1(SB)
+ MOVD $875, R0
+ BR callbackasm1(SB)
+ MOVD $876, R0
+ BR callbackasm1(SB)
+ MOVD $877, R0
+ BR callbackasm1(SB)
+ MOVD $878, R0
+ BR callbackasm1(SB)
+ MOVD $879, R0
+ BR callbackasm1(SB)
+ MOVD $880, R0
+ BR callbackasm1(SB)
+ MOVD $881, R0
+ BR callbackasm1(SB)
+ MOVD $882, R0
+ BR callbackasm1(SB)
+ MOVD $883, R0
+ BR callbackasm1(SB)
+ MOVD $884, R0
+ BR callbackasm1(SB)
+ MOVD $885, R0
+ BR callbackasm1(SB)
+ MOVD $886, R0
+ BR callbackasm1(SB)
+ MOVD $887, R0
+ BR callbackasm1(SB)
+ MOVD $888, R0
+ BR callbackasm1(SB)
+ MOVD $889, R0
+ BR callbackasm1(SB)
+ MOVD $890, R0
+ BR callbackasm1(SB)
+ MOVD $891, R0
+ BR callbackasm1(SB)
+ MOVD $892, R0
+ BR callbackasm1(SB)
+ MOVD $893, R0
+ BR callbackasm1(SB)
+ MOVD $894, R0
+ BR callbackasm1(SB)
+ MOVD $895, R0
+ BR callbackasm1(SB)
+ MOVD $896, R0
+ BR callbackasm1(SB)
+ MOVD $897, R0
+ BR callbackasm1(SB)
+ MOVD $898, R0
+ BR callbackasm1(SB)
+ MOVD $899, R0
+ BR callbackasm1(SB)
+ MOVD $900, R0
+ BR callbackasm1(SB)
+ MOVD $901, R0
+ BR callbackasm1(SB)
+ MOVD $902, R0
+ BR callbackasm1(SB)
+ MOVD $903, R0
+ BR callbackasm1(SB)
+ MOVD $904, R0
+ BR callbackasm1(SB)
+ MOVD $905, R0
+ BR callbackasm1(SB)
+ MOVD $906, R0
+ BR callbackasm1(SB)
+ MOVD $907, R0
+ BR callbackasm1(SB)
+ MOVD $908, R0
+ BR callbackasm1(SB)
+ MOVD $909, R0
+ BR callbackasm1(SB)
+ MOVD $910, R0
+ BR callbackasm1(SB)
+ MOVD $911, R0
+ BR callbackasm1(SB)
+ MOVD $912, R0
+ BR callbackasm1(SB)
+ MOVD $913, R0
+ BR callbackasm1(SB)
+ MOVD $914, R0
+ BR callbackasm1(SB)
+ MOVD $915, R0
+ BR callbackasm1(SB)
+ MOVD $916, R0
+ BR callbackasm1(SB)
+ MOVD $917, R0
+ BR callbackasm1(SB)
+ MOVD $918, R0
+ BR callbackasm1(SB)
+ MOVD $919, R0
+ BR callbackasm1(SB)
+ MOVD $920, R0
+ BR callbackasm1(SB)
+ MOVD $921, R0
+ BR callbackasm1(SB)
+ MOVD $922, R0
+ BR callbackasm1(SB)
+ MOVD $923, R0
+ BR callbackasm1(SB)
+ MOVD $924, R0
+ BR callbackasm1(SB)
+ MOVD $925, R0
+ BR callbackasm1(SB)
+ MOVD $926, R0
+ BR callbackasm1(SB)
+ MOVD $927, R0
+ BR callbackasm1(SB)
+ MOVD $928, R0
+ BR callbackasm1(SB)
+ MOVD $929, R0
+ BR callbackasm1(SB)
+ MOVD $930, R0
+ BR callbackasm1(SB)
+ MOVD $931, R0
+ BR callbackasm1(SB)
+ MOVD $932, R0
+ BR callbackasm1(SB)
+ MOVD $933, R0
+ BR callbackasm1(SB)
+ MOVD $934, R0
+ BR callbackasm1(SB)
+ MOVD $935, R0
+ BR callbackasm1(SB)
+ MOVD $936, R0
+ BR callbackasm1(SB)
+ MOVD $937, R0
+ BR callbackasm1(SB)
+ MOVD $938, R0
+ BR callbackasm1(SB)
+ MOVD $939, R0
+ BR callbackasm1(SB)
+ MOVD $940, R0
+ BR callbackasm1(SB)
+ MOVD $941, R0
+ BR callbackasm1(SB)
+ MOVD $942, R0
+ BR callbackasm1(SB)
+ MOVD $943, R0
+ BR callbackasm1(SB)
+ MOVD $944, R0
+ BR callbackasm1(SB)
+ MOVD $945, R0
+ BR callbackasm1(SB)
+ MOVD $946, R0
+ BR callbackasm1(SB)
+ MOVD $947, R0
+ BR callbackasm1(SB)
+ MOVD $948, R0
+ BR callbackasm1(SB)
+ MOVD $949, R0
+ BR callbackasm1(SB)
+ MOVD $950, R0
+ BR callbackasm1(SB)
+ MOVD $951, R0
+ BR callbackasm1(SB)
+ MOVD $952, R0
+ BR callbackasm1(SB)
+ MOVD $953, R0
+ BR callbackasm1(SB)
+ MOVD $954, R0
+ BR callbackasm1(SB)
+ MOVD $955, R0
+ BR callbackasm1(SB)
+ MOVD $956, R0
+ BR callbackasm1(SB)
+ MOVD $957, R0
+ BR callbackasm1(SB)
+ MOVD $958, R0
+ BR callbackasm1(SB)
+ MOVD $959, R0
+ BR callbackasm1(SB)
+ MOVD $960, R0
+ BR callbackasm1(SB)
+ MOVD $961, R0
+ BR callbackasm1(SB)
+ MOVD $962, R0
+ BR callbackasm1(SB)
+ MOVD $963, R0
+ BR callbackasm1(SB)
+ MOVD $964, R0
+ BR callbackasm1(SB)
+ MOVD $965, R0
+ BR callbackasm1(SB)
+ MOVD $966, R0
+ BR callbackasm1(SB)
+ MOVD $967, R0
+ BR callbackasm1(SB)
+ MOVD $968, R0
+ BR callbackasm1(SB)
+ MOVD $969, R0
+ BR callbackasm1(SB)
+ MOVD $970, R0
+ BR callbackasm1(SB)
+ MOVD $971, R0
+ BR callbackasm1(SB)
+ MOVD $972, R0
+ BR callbackasm1(SB)
+ MOVD $973, R0
+ BR callbackasm1(SB)
+ MOVD $974, R0
+ BR callbackasm1(SB)
+ MOVD $975, R0
+ BR callbackasm1(SB)
+ MOVD $976, R0
+ BR callbackasm1(SB)
+ MOVD $977, R0
+ BR callbackasm1(SB)
+ MOVD $978, R0
+ BR callbackasm1(SB)
+ MOVD $979, R0
+ BR callbackasm1(SB)
+ MOVD $980, R0
+ BR callbackasm1(SB)
+ MOVD $981, R0
+ BR callbackasm1(SB)
+ MOVD $982, R0
+ BR callbackasm1(SB)
+ MOVD $983, R0
+ BR callbackasm1(SB)
+ MOVD $984, R0
+ BR callbackasm1(SB)
+ MOVD $985, R0
+ BR callbackasm1(SB)
+ MOVD $986, R0
+ BR callbackasm1(SB)
+ MOVD $987, R0
+ BR callbackasm1(SB)
+ MOVD $988, R0
+ BR callbackasm1(SB)
+ MOVD $989, R0
+ BR callbackasm1(SB)
+ MOVD $990, R0
+ BR callbackasm1(SB)
+ MOVD $991, R0
+ BR callbackasm1(SB)
+ MOVD $992, R0
+ BR callbackasm1(SB)
+ MOVD $993, R0
+ BR callbackasm1(SB)
+ MOVD $994, R0
+ BR callbackasm1(SB)
+ MOVD $995, R0
+ BR callbackasm1(SB)
+ MOVD $996, R0
+ BR callbackasm1(SB)
+ MOVD $997, R0
+ BR callbackasm1(SB)
+ MOVD $998, R0
+ BR callbackasm1(SB)
+ MOVD $999, R0
+ BR callbackasm1(SB)
+ MOVD $1000, R0
+ BR callbackasm1(SB)
+ MOVD $1001, R0
+ BR callbackasm1(SB)
+ MOVD $1002, R0
+ BR callbackasm1(SB)
+ MOVD $1003, R0
+ BR callbackasm1(SB)
+ MOVD $1004, R0
+ BR callbackasm1(SB)
+ MOVD $1005, R0
+ BR callbackasm1(SB)
+ MOVD $1006, R0
+ BR callbackasm1(SB)
+ MOVD $1007, R0
+ BR callbackasm1(SB)
+ MOVD $1008, R0
+ BR callbackasm1(SB)
+ MOVD $1009, R0
+ BR callbackasm1(SB)
+ MOVD $1010, R0
+ BR callbackasm1(SB)
+ MOVD $1011, R0
+ BR callbackasm1(SB)
+ MOVD $1012, R0
+ BR callbackasm1(SB)
+ MOVD $1013, R0
+ BR callbackasm1(SB)
+ MOVD $1014, R0
+ BR callbackasm1(SB)
+ MOVD $1015, R0
+ BR callbackasm1(SB)
+ MOVD $1016, R0
+ BR callbackasm1(SB)
+ MOVD $1017, R0
+ BR callbackasm1(SB)
+ MOVD $1018, R0
+ BR callbackasm1(SB)
+ MOVD $1019, R0
+ BR callbackasm1(SB)
+ MOVD $1020, R0
+ BR callbackasm1(SB)
+ MOVD $1021, R0
+ BR callbackasm1(SB)
+ MOVD $1022, R0
+ BR callbackasm1(SB)
+ MOVD $1023, R0
+ BR callbackasm1(SB)
+ MOVD $1024, R0
+ BR callbackasm1(SB)
+ MOVD $1025, R0
+ BR callbackasm1(SB)
+ MOVD $1026, R0
+ BR callbackasm1(SB)
+ MOVD $1027, R0
+ BR callbackasm1(SB)
+ MOVD $1028, R0
+ BR callbackasm1(SB)
+ MOVD $1029, R0
+ BR callbackasm1(SB)
+ MOVD $1030, R0
+ BR callbackasm1(SB)
+ MOVD $1031, R0
+ BR callbackasm1(SB)
+ MOVD $1032, R0
+ BR callbackasm1(SB)
+ MOVD $1033, R0
+ BR callbackasm1(SB)
+ MOVD $1034, R0
+ BR callbackasm1(SB)
+ MOVD $1035, R0
+ BR callbackasm1(SB)
+ MOVD $1036, R0
+ BR callbackasm1(SB)
+ MOVD $1037, R0
+ BR callbackasm1(SB)
+ MOVD $1038, R0
+ BR callbackasm1(SB)
+ MOVD $1039, R0
+ BR callbackasm1(SB)
+ MOVD $1040, R0
+ BR callbackasm1(SB)
+ MOVD $1041, R0
+ BR callbackasm1(SB)
+ MOVD $1042, R0
+ BR callbackasm1(SB)
+ MOVD $1043, R0
+ BR callbackasm1(SB)
+ MOVD $1044, R0
+ BR callbackasm1(SB)
+ MOVD $1045, R0
+ BR callbackasm1(SB)
+ MOVD $1046, R0
+ BR callbackasm1(SB)
+ MOVD $1047, R0
+ BR callbackasm1(SB)
+ MOVD $1048, R0
+ BR callbackasm1(SB)
+ MOVD $1049, R0
+ BR callbackasm1(SB)
+ MOVD $1050, R0
+ BR callbackasm1(SB)
+ MOVD $1051, R0
+ BR callbackasm1(SB)
+ MOVD $1052, R0
+ BR callbackasm1(SB)
+ MOVD $1053, R0
+ BR callbackasm1(SB)
+ MOVD $1054, R0
+ BR callbackasm1(SB)
+ MOVD $1055, R0
+ BR callbackasm1(SB)
+ MOVD $1056, R0
+ BR callbackasm1(SB)
+ MOVD $1057, R0
+ BR callbackasm1(SB)
+ MOVD $1058, R0
+ BR callbackasm1(SB)
+ MOVD $1059, R0
+ BR callbackasm1(SB)
+ MOVD $1060, R0
+ BR callbackasm1(SB)
+ MOVD $1061, R0
+ BR callbackasm1(SB)
+ MOVD $1062, R0
+ BR callbackasm1(SB)
+ MOVD $1063, R0
+ BR callbackasm1(SB)
+ MOVD $1064, R0
+ BR callbackasm1(SB)
+ MOVD $1065, R0
+ BR callbackasm1(SB)
+ MOVD $1066, R0
+ BR callbackasm1(SB)
+ MOVD $1067, R0
+ BR callbackasm1(SB)
+ MOVD $1068, R0
+ BR callbackasm1(SB)
+ MOVD $1069, R0
+ BR callbackasm1(SB)
+ MOVD $1070, R0
+ BR callbackasm1(SB)
+ MOVD $1071, R0
+ BR callbackasm1(SB)
+ MOVD $1072, R0
+ BR callbackasm1(SB)
+ MOVD $1073, R0
+ BR callbackasm1(SB)
+ MOVD $1074, R0
+ BR callbackasm1(SB)
+ MOVD $1075, R0
+ BR callbackasm1(SB)
+ MOVD $1076, R0
+ BR callbackasm1(SB)
+ MOVD $1077, R0
+ BR callbackasm1(SB)
+ MOVD $1078, R0
+ BR callbackasm1(SB)
+ MOVD $1079, R0
+ BR callbackasm1(SB)
+ MOVD $1080, R0
+ BR callbackasm1(SB)
+ MOVD $1081, R0
+ BR callbackasm1(SB)
+ MOVD $1082, R0
+ BR callbackasm1(SB)
+ MOVD $1083, R0
+ BR callbackasm1(SB)
+ MOVD $1084, R0
+ BR callbackasm1(SB)
+ MOVD $1085, R0
+ BR callbackasm1(SB)
+ MOVD $1086, R0
+ BR callbackasm1(SB)
+ MOVD $1087, R0
+ BR callbackasm1(SB)
+ MOVD $1088, R0
+ BR callbackasm1(SB)
+ MOVD $1089, R0
+ BR callbackasm1(SB)
+ MOVD $1090, R0
+ BR callbackasm1(SB)
+ MOVD $1091, R0
+ BR callbackasm1(SB)
+ MOVD $1092, R0
+ BR callbackasm1(SB)
+ MOVD $1093, R0
+ BR callbackasm1(SB)
+ MOVD $1094, R0
+ BR callbackasm1(SB)
+ MOVD $1095, R0
+ BR callbackasm1(SB)
+ MOVD $1096, R0
+ BR callbackasm1(SB)
+ MOVD $1097, R0
+ BR callbackasm1(SB)
+ MOVD $1098, R0
+ BR callbackasm1(SB)
+ MOVD $1099, R0
+ BR callbackasm1(SB)
+ MOVD $1100, R0
+ BR callbackasm1(SB)
+ MOVD $1101, R0
+ BR callbackasm1(SB)
+ MOVD $1102, R0
+ BR callbackasm1(SB)
+ MOVD $1103, R0
+ BR callbackasm1(SB)
+ MOVD $1104, R0
+ BR callbackasm1(SB)
+ MOVD $1105, R0
+ BR callbackasm1(SB)
+ MOVD $1106, R0
+ BR callbackasm1(SB)
+ MOVD $1107, R0
+ BR callbackasm1(SB)
+ MOVD $1108, R0
+ BR callbackasm1(SB)
+ MOVD $1109, R0
+ BR callbackasm1(SB)
+ MOVD $1110, R0
+ BR callbackasm1(SB)
+ MOVD $1111, R0
+ BR callbackasm1(SB)
+ MOVD $1112, R0
+ BR callbackasm1(SB)
+ MOVD $1113, R0
+ BR callbackasm1(SB)
+ MOVD $1114, R0
+ BR callbackasm1(SB)
+ MOVD $1115, R0
+ BR callbackasm1(SB)
+ MOVD $1116, R0
+ BR callbackasm1(SB)
+ MOVD $1117, R0
+ BR callbackasm1(SB)
+ MOVD $1118, R0
+ BR callbackasm1(SB)
+ MOVD $1119, R0
+ BR callbackasm1(SB)
+ MOVD $1120, R0
+ BR callbackasm1(SB)
+ MOVD $1121, R0
+ BR callbackasm1(SB)
+ MOVD $1122, R0
+ BR callbackasm1(SB)
+ MOVD $1123, R0
+ BR callbackasm1(SB)
+ MOVD $1124, R0
+ BR callbackasm1(SB)
+ MOVD $1125, R0
+ BR callbackasm1(SB)
+ MOVD $1126, R0
+ BR callbackasm1(SB)
+ MOVD $1127, R0
+ BR callbackasm1(SB)
+ MOVD $1128, R0
+ BR callbackasm1(SB)
+ MOVD $1129, R0
+ BR callbackasm1(SB)
+ MOVD $1130, R0
+ BR callbackasm1(SB)
+ MOVD $1131, R0
+ BR callbackasm1(SB)
+ MOVD $1132, R0
+ BR callbackasm1(SB)
+ MOVD $1133, R0
+ BR callbackasm1(SB)
+ MOVD $1134, R0
+ BR callbackasm1(SB)
+ MOVD $1135, R0
+ BR callbackasm1(SB)
+ MOVD $1136, R0
+ BR callbackasm1(SB)
+ MOVD $1137, R0
+ BR callbackasm1(SB)
+ MOVD $1138, R0
+ BR callbackasm1(SB)
+ MOVD $1139, R0
+ BR callbackasm1(SB)
+ MOVD $1140, R0
+ BR callbackasm1(SB)
+ MOVD $1141, R0
+ BR callbackasm1(SB)
+ MOVD $1142, R0
+ BR callbackasm1(SB)
+ MOVD $1143, R0
+ BR callbackasm1(SB)
+ MOVD $1144, R0
+ BR callbackasm1(SB)
+ MOVD $1145, R0
+ BR callbackasm1(SB)
+ MOVD $1146, R0
+ BR callbackasm1(SB)
+ MOVD $1147, R0
+ BR callbackasm1(SB)
+ MOVD $1148, R0
+ BR callbackasm1(SB)
+ MOVD $1149, R0
+ BR callbackasm1(SB)
+ MOVD $1150, R0
+ BR callbackasm1(SB)
+ MOVD $1151, R0
+ BR callbackasm1(SB)
+ MOVD $1152, R0
+ BR callbackasm1(SB)
+ MOVD $1153, R0
+ BR callbackasm1(SB)
+ MOVD $1154, R0
+ BR callbackasm1(SB)
+ MOVD $1155, R0
+ BR callbackasm1(SB)
+ MOVD $1156, R0
+ BR callbackasm1(SB)
+ MOVD $1157, R0
+ BR callbackasm1(SB)
+ MOVD $1158, R0
+ BR callbackasm1(SB)
+ MOVD $1159, R0
+ BR callbackasm1(SB)
+ MOVD $1160, R0
+ BR callbackasm1(SB)
+ MOVD $1161, R0
+ BR callbackasm1(SB)
+ MOVD $1162, R0
+ BR callbackasm1(SB)
+ MOVD $1163, R0
+ BR callbackasm1(SB)
+ MOVD $1164, R0
+ BR callbackasm1(SB)
+ MOVD $1165, R0
+ BR callbackasm1(SB)
+ MOVD $1166, R0
+ BR callbackasm1(SB)
+ MOVD $1167, R0
+ BR callbackasm1(SB)
+ MOVD $1168, R0
+ BR callbackasm1(SB)
+ MOVD $1169, R0
+ BR callbackasm1(SB)
+ MOVD $1170, R0
+ BR callbackasm1(SB)
+ MOVD $1171, R0
+ BR callbackasm1(SB)
+ MOVD $1172, R0
+ BR callbackasm1(SB)
+ MOVD $1173, R0
+ BR callbackasm1(SB)
+ MOVD $1174, R0
+ BR callbackasm1(SB)
+ MOVD $1175, R0
+ BR callbackasm1(SB)
+ MOVD $1176, R0
+ BR callbackasm1(SB)
+ MOVD $1177, R0
+ BR callbackasm1(SB)
+ MOVD $1178, R0
+ BR callbackasm1(SB)
+ MOVD $1179, R0
+ BR callbackasm1(SB)
+ MOVD $1180, R0
+ BR callbackasm1(SB)
+ MOVD $1181, R0
+ BR callbackasm1(SB)
+ MOVD $1182, R0
+ BR callbackasm1(SB)
+ MOVD $1183, R0
+ BR callbackasm1(SB)
+ MOVD $1184, R0
+ BR callbackasm1(SB)
+ MOVD $1185, R0
+ BR callbackasm1(SB)
+ MOVD $1186, R0
+ BR callbackasm1(SB)
+ MOVD $1187, R0
+ BR callbackasm1(SB)
+ MOVD $1188, R0
+ BR callbackasm1(SB)
+ MOVD $1189, R0
+ BR callbackasm1(SB)
+ MOVD $1190, R0
+ BR callbackasm1(SB)
+ MOVD $1191, R0
+ BR callbackasm1(SB)
+ MOVD $1192, R0
+ BR callbackasm1(SB)
+ MOVD $1193, R0
+ BR callbackasm1(SB)
+ MOVD $1194, R0
+ BR callbackasm1(SB)
+ MOVD $1195, R0
+ BR callbackasm1(SB)
+ MOVD $1196, R0
+ BR callbackasm1(SB)
+ MOVD $1197, R0
+ BR callbackasm1(SB)
+ MOVD $1198, R0
+ BR callbackasm1(SB)
+ MOVD $1199, R0
+ BR callbackasm1(SB)
+ MOVD $1200, R0
+ BR callbackasm1(SB)
+ MOVD $1201, R0
+ BR callbackasm1(SB)
+ MOVD $1202, R0
+ BR callbackasm1(SB)
+ MOVD $1203, R0
+ BR callbackasm1(SB)
+ MOVD $1204, R0
+ BR callbackasm1(SB)
+ MOVD $1205, R0
+ BR callbackasm1(SB)
+ MOVD $1206, R0
+ BR callbackasm1(SB)
+ MOVD $1207, R0
+ BR callbackasm1(SB)
+ MOVD $1208, R0
+ BR callbackasm1(SB)
+ MOVD $1209, R0
+ BR callbackasm1(SB)
+ MOVD $1210, R0
+ BR callbackasm1(SB)
+ MOVD $1211, R0
+ BR callbackasm1(SB)
+ MOVD $1212, R0
+ BR callbackasm1(SB)
+ MOVD $1213, R0
+ BR callbackasm1(SB)
+ MOVD $1214, R0
+ BR callbackasm1(SB)
+ MOVD $1215, R0
+ BR callbackasm1(SB)
+ MOVD $1216, R0
+ BR callbackasm1(SB)
+ MOVD $1217, R0
+ BR callbackasm1(SB)
+ MOVD $1218, R0
+ BR callbackasm1(SB)
+ MOVD $1219, R0
+ BR callbackasm1(SB)
+ MOVD $1220, R0
+ BR callbackasm1(SB)
+ MOVD $1221, R0
+ BR callbackasm1(SB)
+ MOVD $1222, R0
+ BR callbackasm1(SB)
+ MOVD $1223, R0
+ BR callbackasm1(SB)
+ MOVD $1224, R0
+ BR callbackasm1(SB)
+ MOVD $1225, R0
+ BR callbackasm1(SB)
+ MOVD $1226, R0
+ BR callbackasm1(SB)
+ MOVD $1227, R0
+ BR callbackasm1(SB)
+ MOVD $1228, R0
+ BR callbackasm1(SB)
+ MOVD $1229, R0
+ BR callbackasm1(SB)
+ MOVD $1230, R0
+ BR callbackasm1(SB)
+ MOVD $1231, R0
+ BR callbackasm1(SB)
+ MOVD $1232, R0
+ BR callbackasm1(SB)
+ MOVD $1233, R0
+ BR callbackasm1(SB)
+ MOVD $1234, R0
+ BR callbackasm1(SB)
+ MOVD $1235, R0
+ BR callbackasm1(SB)
+ MOVD $1236, R0
+ BR callbackasm1(SB)
+ MOVD $1237, R0
+ BR callbackasm1(SB)
+ MOVD $1238, R0
+ BR callbackasm1(SB)
+ MOVD $1239, R0
+ BR callbackasm1(SB)
+ MOVD $1240, R0
+ BR callbackasm1(SB)
+ MOVD $1241, R0
+ BR callbackasm1(SB)
+ MOVD $1242, R0
+ BR callbackasm1(SB)
+ MOVD $1243, R0
+ BR callbackasm1(SB)
+ MOVD $1244, R0
+ BR callbackasm1(SB)
+ MOVD $1245, R0
+ BR callbackasm1(SB)
+ MOVD $1246, R0
+ BR callbackasm1(SB)
+ MOVD $1247, R0
+ BR callbackasm1(SB)
+ MOVD $1248, R0
+ BR callbackasm1(SB)
+ MOVD $1249, R0
+ BR callbackasm1(SB)
+ MOVD $1250, R0
+ BR callbackasm1(SB)
+ MOVD $1251, R0
+ BR callbackasm1(SB)
+ MOVD $1252, R0
+ BR callbackasm1(SB)
+ MOVD $1253, R0
+ BR callbackasm1(SB)
+ MOVD $1254, R0
+ BR callbackasm1(SB)
+ MOVD $1255, R0
+ BR callbackasm1(SB)
+ MOVD $1256, R0
+ BR callbackasm1(SB)
+ MOVD $1257, R0
+ BR callbackasm1(SB)
+ MOVD $1258, R0
+ BR callbackasm1(SB)
+ MOVD $1259, R0
+ BR callbackasm1(SB)
+ MOVD $1260, R0
+ BR callbackasm1(SB)
+ MOVD $1261, R0
+ BR callbackasm1(SB)
+ MOVD $1262, R0
+ BR callbackasm1(SB)
+ MOVD $1263, R0
+ BR callbackasm1(SB)
+ MOVD $1264, R0
+ BR callbackasm1(SB)
+ MOVD $1265, R0
+ BR callbackasm1(SB)
+ MOVD $1266, R0
+ BR callbackasm1(SB)
+ MOVD $1267, R0
+ BR callbackasm1(SB)
+ MOVD $1268, R0
+ BR callbackasm1(SB)
+ MOVD $1269, R0
+ BR callbackasm1(SB)
+ MOVD $1270, R0
+ BR callbackasm1(SB)
+ MOVD $1271, R0
+ BR callbackasm1(SB)
+ MOVD $1272, R0
+ BR callbackasm1(SB)
+ MOVD $1273, R0
+ BR callbackasm1(SB)
+ MOVD $1274, R0
+ BR callbackasm1(SB)
+ MOVD $1275, R0
+ BR callbackasm1(SB)
+ MOVD $1276, R0
+ BR callbackasm1(SB)
+ MOVD $1277, R0
+ BR callbackasm1(SB)
+ MOVD $1278, R0
+ BR callbackasm1(SB)
+ MOVD $1279, R0
+ BR callbackasm1(SB)
+ MOVD $1280, R0
+ BR callbackasm1(SB)
+ MOVD $1281, R0
+ BR callbackasm1(SB)
+ MOVD $1282, R0
+ BR callbackasm1(SB)
+ MOVD $1283, R0
+ BR callbackasm1(SB)
+ MOVD $1284, R0
+ BR callbackasm1(SB)
+ MOVD $1285, R0
+ BR callbackasm1(SB)
+ MOVD $1286, R0
+ BR callbackasm1(SB)
+ MOVD $1287, R0
+ BR callbackasm1(SB)
+ MOVD $1288, R0
+ BR callbackasm1(SB)
+ MOVD $1289, R0
+ BR callbackasm1(SB)
+ MOVD $1290, R0
+ BR callbackasm1(SB)
+ MOVD $1291, R0
+ BR callbackasm1(SB)
+ MOVD $1292, R0
+ BR callbackasm1(SB)
+ MOVD $1293, R0
+ BR callbackasm1(SB)
+ MOVD $1294, R0
+ BR callbackasm1(SB)
+ MOVD $1295, R0
+ BR callbackasm1(SB)
+ MOVD $1296, R0
+ BR callbackasm1(SB)
+ MOVD $1297, R0
+ BR callbackasm1(SB)
+ MOVD $1298, R0
+ BR callbackasm1(SB)
+ MOVD $1299, R0
+ BR callbackasm1(SB)
+ MOVD $1300, R0
+ BR callbackasm1(SB)
+ MOVD $1301, R0
+ BR callbackasm1(SB)
+ MOVD $1302, R0
+ BR callbackasm1(SB)
+ MOVD $1303, R0
+ BR callbackasm1(SB)
+ MOVD $1304, R0
+ BR callbackasm1(SB)
+ MOVD $1305, R0
+ BR callbackasm1(SB)
+ MOVD $1306, R0
+ BR callbackasm1(SB)
+ MOVD $1307, R0
+ BR callbackasm1(SB)
+ MOVD $1308, R0
+ BR callbackasm1(SB)
+ MOVD $1309, R0
+ BR callbackasm1(SB)
+ MOVD $1310, R0
+ BR callbackasm1(SB)
+ MOVD $1311, R0
+ BR callbackasm1(SB)
+ MOVD $1312, R0
+ BR callbackasm1(SB)
+ MOVD $1313, R0
+ BR callbackasm1(SB)
+ MOVD $1314, R0
+ BR callbackasm1(SB)
+ MOVD $1315, R0
+ BR callbackasm1(SB)
+ MOVD $1316, R0
+ BR callbackasm1(SB)
+ MOVD $1317, R0
+ BR callbackasm1(SB)
+ MOVD $1318, R0
+ BR callbackasm1(SB)
+ MOVD $1319, R0
+ BR callbackasm1(SB)
+ MOVD $1320, R0
+ BR callbackasm1(SB)
+ MOVD $1321, R0
+ BR callbackasm1(SB)
+ MOVD $1322, R0
+ BR callbackasm1(SB)
+ MOVD $1323, R0
+ BR callbackasm1(SB)
+ MOVD $1324, R0
+ BR callbackasm1(SB)
+ MOVD $1325, R0
+ BR callbackasm1(SB)
+ MOVD $1326, R0
+ BR callbackasm1(SB)
+ MOVD $1327, R0
+ BR callbackasm1(SB)
+ MOVD $1328, R0
+ BR callbackasm1(SB)
+ MOVD $1329, R0
+ BR callbackasm1(SB)
+ MOVD $1330, R0
+ BR callbackasm1(SB)
+ MOVD $1331, R0
+ BR callbackasm1(SB)
+ MOVD $1332, R0
+ BR callbackasm1(SB)
+ MOVD $1333, R0
+ BR callbackasm1(SB)
+ MOVD $1334, R0
+ BR callbackasm1(SB)
+ MOVD $1335, R0
+ BR callbackasm1(SB)
+ MOVD $1336, R0
+ BR callbackasm1(SB)
+ MOVD $1337, R0
+ BR callbackasm1(SB)
+ MOVD $1338, R0
+ BR callbackasm1(SB)
+ MOVD $1339, R0
+ BR callbackasm1(SB)
+ MOVD $1340, R0
+ BR callbackasm1(SB)
+ MOVD $1341, R0
+ BR callbackasm1(SB)
+ MOVD $1342, R0
+ BR callbackasm1(SB)
+ MOVD $1343, R0
+ BR callbackasm1(SB)
+ MOVD $1344, R0
+ BR callbackasm1(SB)
+ MOVD $1345, R0
+ BR callbackasm1(SB)
+ MOVD $1346, R0
+ BR callbackasm1(SB)
+ MOVD $1347, R0
+ BR callbackasm1(SB)
+ MOVD $1348, R0
+ BR callbackasm1(SB)
+ MOVD $1349, R0
+ BR callbackasm1(SB)
+ MOVD $1350, R0
+ BR callbackasm1(SB)
+ MOVD $1351, R0
+ BR callbackasm1(SB)
+ MOVD $1352, R0
+ BR callbackasm1(SB)
+ MOVD $1353, R0
+ BR callbackasm1(SB)
+ MOVD $1354, R0
+ BR callbackasm1(SB)
+ MOVD $1355, R0
+ BR callbackasm1(SB)
+ MOVD $1356, R0
+ BR callbackasm1(SB)
+ MOVD $1357, R0
+ BR callbackasm1(SB)
+ MOVD $1358, R0
+ BR callbackasm1(SB)
+ MOVD $1359, R0
+ BR callbackasm1(SB)
+ MOVD $1360, R0
+ BR callbackasm1(SB)
+ MOVD $1361, R0
+ BR callbackasm1(SB)
+ MOVD $1362, R0
+ BR callbackasm1(SB)
+ MOVD $1363, R0
+ BR callbackasm1(SB)
+ MOVD $1364, R0
+ BR callbackasm1(SB)
+ MOVD $1365, R0
+ BR callbackasm1(SB)
+ MOVD $1366, R0
+ BR callbackasm1(SB)
+ MOVD $1367, R0
+ BR callbackasm1(SB)
+ MOVD $1368, R0
+ BR callbackasm1(SB)
+ MOVD $1369, R0
+ BR callbackasm1(SB)
+ MOVD $1370, R0
+ BR callbackasm1(SB)
+ MOVD $1371, R0
+ BR callbackasm1(SB)
+ MOVD $1372, R0
+ BR callbackasm1(SB)
+ MOVD $1373, R0
+ BR callbackasm1(SB)
+ MOVD $1374, R0
+ BR callbackasm1(SB)
+ MOVD $1375, R0
+ BR callbackasm1(SB)
+ MOVD $1376, R0
+ BR callbackasm1(SB)
+ MOVD $1377, R0
+ BR callbackasm1(SB)
+ MOVD $1378, R0
+ BR callbackasm1(SB)
+ MOVD $1379, R0
+ BR callbackasm1(SB)
+ MOVD $1380, R0
+ BR callbackasm1(SB)
+ MOVD $1381, R0
+ BR callbackasm1(SB)
+ MOVD $1382, R0
+ BR callbackasm1(SB)
+ MOVD $1383, R0
+ BR callbackasm1(SB)
+ MOVD $1384, R0
+ BR callbackasm1(SB)
+ MOVD $1385, R0
+ BR callbackasm1(SB)
+ MOVD $1386, R0
+ BR callbackasm1(SB)
+ MOVD $1387, R0
+ BR callbackasm1(SB)
+ MOVD $1388, R0
+ BR callbackasm1(SB)
+ MOVD $1389, R0
+ BR callbackasm1(SB)
+ MOVD $1390, R0
+ BR callbackasm1(SB)
+ MOVD $1391, R0
+ BR callbackasm1(SB)
+ MOVD $1392, R0
+ BR callbackasm1(SB)
+ MOVD $1393, R0
+ BR callbackasm1(SB)
+ MOVD $1394, R0
+ BR callbackasm1(SB)
+ MOVD $1395, R0
+ BR callbackasm1(SB)
+ MOVD $1396, R0
+ BR callbackasm1(SB)
+ MOVD $1397, R0
+ BR callbackasm1(SB)
+ MOVD $1398, R0
+ BR callbackasm1(SB)
+ MOVD $1399, R0
+ BR callbackasm1(SB)
+ MOVD $1400, R0
+ BR callbackasm1(SB)
+ MOVD $1401, R0
+ BR callbackasm1(SB)
+ MOVD $1402, R0
+ BR callbackasm1(SB)
+ MOVD $1403, R0
+ BR callbackasm1(SB)
+ MOVD $1404, R0
+ BR callbackasm1(SB)
+ MOVD $1405, R0
+ BR callbackasm1(SB)
+ MOVD $1406, R0
+ BR callbackasm1(SB)
+ MOVD $1407, R0
+ BR callbackasm1(SB)
+ MOVD $1408, R0
+ BR callbackasm1(SB)
+ MOVD $1409, R0
+ BR callbackasm1(SB)
+ MOVD $1410, R0
+ BR callbackasm1(SB)
+ MOVD $1411, R0
+ BR callbackasm1(SB)
+ MOVD $1412, R0
+ BR callbackasm1(SB)
+ MOVD $1413, R0
+ BR callbackasm1(SB)
+ MOVD $1414, R0
+ BR callbackasm1(SB)
+ MOVD $1415, R0
+ BR callbackasm1(SB)
+ MOVD $1416, R0
+ BR callbackasm1(SB)
+ MOVD $1417, R0
+ BR callbackasm1(SB)
+ MOVD $1418, R0
+ BR callbackasm1(SB)
+ MOVD $1419, R0
+ BR callbackasm1(SB)
+ MOVD $1420, R0
+ BR callbackasm1(SB)
+ MOVD $1421, R0
+ BR callbackasm1(SB)
+ MOVD $1422, R0
+ BR callbackasm1(SB)
+ MOVD $1423, R0
+ BR callbackasm1(SB)
+ MOVD $1424, R0
+ BR callbackasm1(SB)
+ MOVD $1425, R0
+ BR callbackasm1(SB)
+ MOVD $1426, R0
+ BR callbackasm1(SB)
+ MOVD $1427, R0
+ BR callbackasm1(SB)
+ MOVD $1428, R0
+ BR callbackasm1(SB)
+ MOVD $1429, R0
+ BR callbackasm1(SB)
+ MOVD $1430, R0
+ BR callbackasm1(SB)
+ MOVD $1431, R0
+ BR callbackasm1(SB)
+ MOVD $1432, R0
+ BR callbackasm1(SB)
+ MOVD $1433, R0
+ BR callbackasm1(SB)
+ MOVD $1434, R0
+ BR callbackasm1(SB)
+ MOVD $1435, R0
+ BR callbackasm1(SB)
+ MOVD $1436, R0
+ BR callbackasm1(SB)
+ MOVD $1437, R0
+ BR callbackasm1(SB)
+ MOVD $1438, R0
+ BR callbackasm1(SB)
+ MOVD $1439, R0
+ BR callbackasm1(SB)
+ MOVD $1440, R0
+ BR callbackasm1(SB)
+ MOVD $1441, R0
+ BR callbackasm1(SB)
+ MOVD $1442, R0
+ BR callbackasm1(SB)
+ MOVD $1443, R0
+ BR callbackasm1(SB)
+ MOVD $1444, R0
+ BR callbackasm1(SB)
+ MOVD $1445, R0
+ BR callbackasm1(SB)
+ MOVD $1446, R0
+ BR callbackasm1(SB)
+ MOVD $1447, R0
+ BR callbackasm1(SB)
+ MOVD $1448, R0
+ BR callbackasm1(SB)
+ MOVD $1449, R0
+ BR callbackasm1(SB)
+ MOVD $1450, R0
+ BR callbackasm1(SB)
+ MOVD $1451, R0
+ BR callbackasm1(SB)
+ MOVD $1452, R0
+ BR callbackasm1(SB)
+ MOVD $1453, R0
+ BR callbackasm1(SB)
+ MOVD $1454, R0
+ BR callbackasm1(SB)
+ MOVD $1455, R0
+ BR callbackasm1(SB)
+ MOVD $1456, R0
+ BR callbackasm1(SB)
+ MOVD $1457, R0
+ BR callbackasm1(SB)
+ MOVD $1458, R0
+ BR callbackasm1(SB)
+ MOVD $1459, R0
+ BR callbackasm1(SB)
+ MOVD $1460, R0
+ BR callbackasm1(SB)
+ MOVD $1461, R0
+ BR callbackasm1(SB)
+ MOVD $1462, R0
+ BR callbackasm1(SB)
+ MOVD $1463, R0
+ BR callbackasm1(SB)
+ MOVD $1464, R0
+ BR callbackasm1(SB)
+ MOVD $1465, R0
+ BR callbackasm1(SB)
+ MOVD $1466, R0
+ BR callbackasm1(SB)
+ MOVD $1467, R0
+ BR callbackasm1(SB)
+ MOVD $1468, R0
+ BR callbackasm1(SB)
+ MOVD $1469, R0
+ BR callbackasm1(SB)
+ MOVD $1470, R0
+ BR callbackasm1(SB)
+ MOVD $1471, R0
+ BR callbackasm1(SB)
+ MOVD $1472, R0
+ BR callbackasm1(SB)
+ MOVD $1473, R0
+ BR callbackasm1(SB)
+ MOVD $1474, R0
+ BR callbackasm1(SB)
+ MOVD $1475, R0
+ BR callbackasm1(SB)
+ MOVD $1476, R0
+ BR callbackasm1(SB)
+ MOVD $1477, R0
+ BR callbackasm1(SB)
+ MOVD $1478, R0
+ BR callbackasm1(SB)
+ MOVD $1479, R0
+ BR callbackasm1(SB)
+ MOVD $1480, R0
+ BR callbackasm1(SB)
+ MOVD $1481, R0
+ BR callbackasm1(SB)
+ MOVD $1482, R0
+ BR callbackasm1(SB)
+ MOVD $1483, R0
+ BR callbackasm1(SB)
+ MOVD $1484, R0
+ BR callbackasm1(SB)
+ MOVD $1485, R0
+ BR callbackasm1(SB)
+ MOVD $1486, R0
+ BR callbackasm1(SB)
+ MOVD $1487, R0
+ BR callbackasm1(SB)
+ MOVD $1488, R0
+ BR callbackasm1(SB)
+ MOVD $1489, R0
+ BR callbackasm1(SB)
+ MOVD $1490, R0
+ BR callbackasm1(SB)
+ MOVD $1491, R0
+ BR callbackasm1(SB)
+ MOVD $1492, R0
+ BR callbackasm1(SB)
+ MOVD $1493, R0
+ BR callbackasm1(SB)
+ MOVD $1494, R0
+ BR callbackasm1(SB)
+ MOVD $1495, R0
+ BR callbackasm1(SB)
+ MOVD $1496, R0
+ BR callbackasm1(SB)
+ MOVD $1497, R0
+ BR callbackasm1(SB)
+ MOVD $1498, R0
+ BR callbackasm1(SB)
+ MOVD $1499, R0
+ BR callbackasm1(SB)
+ MOVD $1500, R0
+ BR callbackasm1(SB)
+ MOVD $1501, R0
+ BR callbackasm1(SB)
+ MOVD $1502, R0
+ BR callbackasm1(SB)
+ MOVD $1503, R0
+ BR callbackasm1(SB)
+ MOVD $1504, R0
+ BR callbackasm1(SB)
+ MOVD $1505, R0
+ BR callbackasm1(SB)
+ MOVD $1506, R0
+ BR callbackasm1(SB)
+ MOVD $1507, R0
+ BR callbackasm1(SB)
+ MOVD $1508, R0
+ BR callbackasm1(SB)
+ MOVD $1509, R0
+ BR callbackasm1(SB)
+ MOVD $1510, R0
+ BR callbackasm1(SB)
+ MOVD $1511, R0
+ BR callbackasm1(SB)
+ MOVD $1512, R0
+ BR callbackasm1(SB)
+ MOVD $1513, R0
+ BR callbackasm1(SB)
+ MOVD $1514, R0
+ BR callbackasm1(SB)
+ MOVD $1515, R0
+ BR callbackasm1(SB)
+ MOVD $1516, R0
+ BR callbackasm1(SB)
+ MOVD $1517, R0
+ BR callbackasm1(SB)
+ MOVD $1518, R0
+ BR callbackasm1(SB)
+ MOVD $1519, R0
+ BR callbackasm1(SB)
+ MOVD $1520, R0
+ BR callbackasm1(SB)
+ MOVD $1521, R0
+ BR callbackasm1(SB)
+ MOVD $1522, R0
+ BR callbackasm1(SB)
+ MOVD $1523, R0
+ BR callbackasm1(SB)
+ MOVD $1524, R0
+ BR callbackasm1(SB)
+ MOVD $1525, R0
+ BR callbackasm1(SB)
+ MOVD $1526, R0
+ BR callbackasm1(SB)
+ MOVD $1527, R0
+ BR callbackasm1(SB)
+ MOVD $1528, R0
+ BR callbackasm1(SB)
+ MOVD $1529, R0
+ BR callbackasm1(SB)
+ MOVD $1530, R0
+ BR callbackasm1(SB)
+ MOVD $1531, R0
+ BR callbackasm1(SB)
+ MOVD $1532, R0
+ BR callbackasm1(SB)
+ MOVD $1533, R0
+ BR callbackasm1(SB)
+ MOVD $1534, R0
+ BR callbackasm1(SB)
+ MOVD $1535, R0
+ BR callbackasm1(SB)
+ MOVD $1536, R0
+ BR callbackasm1(SB)
+ MOVD $1537, R0
+ BR callbackasm1(SB)
+ MOVD $1538, R0
+ BR callbackasm1(SB)
+ MOVD $1539, R0
+ BR callbackasm1(SB)
+ MOVD $1540, R0
+ BR callbackasm1(SB)
+ MOVD $1541, R0
+ BR callbackasm1(SB)
+ MOVD $1542, R0
+ BR callbackasm1(SB)
+ MOVD $1543, R0
+ BR callbackasm1(SB)
+ MOVD $1544, R0
+ BR callbackasm1(SB)
+ MOVD $1545, R0
+ BR callbackasm1(SB)
+ MOVD $1546, R0
+ BR callbackasm1(SB)
+ MOVD $1547, R0
+ BR callbackasm1(SB)
+ MOVD $1548, R0
+ BR callbackasm1(SB)
+ MOVD $1549, R0
+ BR callbackasm1(SB)
+ MOVD $1550, R0
+ BR callbackasm1(SB)
+ MOVD $1551, R0
+ BR callbackasm1(SB)
+ MOVD $1552, R0
+ BR callbackasm1(SB)
+ MOVD $1553, R0
+ BR callbackasm1(SB)
+ MOVD $1554, R0
+ BR callbackasm1(SB)
+ MOVD $1555, R0
+ BR callbackasm1(SB)
+ MOVD $1556, R0
+ BR callbackasm1(SB)
+ MOVD $1557, R0
+ BR callbackasm1(SB)
+ MOVD $1558, R0
+ BR callbackasm1(SB)
+ MOVD $1559, R0
+ BR callbackasm1(SB)
+ MOVD $1560, R0
+ BR callbackasm1(SB)
+ MOVD $1561, R0
+ BR callbackasm1(SB)
+ MOVD $1562, R0
+ BR callbackasm1(SB)
+ MOVD $1563, R0
+ BR callbackasm1(SB)
+ MOVD $1564, R0
+ BR callbackasm1(SB)
+ MOVD $1565, R0
+ BR callbackasm1(SB)
+ MOVD $1566, R0
+ BR callbackasm1(SB)
+ MOVD $1567, R0
+ BR callbackasm1(SB)
+ MOVD $1568, R0
+ BR callbackasm1(SB)
+ MOVD $1569, R0
+ BR callbackasm1(SB)
+ MOVD $1570, R0
+ BR callbackasm1(SB)
+ MOVD $1571, R0
+ BR callbackasm1(SB)
+ MOVD $1572, R0
+ BR callbackasm1(SB)
+ MOVD $1573, R0
+ BR callbackasm1(SB)
+ MOVD $1574, R0
+ BR callbackasm1(SB)
+ MOVD $1575, R0
+ BR callbackasm1(SB)
+ MOVD $1576, R0
+ BR callbackasm1(SB)
+ MOVD $1577, R0
+ BR callbackasm1(SB)
+ MOVD $1578, R0
+ BR callbackasm1(SB)
+ MOVD $1579, R0
+ BR callbackasm1(SB)
+ MOVD $1580, R0
+ BR callbackasm1(SB)
+ MOVD $1581, R0
+ BR callbackasm1(SB)
+ MOVD $1582, R0
+ BR callbackasm1(SB)
+ MOVD $1583, R0
+ BR callbackasm1(SB)
+ MOVD $1584, R0
+ BR callbackasm1(SB)
+ MOVD $1585, R0
+ BR callbackasm1(SB)
+ MOVD $1586, R0
+ BR callbackasm1(SB)
+ MOVD $1587, R0
+ BR callbackasm1(SB)
+ MOVD $1588, R0
+ BR callbackasm1(SB)
+ MOVD $1589, R0
+ BR callbackasm1(SB)
+ MOVD $1590, R0
+ BR callbackasm1(SB)
+ MOVD $1591, R0
+ BR callbackasm1(SB)
+ MOVD $1592, R0
+ BR callbackasm1(SB)
+ MOVD $1593, R0
+ BR callbackasm1(SB)
+ MOVD $1594, R0
+ BR callbackasm1(SB)
+ MOVD $1595, R0
+ BR callbackasm1(SB)
+ MOVD $1596, R0
+ BR callbackasm1(SB)
+ MOVD $1597, R0
+ BR callbackasm1(SB)
+ MOVD $1598, R0
+ BR callbackasm1(SB)
+ MOVD $1599, R0
+ BR callbackasm1(SB)
+ MOVD $1600, R0
+ BR callbackasm1(SB)
+ MOVD $1601, R0
+ BR callbackasm1(SB)
+ MOVD $1602, R0
+ BR callbackasm1(SB)
+ MOVD $1603, R0
+ BR callbackasm1(SB)
+ MOVD $1604, R0
+ BR callbackasm1(SB)
+ MOVD $1605, R0
+ BR callbackasm1(SB)
+ MOVD $1606, R0
+ BR callbackasm1(SB)
+ MOVD $1607, R0
+ BR callbackasm1(SB)
+ MOVD $1608, R0
+ BR callbackasm1(SB)
+ MOVD $1609, R0
+ BR callbackasm1(SB)
+ MOVD $1610, R0
+ BR callbackasm1(SB)
+ MOVD $1611, R0
+ BR callbackasm1(SB)
+ MOVD $1612, R0
+ BR callbackasm1(SB)
+ MOVD $1613, R0
+ BR callbackasm1(SB)
+ MOVD $1614, R0
+ BR callbackasm1(SB)
+ MOVD $1615, R0
+ BR callbackasm1(SB)
+ MOVD $1616, R0
+ BR callbackasm1(SB)
+ MOVD $1617, R0
+ BR callbackasm1(SB)
+ MOVD $1618, R0
+ BR callbackasm1(SB)
+ MOVD $1619, R0
+ BR callbackasm1(SB)
+ MOVD $1620, R0
+ BR callbackasm1(SB)
+ MOVD $1621, R0
+ BR callbackasm1(SB)
+ MOVD $1622, R0
+ BR callbackasm1(SB)
+ MOVD $1623, R0
+ BR callbackasm1(SB)
+ MOVD $1624, R0
+ BR callbackasm1(SB)
+ MOVD $1625, R0
+ BR callbackasm1(SB)
+ MOVD $1626, R0
+ BR callbackasm1(SB)
+ MOVD $1627, R0
+ BR callbackasm1(SB)
+ MOVD $1628, R0
+ BR callbackasm1(SB)
+ MOVD $1629, R0
+ BR callbackasm1(SB)
+ MOVD $1630, R0
+ BR callbackasm1(SB)
+ MOVD $1631, R0
+ BR callbackasm1(SB)
+ MOVD $1632, R0
+ BR callbackasm1(SB)
+ MOVD $1633, R0
+ BR callbackasm1(SB)
+ MOVD $1634, R0
+ BR callbackasm1(SB)
+ MOVD $1635, R0
+ BR callbackasm1(SB)
+ MOVD $1636, R0
+ BR callbackasm1(SB)
+ MOVD $1637, R0
+ BR callbackasm1(SB)
+ MOVD $1638, R0
+ BR callbackasm1(SB)
+ MOVD $1639, R0
+ BR callbackasm1(SB)
+ MOVD $1640, R0
+ BR callbackasm1(SB)
+ MOVD $1641, R0
+ BR callbackasm1(SB)
+ MOVD $1642, R0
+ BR callbackasm1(SB)
+ MOVD $1643, R0
+ BR callbackasm1(SB)
+ MOVD $1644, R0
+ BR callbackasm1(SB)
+ MOVD $1645, R0
+ BR callbackasm1(SB)
+ MOVD $1646, R0
+ BR callbackasm1(SB)
+ MOVD $1647, R0
+ BR callbackasm1(SB)
+ MOVD $1648, R0
+ BR callbackasm1(SB)
+ MOVD $1649, R0
+ BR callbackasm1(SB)
+ MOVD $1650, R0
+ BR callbackasm1(SB)
+ MOVD $1651, R0
+ BR callbackasm1(SB)
+ MOVD $1652, R0
+ BR callbackasm1(SB)
+ MOVD $1653, R0
+ BR callbackasm1(SB)
+ MOVD $1654, R0
+ BR callbackasm1(SB)
+ MOVD $1655, R0
+ BR callbackasm1(SB)
+ MOVD $1656, R0
+ BR callbackasm1(SB)
+ MOVD $1657, R0
+ BR callbackasm1(SB)
+ MOVD $1658, R0
+ BR callbackasm1(SB)
+ MOVD $1659, R0
+ BR callbackasm1(SB)
+ MOVD $1660, R0
+ BR callbackasm1(SB)
+ MOVD $1661, R0
+ BR callbackasm1(SB)
+ MOVD $1662, R0
+ BR callbackasm1(SB)
+ MOVD $1663, R0
+ BR callbackasm1(SB)
+ MOVD $1664, R0
+ BR callbackasm1(SB)
+ MOVD $1665, R0
+ BR callbackasm1(SB)
+ MOVD $1666, R0
+ BR callbackasm1(SB)
+ MOVD $1667, R0
+ BR callbackasm1(SB)
+ MOVD $1668, R0
+ BR callbackasm1(SB)
+ MOVD $1669, R0
+ BR callbackasm1(SB)
+ MOVD $1670, R0
+ BR callbackasm1(SB)
+ MOVD $1671, R0
+ BR callbackasm1(SB)
+ MOVD $1672, R0
+ BR callbackasm1(SB)
+ MOVD $1673, R0
+ BR callbackasm1(SB)
+ MOVD $1674, R0
+ BR callbackasm1(SB)
+ MOVD $1675, R0
+ BR callbackasm1(SB)
+ MOVD $1676, R0
+ BR callbackasm1(SB)
+ MOVD $1677, R0
+ BR callbackasm1(SB)
+ MOVD $1678, R0
+ BR callbackasm1(SB)
+ MOVD $1679, R0
+ BR callbackasm1(SB)
+ MOVD $1680, R0
+ BR callbackasm1(SB)
+ MOVD $1681, R0
+ BR callbackasm1(SB)
+ MOVD $1682, R0
+ BR callbackasm1(SB)
+ MOVD $1683, R0
+ BR callbackasm1(SB)
+ MOVD $1684, R0
+ BR callbackasm1(SB)
+ MOVD $1685, R0
+ BR callbackasm1(SB)
+ MOVD $1686, R0
+ BR callbackasm1(SB)
+ MOVD $1687, R0
+ BR callbackasm1(SB)
+ MOVD $1688, R0
+ BR callbackasm1(SB)
+ MOVD $1689, R0
+ BR callbackasm1(SB)
+ MOVD $1690, R0
+ BR callbackasm1(SB)
+ MOVD $1691, R0
+ BR callbackasm1(SB)
+ MOVD $1692, R0
+ BR callbackasm1(SB)
+ MOVD $1693, R0
+ BR callbackasm1(SB)
+ MOVD $1694, R0
+ BR callbackasm1(SB)
+ MOVD $1695, R0
+ BR callbackasm1(SB)
+ MOVD $1696, R0
+ BR callbackasm1(SB)
+ MOVD $1697, R0
+ BR callbackasm1(SB)
+ MOVD $1698, R0
+ BR callbackasm1(SB)
+ MOVD $1699, R0
+ BR callbackasm1(SB)
+ MOVD $1700, R0
+ BR callbackasm1(SB)
+ MOVD $1701, R0
+ BR callbackasm1(SB)
+ MOVD $1702, R0
+ BR callbackasm1(SB)
+ MOVD $1703, R0
+ BR callbackasm1(SB)
+ MOVD $1704, R0
+ BR callbackasm1(SB)
+ MOVD $1705, R0
+ BR callbackasm1(SB)
+ MOVD $1706, R0
+ BR callbackasm1(SB)
+ MOVD $1707, R0
+ BR callbackasm1(SB)
+ MOVD $1708, R0
+ BR callbackasm1(SB)
+ MOVD $1709, R0
+ BR callbackasm1(SB)
+ MOVD $1710, R0
+ BR callbackasm1(SB)
+ MOVD $1711, R0
+ BR callbackasm1(SB)
+ MOVD $1712, R0
+ BR callbackasm1(SB)
+ MOVD $1713, R0
+ BR callbackasm1(SB)
+ MOVD $1714, R0
+ BR callbackasm1(SB)
+ MOVD $1715, R0
+ BR callbackasm1(SB)
+ MOVD $1716, R0
+ BR callbackasm1(SB)
+ MOVD $1717, R0
+ BR callbackasm1(SB)
+ MOVD $1718, R0
+ BR callbackasm1(SB)
+ MOVD $1719, R0
+ BR callbackasm1(SB)
+ MOVD $1720, R0
+ BR callbackasm1(SB)
+ MOVD $1721, R0
+ BR callbackasm1(SB)
+ MOVD $1722, R0
+ BR callbackasm1(SB)
+ MOVD $1723, R0
+ BR callbackasm1(SB)
+ MOVD $1724, R0
+ BR callbackasm1(SB)
+ MOVD $1725, R0
+ BR callbackasm1(SB)
+ MOVD $1726, R0
+ BR callbackasm1(SB)
+ MOVD $1727, R0
+ BR callbackasm1(SB)
+ MOVD $1728, R0
+ BR callbackasm1(SB)
+ MOVD $1729, R0
+ BR callbackasm1(SB)
+ MOVD $1730, R0
+ BR callbackasm1(SB)
+ MOVD $1731, R0
+ BR callbackasm1(SB)
+ MOVD $1732, R0
+ BR callbackasm1(SB)
+ MOVD $1733, R0
+ BR callbackasm1(SB)
+ MOVD $1734, R0
+ BR callbackasm1(SB)
+ MOVD $1735, R0
+ BR callbackasm1(SB)
+ MOVD $1736, R0
+ BR callbackasm1(SB)
+ MOVD $1737, R0
+ BR callbackasm1(SB)
+ MOVD $1738, R0
+ BR callbackasm1(SB)
+ MOVD $1739, R0
+ BR callbackasm1(SB)
+ MOVD $1740, R0
+ BR callbackasm1(SB)
+ MOVD $1741, R0
+ BR callbackasm1(SB)
+ MOVD $1742, R0
+ BR callbackasm1(SB)
+ MOVD $1743, R0
+ BR callbackasm1(SB)
+ MOVD $1744, R0
+ BR callbackasm1(SB)
+ MOVD $1745, R0
+ BR callbackasm1(SB)
+ MOVD $1746, R0
+ BR callbackasm1(SB)
+ MOVD $1747, R0
+ BR callbackasm1(SB)
+ MOVD $1748, R0
+ BR callbackasm1(SB)
+ MOVD $1749, R0
+ BR callbackasm1(SB)
+ MOVD $1750, R0
+ BR callbackasm1(SB)
+ MOVD $1751, R0
+ BR callbackasm1(SB)
+ MOVD $1752, R0
+ BR callbackasm1(SB)
+ MOVD $1753, R0
+ BR callbackasm1(SB)
+ MOVD $1754, R0
+ BR callbackasm1(SB)
+ MOVD $1755, R0
+ BR callbackasm1(SB)
+ MOVD $1756, R0
+ BR callbackasm1(SB)
+ MOVD $1757, R0
+ BR callbackasm1(SB)
+ MOVD $1758, R0
+ BR callbackasm1(SB)
+ MOVD $1759, R0
+ BR callbackasm1(SB)
+ MOVD $1760, R0
+ BR callbackasm1(SB)
+ MOVD $1761, R0
+ BR callbackasm1(SB)
+ MOVD $1762, R0
+ BR callbackasm1(SB)
+ MOVD $1763, R0
+ BR callbackasm1(SB)
+ MOVD $1764, R0
+ BR callbackasm1(SB)
+ MOVD $1765, R0
+ BR callbackasm1(SB)
+ MOVD $1766, R0
+ BR callbackasm1(SB)
+ MOVD $1767, R0
+ BR callbackasm1(SB)
+ MOVD $1768, R0
+ BR callbackasm1(SB)
+ MOVD $1769, R0
+ BR callbackasm1(SB)
+ MOVD $1770, R0
+ BR callbackasm1(SB)
+ MOVD $1771, R0
+ BR callbackasm1(SB)
+ MOVD $1772, R0
+ BR callbackasm1(SB)
+ MOVD $1773, R0
+ BR callbackasm1(SB)
+ MOVD $1774, R0
+ BR callbackasm1(SB)
+ MOVD $1775, R0
+ BR callbackasm1(SB)
+ MOVD $1776, R0
+ BR callbackasm1(SB)
+ MOVD $1777, R0
+ BR callbackasm1(SB)
+ MOVD $1778, R0
+ BR callbackasm1(SB)
+ MOVD $1779, R0
+ BR callbackasm1(SB)
+ MOVD $1780, R0
+ BR callbackasm1(SB)
+ MOVD $1781, R0
+ BR callbackasm1(SB)
+ MOVD $1782, R0
+ BR callbackasm1(SB)
+ MOVD $1783, R0
+ BR callbackasm1(SB)
+ MOVD $1784, R0
+ BR callbackasm1(SB)
+ MOVD $1785, R0
+ BR callbackasm1(SB)
+ MOVD $1786, R0
+ BR callbackasm1(SB)
+ MOVD $1787, R0
+ BR callbackasm1(SB)
+ MOVD $1788, R0
+ BR callbackasm1(SB)
+ MOVD $1789, R0
+ BR callbackasm1(SB)
+ MOVD $1790, R0
+ BR callbackasm1(SB)
+ MOVD $1791, R0
+ BR callbackasm1(SB)
+ MOVD $1792, R0
+ BR callbackasm1(SB)
+ MOVD $1793, R0
+ BR callbackasm1(SB)
+ MOVD $1794, R0
+ BR callbackasm1(SB)
+ MOVD $1795, R0
+ BR callbackasm1(SB)
+ MOVD $1796, R0
+ BR callbackasm1(SB)
+ MOVD $1797, R0
+ BR callbackasm1(SB)
+ MOVD $1798, R0
+ BR callbackasm1(SB)
+ MOVD $1799, R0
+ BR callbackasm1(SB)
+ MOVD $1800, R0
+ BR callbackasm1(SB)
+ MOVD $1801, R0
+ BR callbackasm1(SB)
+ MOVD $1802, R0
+ BR callbackasm1(SB)
+ MOVD $1803, R0
+ BR callbackasm1(SB)
+ MOVD $1804, R0
+ BR callbackasm1(SB)
+ MOVD $1805, R0
+ BR callbackasm1(SB)
+ MOVD $1806, R0
+ BR callbackasm1(SB)
+ MOVD $1807, R0
+ BR callbackasm1(SB)
+ MOVD $1808, R0
+ BR callbackasm1(SB)
+ MOVD $1809, R0
+ BR callbackasm1(SB)
+ MOVD $1810, R0
+ BR callbackasm1(SB)
+ MOVD $1811, R0
+ BR callbackasm1(SB)
+ MOVD $1812, R0
+ BR callbackasm1(SB)
+ MOVD $1813, R0
+ BR callbackasm1(SB)
+ MOVD $1814, R0
+ BR callbackasm1(SB)
+ MOVD $1815, R0
+ BR callbackasm1(SB)
+ MOVD $1816, R0
+ BR callbackasm1(SB)
+ MOVD $1817, R0
+ BR callbackasm1(SB)
+ MOVD $1818, R0
+ BR callbackasm1(SB)
+ MOVD $1819, R0
+ BR callbackasm1(SB)
+ MOVD $1820, R0
+ BR callbackasm1(SB)
+ MOVD $1821, R0
+ BR callbackasm1(SB)
+ MOVD $1822, R0
+ BR callbackasm1(SB)
+ MOVD $1823, R0
+ BR callbackasm1(SB)
+ MOVD $1824, R0
+ BR callbackasm1(SB)
+ MOVD $1825, R0
+ BR callbackasm1(SB)
+ MOVD $1826, R0
+ BR callbackasm1(SB)
+ MOVD $1827, R0
+ BR callbackasm1(SB)
+ MOVD $1828, R0
+ BR callbackasm1(SB)
+ MOVD $1829, R0
+ BR callbackasm1(SB)
+ MOVD $1830, R0
+ BR callbackasm1(SB)
+ MOVD $1831, R0
+ BR callbackasm1(SB)
+ MOVD $1832, R0
+ BR callbackasm1(SB)
+ MOVD $1833, R0
+ BR callbackasm1(SB)
+ MOVD $1834, R0
+ BR callbackasm1(SB)
+ MOVD $1835, R0
+ BR callbackasm1(SB)
+ MOVD $1836, R0
+ BR callbackasm1(SB)
+ MOVD $1837, R0
+ BR callbackasm1(SB)
+ MOVD $1838, R0
+ BR callbackasm1(SB)
+ MOVD $1839, R0
+ BR callbackasm1(SB)
+ MOVD $1840, R0
+ BR callbackasm1(SB)
+ MOVD $1841, R0
+ BR callbackasm1(SB)
+ MOVD $1842, R0
+ BR callbackasm1(SB)
+ MOVD $1843, R0
+ BR callbackasm1(SB)
+ MOVD $1844, R0
+ BR callbackasm1(SB)
+ MOVD $1845, R0
+ BR callbackasm1(SB)
+ MOVD $1846, R0
+ BR callbackasm1(SB)
+ MOVD $1847, R0
+ BR callbackasm1(SB)
+ MOVD $1848, R0
+ BR callbackasm1(SB)
+ MOVD $1849, R0
+ BR callbackasm1(SB)
+ MOVD $1850, R0
+ BR callbackasm1(SB)
+ MOVD $1851, R0
+ BR callbackasm1(SB)
+ MOVD $1852, R0
+ BR callbackasm1(SB)
+ MOVD $1853, R0
+ BR callbackasm1(SB)
+ MOVD $1854, R0
+ BR callbackasm1(SB)
+ MOVD $1855, R0
+ BR callbackasm1(SB)
+ MOVD $1856, R0
+ BR callbackasm1(SB)
+ MOVD $1857, R0
+ BR callbackasm1(SB)
+ MOVD $1858, R0
+ BR callbackasm1(SB)
+ MOVD $1859, R0
+ BR callbackasm1(SB)
+ MOVD $1860, R0
+ BR callbackasm1(SB)
+ MOVD $1861, R0
+ BR callbackasm1(SB)
+ MOVD $1862, R0
+ BR callbackasm1(SB)
+ MOVD $1863, R0
+ BR callbackasm1(SB)
+ MOVD $1864, R0
+ BR callbackasm1(SB)
+ MOVD $1865, R0
+ BR callbackasm1(SB)
+ MOVD $1866, R0
+ BR callbackasm1(SB)
+ MOVD $1867, R0
+ BR callbackasm1(SB)
+ MOVD $1868, R0
+ BR callbackasm1(SB)
+ MOVD $1869, R0
+ BR callbackasm1(SB)
+ MOVD $1870, R0
+ BR callbackasm1(SB)
+ MOVD $1871, R0
+ BR callbackasm1(SB)
+ MOVD $1872, R0
+ BR callbackasm1(SB)
+ MOVD $1873, R0
+ BR callbackasm1(SB)
+ MOVD $1874, R0
+ BR callbackasm1(SB)
+ MOVD $1875, R0
+ BR callbackasm1(SB)
+ MOVD $1876, R0
+ BR callbackasm1(SB)
+ MOVD $1877, R0
+ BR callbackasm1(SB)
+ MOVD $1878, R0
+ BR callbackasm1(SB)
+ MOVD $1879, R0
+ BR callbackasm1(SB)
+ MOVD $1880, R0
+ BR callbackasm1(SB)
+ MOVD $1881, R0
+ BR callbackasm1(SB)
+ MOVD $1882, R0
+ BR callbackasm1(SB)
+ MOVD $1883, R0
+ BR callbackasm1(SB)
+ MOVD $1884, R0
+ BR callbackasm1(SB)
+ MOVD $1885, R0
+ BR callbackasm1(SB)
+ MOVD $1886, R0
+ BR callbackasm1(SB)
+ MOVD $1887, R0
+ BR callbackasm1(SB)
+ MOVD $1888, R0
+ BR callbackasm1(SB)
+ MOVD $1889, R0
+ BR callbackasm1(SB)
+ MOVD $1890, R0
+ BR callbackasm1(SB)
+ MOVD $1891, R0
+ BR callbackasm1(SB)
+ MOVD $1892, R0
+ BR callbackasm1(SB)
+ MOVD $1893, R0
+ BR callbackasm1(SB)
+ MOVD $1894, R0
+ BR callbackasm1(SB)
+ MOVD $1895, R0
+ BR callbackasm1(SB)
+ MOVD $1896, R0
+ BR callbackasm1(SB)
+ MOVD $1897, R0
+ BR callbackasm1(SB)
+ MOVD $1898, R0
+ BR callbackasm1(SB)
+ MOVD $1899, R0
+ BR callbackasm1(SB)
+ MOVD $1900, R0
+ BR callbackasm1(SB)
+ MOVD $1901, R0
+ BR callbackasm1(SB)
+ MOVD $1902, R0
+ BR callbackasm1(SB)
+ MOVD $1903, R0
+ BR callbackasm1(SB)
+ MOVD $1904, R0
+ BR callbackasm1(SB)
+ MOVD $1905, R0
+ BR callbackasm1(SB)
+ MOVD $1906, R0
+ BR callbackasm1(SB)
+ MOVD $1907, R0
+ BR callbackasm1(SB)
+ MOVD $1908, R0
+ BR callbackasm1(SB)
+ MOVD $1909, R0
+ BR callbackasm1(SB)
+ MOVD $1910, R0
+ BR callbackasm1(SB)
+ MOVD $1911, R0
+ BR callbackasm1(SB)
+ MOVD $1912, R0
+ BR callbackasm1(SB)
+ MOVD $1913, R0
+ BR callbackasm1(SB)
+ MOVD $1914, R0
+ BR callbackasm1(SB)
+ MOVD $1915, R0
+ BR callbackasm1(SB)
+ MOVD $1916, R0
+ BR callbackasm1(SB)
+ MOVD $1917, R0
+ BR callbackasm1(SB)
+ MOVD $1918, R0
+ BR callbackasm1(SB)
+ MOVD $1919, R0
+ BR callbackasm1(SB)
+ MOVD $1920, R0
+ BR callbackasm1(SB)
+ MOVD $1921, R0
+ BR callbackasm1(SB)
+ MOVD $1922, R0
+ BR callbackasm1(SB)
+ MOVD $1923, R0
+ BR callbackasm1(SB)
+ MOVD $1924, R0
+ BR callbackasm1(SB)
+ MOVD $1925, R0
+ BR callbackasm1(SB)
+ MOVD $1926, R0
+ BR callbackasm1(SB)
+ MOVD $1927, R0
+ BR callbackasm1(SB)
+ MOVD $1928, R0
+ BR callbackasm1(SB)
+ MOVD $1929, R0
+ BR callbackasm1(SB)
+ MOVD $1930, R0
+ BR callbackasm1(SB)
+ MOVD $1931, R0
+ BR callbackasm1(SB)
+ MOVD $1932, R0
+ BR callbackasm1(SB)
+ MOVD $1933, R0
+ BR callbackasm1(SB)
+ MOVD $1934, R0
+ BR callbackasm1(SB)
+ MOVD $1935, R0
+ BR callbackasm1(SB)
+ MOVD $1936, R0
+ BR callbackasm1(SB)
+ MOVD $1937, R0
+ BR callbackasm1(SB)
+ MOVD $1938, R0
+ BR callbackasm1(SB)
+ MOVD $1939, R0
+ BR callbackasm1(SB)
+ MOVD $1940, R0
+ BR callbackasm1(SB)
+ MOVD $1941, R0
+ BR callbackasm1(SB)
+ MOVD $1942, R0
+ BR callbackasm1(SB)
+ MOVD $1943, R0
+ BR callbackasm1(SB)
+ MOVD $1944, R0
+ BR callbackasm1(SB)
+ MOVD $1945, R0
+ BR callbackasm1(SB)
+ MOVD $1946, R0
+ BR callbackasm1(SB)
+ MOVD $1947, R0
+ BR callbackasm1(SB)
+ MOVD $1948, R0
+ BR callbackasm1(SB)
+ MOVD $1949, R0
+ BR callbackasm1(SB)
+ MOVD $1950, R0
+ BR callbackasm1(SB)
+ MOVD $1951, R0
+ BR callbackasm1(SB)
+ MOVD $1952, R0
+ BR callbackasm1(SB)
+ MOVD $1953, R0
+ BR callbackasm1(SB)
+ MOVD $1954, R0
+ BR callbackasm1(SB)
+ MOVD $1955, R0
+ BR callbackasm1(SB)
+ MOVD $1956, R0
+ BR callbackasm1(SB)
+ MOVD $1957, R0
+ BR callbackasm1(SB)
+ MOVD $1958, R0
+ BR callbackasm1(SB)
+ MOVD $1959, R0
+ BR callbackasm1(SB)
+ MOVD $1960, R0
+ BR callbackasm1(SB)
+ MOVD $1961, R0
+ BR callbackasm1(SB)
+ MOVD $1962, R0
+ BR callbackasm1(SB)
+ MOVD $1963, R0
+ BR callbackasm1(SB)
+ MOVD $1964, R0
+ BR callbackasm1(SB)
+ MOVD $1965, R0
+ BR callbackasm1(SB)
+ MOVD $1966, R0
+ BR callbackasm1(SB)
+ MOVD $1967, R0
+ BR callbackasm1(SB)
+ MOVD $1968, R0
+ BR callbackasm1(SB)
+ MOVD $1969, R0
+ BR callbackasm1(SB)
+ MOVD $1970, R0
+ BR callbackasm1(SB)
+ MOVD $1971, R0
+ BR callbackasm1(SB)
+ MOVD $1972, R0
+ BR callbackasm1(SB)
+ MOVD $1973, R0
+ BR callbackasm1(SB)
+ MOVD $1974, R0
+ BR callbackasm1(SB)
+ MOVD $1975, R0
+ BR callbackasm1(SB)
+ MOVD $1976, R0
+ BR callbackasm1(SB)
+ MOVD $1977, R0
+ BR callbackasm1(SB)
+ MOVD $1978, R0
+ BR callbackasm1(SB)
+ MOVD $1979, R0
+ BR callbackasm1(SB)
+ MOVD $1980, R0
+ BR callbackasm1(SB)
+ MOVD $1981, R0
+ BR callbackasm1(SB)
+ MOVD $1982, R0
+ BR callbackasm1(SB)
+ MOVD $1983, R0
+ BR callbackasm1(SB)
+ MOVD $1984, R0
+ BR callbackasm1(SB)
+ MOVD $1985, R0
+ BR callbackasm1(SB)
+ MOVD $1986, R0
+ BR callbackasm1(SB)
+ MOVD $1987, R0
+ BR callbackasm1(SB)
+ MOVD $1988, R0
+ BR callbackasm1(SB)
+ MOVD $1989, R0
+ BR callbackasm1(SB)
+ MOVD $1990, R0
+ BR callbackasm1(SB)
+ MOVD $1991, R0
+ BR callbackasm1(SB)
+ MOVD $1992, R0
+ BR callbackasm1(SB)
+ MOVD $1993, R0
+ BR callbackasm1(SB)
+ MOVD $1994, R0
+ BR callbackasm1(SB)
+ MOVD $1995, R0
+ BR callbackasm1(SB)
+ MOVD $1996, R0
+ BR callbackasm1(SB)
+ MOVD $1997, R0
+ BR callbackasm1(SB)
+ MOVD $1998, R0
+ BR callbackasm1(SB)
+ MOVD $1999, R0
+ BR callbackasm1(SB)