aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/preempt_mips64x.s
blob: b755425bc5d3275e6c7700d63f41e35e4120c20a (plain)
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
// Code generated by mkpreempt.go; DO NOT EDIT.

//go:build mips64 || mips64le
// +build mips64 mips64le

#include "go_asm.h"
#include "textflag.h"

// Note: asyncPreempt doesn't use the internal ABI, but we must be able to inject calls to it from the signal handler, so Go code has to see the PC of this function literally.
TEXT ·asyncPreempt<ABIInternal>(SB),NOSPLIT|NOFRAME,$0-0
	MOVV R31, -488(R29)
	SUBV $488, R29
	MOVV R1, 8(R29)
	MOVV R2, 16(R29)
	MOVV R3, 24(R29)
	MOVV R4, 32(R29)
	MOVV R5, 40(R29)
	MOVV R6, 48(R29)
	MOVV R7, 56(R29)
	MOVV R8, 64(R29)
	MOVV R9, 72(R29)
	MOVV R10, 80(R29)
	MOVV R11, 88(R29)
	MOVV R12, 96(R29)
	MOVV R13, 104(R29)
	MOVV R14, 112(R29)
	MOVV R15, 120(R29)
	MOVV R16, 128(R29)
	MOVV R17, 136(R29)
	MOVV R18, 144(R29)
	MOVV R19, 152(R29)
	MOVV R20, 160(R29)
	MOVV R21, 168(R29)
	MOVV R22, 176(R29)
	MOVV R24, 184(R29)
	MOVV R25, 192(R29)
	MOVV RSB, 200(R29)
	MOVV HI, R1
	MOVV R1, 208(R29)
	MOVV LO, R1
	MOVV R1, 216(R29)
	#ifndef GOMIPS64_softfloat
	MOVV FCR31, R1
	MOVV R1, 224(R29)
	MOVD F0, 232(R29)
	MOVD F1, 240(R29)
	MOVD F2, 248(R29)
	MOVD F3, 256(R29)
	MOVD F4, 264(R29)
	MOVD F5, 272(R29)
	MOVD F6, 280(R29)
	MOVD F7, 288(R29)
	MOVD F8, 296(R29)
	MOVD F9, 304(R29)
	MOVD F10, 312(R29)
	MOVD F11, 320(R29)
	MOVD F12, 328(R29)
	MOVD F13, 336(R29)
	MOVD F14, 344(R29)
	MOVD F15, 352(R29)
	MOVD F16, 360(R29)
	MOVD F17, 368(R29)
	MOVD F18, 376(R29)
	MOVD F19, 384(R29)
	MOVD F20, 392(R29)
	MOVD F21, 400(R29)
	MOVD F22, 408(R29)
	MOVD F23, 416(R29)
	MOVD F24, 424(R29)
	MOVD F25, 432(R29)
	MOVD F26, 440(R29)
	MOVD F27, 448(R29)
	MOVD F28, 456(R29)
	MOVD F29, 464(R29)
	MOVD F30, 472(R29)
	MOVD F31, 480(R29)
	#endif
	CALL ·asyncPreempt2(SB)
	#ifndef GOMIPS64_softfloat
	MOVD 480(R29), F31
	MOVD 472(R29), F30
	MOVD 464(R29), F29
	MOVD 456(R29), F28
	MOVD 448(R29), F27
	MOVD 440(R29), F26
	MOVD 432(R29), F25
	MOVD 424(R29), F24
	MOVD 416(R29), F23
	MOVD 408(R29), F22
	MOVD 400(R29), F21
	MOVD 392(R29), F20
	MOVD 384(R29), F19
	MOVD 376(R29), F18
	MOVD 368(R29), F17
	MOVD 360(R29), F16
	MOVD 352(R29), F15
	MOVD 344(R29), F14
	MOVD 336(R29), F13
	MOVD 328(R29), F12
	MOVD 320(R29), F11
	MOVD 312(R29), F10
	MOVD 304(R29), F9
	MOVD 296(R29), F8
	MOVD 288(R29), F7
	MOVD 280(R29), F6
	MOVD 272(R29), F5
	MOVD 264(R29), F4
	MOVD 256(R29), F3
	MOVD 248(R29), F2
	MOVD 240(R29), F1
	MOVD 232(R29), F0
	MOVV 224(R29), R1
	MOVV R1, FCR31
	#endif
	MOVV 216(R29), R1
	MOVV R1, LO
	MOVV 208(R29), R1
	MOVV R1, HI
	MOVV 200(R29), RSB
	MOVV 192(R29), R25
	MOVV 184(R29), R24
	MOVV 176(R29), R22
	MOVV 168(R29), R21
	MOVV 160(R29), R20
	MOVV 152(R29), R19
	MOVV 144(R29), R18
	MOVV 136(R29), R17
	MOVV 128(R29), R16
	MOVV 120(R29), R15
	MOVV 112(R29), R14
	MOVV 104(R29), R13
	MOVV 96(R29), R12
	MOVV 88(R29), R11
	MOVV 80(R29), R10
	MOVV 72(R29), R9
	MOVV 64(R29), R8
	MOVV 56(R29), R7
	MOVV 48(R29), R6
	MOVV 40(R29), R5
	MOVV 32(R29), R4
	MOVV 24(R29), R3
	MOVV 16(R29), R2
	MOVV 8(R29), R1
	MOVV 488(R29), R31
	MOVV (R29), R23
	ADDV $496, R29
	JMP (R23)