currsos/src/intr.asm

566 lines
9.6 KiB
NASM

%include "asm.inc"
extern intr_dispatcher
global intr_stub_array
section .data
bits 64
intr_stub_array:
dq intr_stub_0
dq intr_stub_1
dq intr_stub_2
dq intr_stub_3
dq intr_stub_4
dq intr_stub_5
dq intr_stub_6
dq intr_stub_7
dq intr_stub_8
dq intr_stub_9
dq intr_stub_10
dq intr_stub_11
dq intr_stub_12
dq intr_stub_13
dq intr_stub_14
dq intr_stub_15
dq intr_stub_16
dq intr_stub_17
dq intr_stub_18
dq intr_stub_19
dq intr_stub_20
dq intr_stub_21
dq intr_stub_22
dq intr_stub_23
dq intr_stub_24
dq intr_stub_25
dq intr_stub_26
dq intr_stub_27
dq intr_stub_28
dq intr_stub_29
dq intr_stub_30
dq intr_stub_31
dq intr_stub_32
dq intr_stub_33
dq intr_stub_34
dq intr_stub_35
dq intr_stub_36
dq intr_stub_37
dq intr_stub_38
dq intr_stub_39
dq intr_stub_40
dq intr_stub_41
dq intr_stub_42
dq intr_stub_43
dq intr_stub_44
dq intr_stub_45
dq intr_stub_46
dq intr_stub_47
dq intr_stub_48
dq intr_stub_49
dq intr_stub_50
dq intr_stub_51
dq intr_stub_52
dq intr_stub_53
dq intr_stub_54
dq intr_stub_55
dq intr_stub_56
dq intr_stub_57
dq intr_stub_58
dq intr_stub_59
dq intr_stub_60
dq intr_stub_61
dq intr_stub_62
dq intr_stub_63
dq intr_stub_64
dq intr_stub_65
dq intr_stub_66
dq intr_stub_67
dq intr_stub_68
dq intr_stub_69
dq intr_stub_70
dq intr_stub_71
dq intr_stub_72
dq intr_stub_73
dq intr_stub_74
dq intr_stub_75
dq intr_stub_76
dq intr_stub_77
dq intr_stub_78
dq intr_stub_79
dq intr_stub_80
dq intr_stub_81
dq intr_stub_82
dq intr_stub_83
dq intr_stub_84
dq intr_stub_85
dq intr_stub_86
dq intr_stub_87
dq intr_stub_88
dq intr_stub_89
dq intr_stub_90
dq intr_stub_91
dq intr_stub_92
dq intr_stub_93
dq intr_stub_94
dq intr_stub_95
dq intr_stub_96
dq intr_stub_97
dq intr_stub_98
dq intr_stub_99
dq intr_stub_100
dq intr_stub_101
dq intr_stub_102
dq intr_stub_103
dq intr_stub_104
dq intr_stub_105
dq intr_stub_106
dq intr_stub_107
dq intr_stub_108
dq intr_stub_109
dq intr_stub_110
dq intr_stub_111
dq intr_stub_112
dq intr_stub_113
dq intr_stub_114
dq intr_stub_115
dq intr_stub_116
dq intr_stub_117
dq intr_stub_118
dq intr_stub_119
dq intr_stub_120
dq intr_stub_121
dq intr_stub_122
dq intr_stub_123
dq intr_stub_124
dq intr_stub_125
dq intr_stub_126
dq intr_stub_127
dq intr_stub_128
dq intr_stub_129
dq intr_stub_130
dq intr_stub_131
dq intr_stub_132
dq intr_stub_133
dq intr_stub_134
dq intr_stub_135
dq intr_stub_136
dq intr_stub_137
dq intr_stub_138
dq intr_stub_139
dq intr_stub_140
dq intr_stub_141
dq intr_stub_142
dq intr_stub_143
dq intr_stub_144
dq intr_stub_145
dq intr_stub_146
dq intr_stub_147
dq intr_stub_148
dq intr_stub_149
dq intr_stub_150
dq intr_stub_151
dq intr_stub_152
dq intr_stub_153
dq intr_stub_154
dq intr_stub_155
dq intr_stub_156
dq intr_stub_157
dq intr_stub_158
dq intr_stub_159
dq intr_stub_160
dq intr_stub_161
dq intr_stub_162
dq intr_stub_163
dq intr_stub_164
dq intr_stub_165
dq intr_stub_166
dq intr_stub_167
dq intr_stub_168
dq intr_stub_169
dq intr_stub_170
dq intr_stub_171
dq intr_stub_172
dq intr_stub_173
dq intr_stub_174
dq intr_stub_175
dq intr_stub_176
dq intr_stub_177
dq intr_stub_178
dq intr_stub_179
dq intr_stub_180
dq intr_stub_181
dq intr_stub_182
dq intr_stub_183
dq intr_stub_184
dq intr_stub_185
dq intr_stub_186
dq intr_stub_187
dq intr_stub_188
dq intr_stub_189
dq intr_stub_190
dq intr_stub_191
dq intr_stub_192
dq intr_stub_193
dq intr_stub_194
dq intr_stub_195
dq intr_stub_196
dq intr_stub_197
dq intr_stub_198
dq intr_stub_199
dq intr_stub_200
dq intr_stub_201
dq intr_stub_202
dq intr_stub_203
dq intr_stub_204
dq intr_stub_205
dq intr_stub_206
dq intr_stub_207
dq intr_stub_208
dq intr_stub_209
dq intr_stub_210
dq intr_stub_211
dq intr_stub_212
dq intr_stub_213
dq intr_stub_214
dq intr_stub_215
dq intr_stub_216
dq intr_stub_217
dq intr_stub_218
dq intr_stub_219
dq intr_stub_220
dq intr_stub_221
dq intr_stub_222
dq intr_stub_223
dq intr_stub_224
dq intr_stub_225
dq intr_stub_226
dq intr_stub_227
dq intr_stub_228
dq intr_stub_229
dq intr_stub_230
dq intr_stub_231
dq intr_stub_232
dq intr_stub_233
dq intr_stub_234
dq intr_stub_235
dq intr_stub_236
dq intr_stub_237
dq intr_stub_238
dq intr_stub_239
dq intr_stub_240
dq intr_stub_241
dq intr_stub_242
dq intr_stub_243
dq intr_stub_244
dq intr_stub_245
dq intr_stub_246
dq intr_stub_247
dq intr_stub_248
dq intr_stub_249
dq intr_stub_250
dq intr_stub_251
dq intr_stub_252
dq intr_stub_253
dq intr_stub_254
dq intr_stub_255
section .text
bits 64
%macro decl_err_intr_stub 1
intr_stub_%1:
; save context
PUSH_REGS
push qword %1
jmp intr_stub
%endmacro
%macro decl_intr_stub 1
intr_stub_%1:
; push dummy error code to have consistent frame
push qword 0
PUSH_REGS
push qword %1
jmp intr_stub
%endmacro
intr_stub:
pop rdi
mov rsi, rsp
call intr_dispatcher
; restore registers
POP_REGS
; skip error code
add rsp, 8
iretq
intr_stub_start:
decl_intr_stub 0
decl_intr_stub 1
decl_intr_stub 2
decl_intr_stub 3
decl_intr_stub 4
decl_intr_stub 5
decl_intr_stub 6
decl_intr_stub 7
decl_err_intr_stub 8
decl_intr_stub 9
decl_err_intr_stub 10
decl_err_intr_stub 11
decl_err_intr_stub 12
decl_err_intr_stub 13
decl_err_intr_stub 14
decl_intr_stub 15
decl_intr_stub 16
decl_err_intr_stub 17
decl_intr_stub 18
decl_intr_stub 19
decl_intr_stub 20
decl_intr_stub 21
decl_intr_stub 22
decl_intr_stub 23
decl_intr_stub 24
decl_intr_stub 25
decl_intr_stub 26
decl_intr_stub 27
decl_intr_stub 28
decl_intr_stub 29
decl_intr_stub 30
decl_intr_stub 31
decl_intr_stub 32
decl_intr_stub 33
decl_intr_stub 34
decl_intr_stub 35
decl_intr_stub 36
decl_intr_stub 37
decl_intr_stub 38
decl_intr_stub 39
decl_intr_stub 40
decl_intr_stub 41
decl_intr_stub 42
decl_intr_stub 43
decl_intr_stub 44
decl_intr_stub 45
decl_intr_stub 46
decl_intr_stub 47
decl_intr_stub 48
decl_intr_stub 49
intr_stub_50:
; push dummy error code to have consistent frame
push qword 0
PUSH_REGS
mov rdi, 50
mov rsi, rsp
call intr_dispatcher
xchg bx,bx
; now rax hows the next thread's rsp0
mov rsp, rax ; switch stack
POP_REGS ; restore registers
add rsp, 8 ; skip error code
iretq
decl_intr_stub 51
decl_intr_stub 52
decl_intr_stub 53
decl_intr_stub 54
decl_intr_stub 55
decl_intr_stub 56
decl_intr_stub 57
decl_intr_stub 58
decl_intr_stub 59
decl_intr_stub 60
decl_intr_stub 61
decl_intr_stub 62
decl_intr_stub 63
decl_intr_stub 64
decl_intr_stub 65
decl_intr_stub 66
decl_intr_stub 67
decl_intr_stub 68
decl_intr_stub 69
decl_intr_stub 70
decl_intr_stub 71
decl_intr_stub 72
decl_intr_stub 73
decl_intr_stub 74
decl_intr_stub 75
decl_intr_stub 76
decl_intr_stub 77
decl_intr_stub 78
decl_intr_stub 79
decl_intr_stub 80
decl_intr_stub 81
decl_intr_stub 82
decl_intr_stub 83
decl_intr_stub 84
decl_intr_stub 85
decl_intr_stub 86
decl_intr_stub 87
decl_intr_stub 88
decl_intr_stub 89
decl_intr_stub 90
decl_intr_stub 91
decl_intr_stub 92
decl_intr_stub 93
decl_intr_stub 94
decl_intr_stub 95
decl_intr_stub 96
decl_intr_stub 97
decl_intr_stub 98
decl_intr_stub 99
decl_intr_stub 100
decl_intr_stub 101
decl_intr_stub 102
decl_intr_stub 103
decl_intr_stub 104
decl_intr_stub 105
decl_intr_stub 106
decl_intr_stub 107
decl_intr_stub 108
decl_intr_stub 109
decl_intr_stub 110
decl_intr_stub 111
decl_intr_stub 112
decl_intr_stub 113
decl_intr_stub 114
decl_intr_stub 115
decl_intr_stub 116
decl_intr_stub 117
decl_intr_stub 118
decl_intr_stub 119
decl_intr_stub 120
decl_intr_stub 121
decl_intr_stub 122
decl_intr_stub 123
decl_intr_stub 124
decl_intr_stub 125
decl_intr_stub 126
decl_intr_stub 127
decl_intr_stub 128
decl_intr_stub 129
decl_intr_stub 130
decl_intr_stub 131
decl_intr_stub 132
decl_intr_stub 133
decl_intr_stub 134
decl_intr_stub 135
decl_intr_stub 136
decl_intr_stub 137
decl_intr_stub 138
decl_intr_stub 139
decl_intr_stub 140
decl_intr_stub 141
decl_intr_stub 142
decl_intr_stub 143
decl_intr_stub 144
decl_intr_stub 145
decl_intr_stub 146
decl_intr_stub 147
decl_intr_stub 148
decl_intr_stub 149
decl_intr_stub 150
decl_intr_stub 151
decl_intr_stub 152
decl_intr_stub 153
decl_intr_stub 154
decl_intr_stub 155
decl_intr_stub 156
decl_intr_stub 157
decl_intr_stub 158
decl_intr_stub 159
decl_intr_stub 160
decl_intr_stub 161
decl_intr_stub 162
decl_intr_stub 163
decl_intr_stub 164
decl_intr_stub 165
decl_intr_stub 166
decl_intr_stub 167
decl_intr_stub 168
decl_intr_stub 169
decl_intr_stub 170
decl_intr_stub 171
decl_intr_stub 172
decl_intr_stub 173
decl_intr_stub 174
decl_intr_stub 175
decl_intr_stub 176
decl_intr_stub 177
decl_intr_stub 178
decl_intr_stub 179
decl_intr_stub 180
decl_intr_stub 181
decl_intr_stub 182
decl_intr_stub 183
decl_intr_stub 184
decl_intr_stub 185
decl_intr_stub 186
decl_intr_stub 187
decl_intr_stub 188
decl_intr_stub 189
decl_intr_stub 190
decl_intr_stub 191
decl_intr_stub 192
decl_intr_stub 193
decl_intr_stub 194
decl_intr_stub 195
decl_intr_stub 196
decl_intr_stub 197
decl_intr_stub 198
decl_intr_stub 199
decl_intr_stub 200
decl_intr_stub 201
decl_intr_stub 202
decl_intr_stub 203
decl_intr_stub 204
decl_intr_stub 205
decl_intr_stub 206
decl_intr_stub 207
decl_intr_stub 208
decl_intr_stub 209
decl_intr_stub 210
decl_intr_stub 211
decl_intr_stub 212
decl_intr_stub 213
decl_intr_stub 214
decl_intr_stub 215
decl_intr_stub 216
decl_intr_stub 217
decl_intr_stub 218
decl_intr_stub 219
decl_intr_stub 220
decl_intr_stub 221
decl_intr_stub 222
decl_intr_stub 223
decl_intr_stub 224
decl_intr_stub 225
decl_intr_stub 226
decl_intr_stub 227
decl_intr_stub 228
decl_intr_stub 229
decl_intr_stub 230
decl_intr_stub 231
decl_intr_stub 232
decl_intr_stub 233
decl_intr_stub 234
decl_intr_stub 235
decl_intr_stub 236
decl_intr_stub 237
decl_intr_stub 238
decl_intr_stub 239
decl_intr_stub 240
decl_intr_stub 241
decl_intr_stub 242
decl_intr_stub 243
decl_intr_stub 244
decl_intr_stub 245
decl_intr_stub 246
decl_intr_stub 247
decl_intr_stub 248
decl_intr_stub 249
decl_intr_stub 250
decl_intr_stub 251
decl_intr_stub 252
decl_intr_stub 253
decl_intr_stub 254
decl_intr_stub 255