-
Notifications
You must be signed in to change notification settings - Fork 105
Expand file tree
/
Copy pathsys_unix_arm.s
More file actions
89 lines (74 loc) · 1.67 KB
/
sys_unix_arm.s
File metadata and controls
89 lines (74 loc) · 1.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// 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"
TEXT callbackasm1(SB), NOSPLIT|NOFRAME, $0
NO_LOCAL_POINTERS
// Allocate stack frame: 48 + 16 + 64 + 16 = 144 bytes
SUB $144, R13
// Save callee-saved registers at SP+0
MOVW R4, 0(R13)
MOVW R5, 4(R13)
MOVW R6, 8(R13)
MOVW R7, 12(R13)
MOVW R8, 16(R13)
MOVW R9, 20(R13)
MOVW g, 24(R13)
MOVW R11, 28(R13)
MOVW R14, 32(R13)
// Save callback index (passed in R12) at SP+36
MOVW R12, 36(R13)
// Save integer arguments R0-R3 at SP+128 (frame[16..19])
MOVW R0, 128(R13)
MOVW R1, 132(R13)
MOVW R2, 136(R13)
MOVW R3, 140(R13)
// Save floating point registers F0-F7 at SP+64 (frame[0..15])
// Note: We always save these since we target hard-float ABI.
MOVD F0, 64(R13)
MOVD F1, 72(R13)
MOVD F2, 80(R13)
MOVD F3, 88(R13)
MOVD F4, 96(R13)
MOVD F5, 104(R13)
MOVD F6, 112(R13)
MOVD F7, 120(R13)
// Set up callbackArgs at SP+48
MOVW 36(R13), R4
MOVW R4, 48(R13)
ADD $64, R13, R4
MOVW R4, 52(R13)
MOVW $0, R4
MOVW R4, 56(R13)
// Call crosscall2(fn, frame, 0, ctxt)
MOVW ·callbackWrap_call(SB), R0
MOVW (R0), R0
ADD $48, R13, R1
MOVW $0, R2
MOVW $0, R3
BL crosscall2(SB)
// Get result
MOVW 56(R13), R0
// Restore float registers
MOVD 64(R13), F0
MOVD 72(R13), F1
MOVD 80(R13), F2
MOVD 88(R13), F3
MOVD 96(R13), F4
MOVD 104(R13), F5
MOVD 112(R13), F6
MOVD 120(R13), F7
// Restore callee-saved registers
MOVW 0(R13), R4
MOVW 4(R13), R5
MOVW 8(R13), R6
MOVW 12(R13), R7
MOVW 16(R13), R8
MOVW 20(R13), R9
MOVW 24(R13), g
MOVW 28(R13), R11
MOVW 32(R13), R14
ADD $144, R13
RET