Changeset 104002 in vbox
- Timestamp:
- Mar 22, 2024 4:07:19 PM (14 months ago)
- svn:sync-xref-src-repo-rev:
- 162389
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-2-gen-asm.asm
r104000 r104002 46 46 %ifdef ASM_CALL64_MSC 47 47 %define EFLAGS_PARAM_REG r8d 48 %define EFLAGS_PARAM_REG64 r849 48 %else 50 %define EFLAGS_PARAM_REG ecx 51 %define EFLAGS_PARAM_REG64 rcx 49 %define EFLAGS_PARAM_REG edx 52 50 %endif 53 51 … … 61 59 %if %3 != 0 62 60 BEGINPROC GenU8_ %+ %1 61 %ifdef ASM_CALL64_GCC 62 mov r9, rcx 63 mov r8, rdx 64 mov rdx, rsi 65 mov rcx, rdi 66 %endif 63 67 %if %2 != 0 64 68 lahf 65 69 and ah, 0xfe 66 shl EFLAGS_PARAM_REG, 867 or eax, EFLAGS_PARAM_REG70 shl r8d, 8 71 or eax, r8d 68 72 sahf 69 73 %endif 70 %ifdef ASM_CALL64_MSC71 74 %1 cl, dl 72 75 mov [r9], cl 73 %else74 %1 sil, dil75 mov [rdx], sil76 %endif77 76 pushf 78 77 pop rax … … 82 81 83 82 BEGINPROC GenU16_ %+ %1 83 %ifdef ASM_CALL64_GCC 84 mov r9, rcx 85 mov r8, rdx 86 mov rdx, rsi 87 mov rcx, rdi 88 %endif 84 89 %if %2 != 0 85 90 lahf 86 91 and ah, 0xfe 87 shl EFLAGS_PARAM_REG, 888 or eax, EFLAGS_PARAM_REG92 shl r8d, 8 93 or eax, r8d 89 94 sahf 90 95 %endif 91 %ifdef ASM_CALL64_MSC92 96 %1 cx, dx 93 97 mov [r9], cx 94 %else95 %1 si, di96 mov [rdx], si97 %endif98 98 pushf 99 99 pop rax … … 102 102 103 103 BEGINPROC GenU32_ %+ %1 104 %ifdef ASM_CALL64_GCC 105 mov r9, rcx 106 mov r8, rdx 107 mov rdx, rsi 108 mov rcx, rdi 109 %endif 104 110 %if %2 != 0 105 111 lahf 106 112 and ah, 0xfe 107 shl EFLAGS_PARAM_REG, 8108 or eax, EFLAGS_PARAM_REG113 shl r8d, 8 114 or eax, r8d 109 115 sahf 110 116 %endif 111 %ifdef ASM_CALL64_MSC112 117 %1 ecx, edx 113 118 mov [r9], ecx 114 %else115 %1 esi, edi116 mov [rdx], esi117 %endif118 119 pushf 119 120 pop rax … … 122 123 123 124 BEGINPROC GenU64_ %+ %1 125 %ifdef ASM_CALL64_GCC 126 mov r9, rcx 127 mov r8, rdx 128 mov rdx, rsi 129 mov rcx, rdi 130 %endif 124 131 %if %2 != 0 125 132 lahf 126 133 and ah, 0xfe 127 shl EFLAGS_PARAM_REG, 8128 or eax, EFLAGS_PARAM_REG134 shl r8d, 8 135 or eax, r8d 129 136 sahf 130 137 %endif 131 %ifdef ASM_CALL64_MSC132 138 %1 rcx, rdx 133 139 mov [r9], rcx 134 %else135 %1 rsi, rdi136 mov [rdx], rsi137 %endif138 140 pushf 139 141 pop rax … … 166 168 167 169 BEGINPROC GenU8_ %+ %1 168 pushf 169 and dword [rsp], ~X86_EFL_STATUS_BITS 170 or dword [rsp], EFLAGS_PARAM_REG 171 popf 172 %ifdef ASM_CALL64_MSC 173 xchg cl, dl 170 %ifdef ASM_CALL64_GCC 171 mov r9, rcx 172 mov r8, rdx 173 mov rdx, rsi 174 mov rcx, rdi 175 %endif 176 pushf 177 and dword [rsp], ~X86_EFL_STATUS_BITS 178 or dword [rsp], r8d 179 popf 180 xchg rcx, rdx 174 181 %1 dl, cl 175 182 mov [r9], dl 176 %else177 mov cl, dil178 %1 sil, cl179 mov [rdx], sil180 %endif181 183 pushf 182 184 pop rax … … 185 187 186 188 BEGINPROC GenU16_ %+ %1 187 pushf 188 and dword [rsp], ~X86_EFL_STATUS_BITS 189 or dword [rsp], EFLAGS_PARAM_REG 190 popf 191 %ifdef ASM_CALL64_MSC 189 %ifdef ASM_CALL64_GCC 190 mov r9, rcx 191 mov r8, rdx 192 mov rdx, rsi 193 mov rcx, rdi 194 %endif 195 pushf 196 and dword [rsp], ~X86_EFL_STATUS_BITS 197 or dword [rsp], r8d 198 popf 192 199 xchg cx, dx 193 200 %1 dx, cl 194 201 mov [r9], dx 195 %else196 mov cl, dil197 %1 si, cl198 mov [rdx], si199 %endif200 202 pushf 201 203 pop rax … … 204 206 205 207 BEGINPROC GenU32_ %+ %1 206 pushf 207 and dword [rsp], ~X86_EFL_STATUS_BITS 208 or dword [rsp], EFLAGS_PARAM_REG 209 popf 210 %ifdef ASM_CALL64_MSC 211 xchg ecx, edx 208 %ifdef ASM_CALL64_GCC 209 mov r9, rcx 210 mov r8, rdx 211 mov rdx, rsi 212 mov rcx, rdi 213 %endif 214 pushf 215 and dword [rsp], ~X86_EFL_STATUS_BITS 216 or dword [rsp], r8d 217 popf 218 xchg rcx, rdx 212 219 %1 edx, cl 213 220 mov [r9], edx 214 %else215 mov cl, dil216 %1 esi, cl217 mov [rdx], esi218 %endif219 221 pushf 220 222 pop rax … … 223 225 224 226 BEGINPROC GenU64_ %+ %1 225 pushf 226 and dword [rsp], ~X86_EFL_STATUS_BITS 227 or dword [rsp], EFLAGS_PARAM_REG 228 popf 229 %ifdef ASM_CALL64_MSC 227 %ifdef ASM_CALL64_GCC 228 mov r9, rcx 229 mov r8, rdx 230 mov rdx, rsi 231 mov rcx, rdi 232 %endif 233 pushf 234 and dword [rsp], ~X86_EFL_STATUS_BITS 235 or dword [rsp], r8d 236 popf 230 237 xchg rcx, rdx 231 238 %1 rdx, cl 232 239 mov [r9], rdx 233 %else234 mov cl, dil235 %1 rsi, cl236 mov [rdx], rsi237 %endif238 240 pushf 239 241 pop rax … … 243 245 244 246 BEGINPROC GenU8_ %+ %1 %+ _Ib 245 pushf 246 and dword [rsp], ~X86_EFL_STATUS_BITS 247 or dword [rsp], EFLAGS_PARAM_REG 248 popf 249 250 %ifdef ASM_CALL64_MSC 247 %ifdef ASM_CALL64_GCC 248 mov r9, rcx 249 mov r8, rdx 250 mov rdx, rsi 251 mov rcx, rdi 252 %endif 253 pushf 254 and dword [rsp], ~X86_EFL_STATUS_BITS 255 or dword [rsp], r8d 256 popf 257 251 258 movzx r11d, dl 252 259 mov al, cl 253 260 mov rdx, r9 254 %else 255 movzx r11d, sil 256 mov al, dil 257 ;mov rdx, rdx 258 %endif 261 259 262 lea r10, [.first_imm wrt rip] 260 263 lea r10, [r10 + r11 * 8] ;; @todo assert that the entry size is 8 bytes … … 280 283 281 284 BEGINPROC GenU16_ %+ %1 %+ _Ib 282 pushf 283 and dword [rsp], ~X86_EFL_STATUS_BITS 284 or dword [rsp], EFLAGS_PARAM_REG 285 popf 286 287 %ifdef ASM_CALL64_MSC 285 %ifdef ASM_CALL64_GCC 286 mov r9, rcx 287 mov r8, rdx 288 mov rdx, rsi 289 mov rcx, rdi 290 %endif 291 pushf 292 and dword [rsp], ~X86_EFL_STATUS_BITS 293 or dword [rsp], r8d 294 popf 295 288 296 movzx r11d, dl 289 297 mov ax, cx 290 298 mov rdx, r9 291 %else 292 movzx r11d, sil 293 mov ax, di 294 ;mov rdx, rdx 295 %endif 299 296 300 lea r10, [.first_imm wrt rip] 297 301 lea r10, [r10 + r11] ;; @todo assert that the entry size is 9 bytes … … 318 322 319 323 BEGINPROC GenU32_ %+ %1 %+ _Ib 320 pushf 321 and dword [rsp], ~X86_EFL_STATUS_BITS 322 or dword [rsp], EFLAGS_PARAM_REG 323 popf 324 325 %ifdef ASM_CALL64_MSC 324 %ifdef ASM_CALL64_GCC 325 mov r9, rcx 326 mov r8, rdx 327 mov rdx, rsi 328 mov rcx, rdi 329 %endif 330 pushf 331 and dword [rsp], ~X86_EFL_STATUS_BITS 332 or dword [rsp], r8d 333 popf 334 326 335 movzx r11d, dl 327 336 mov eax, ecx 328 337 mov rdx, r9 329 %else 330 movzx r11d, sil 331 mov eax, edi 332 ;mov rdx, rdx 333 %endif 338 334 339 lea r10, [.first_imm wrt rip] 335 340 lea r10, [r10 + r11 * 8] ;; @todo assert that the entry size is 8 bytes … … 355 360 356 361 BEGINPROC GenU64_ %+ %1 %+ _Ib 357 pushf 358 and dword [rsp], ~X86_EFL_STATUS_BITS 359 or dword [rsp], EFLAGS_PARAM_REG 360 popf 361 362 %ifdef ASM_CALL64_MSC 362 %ifdef ASM_CALL64_GCC 363 mov r9, rcx 364 mov r8, rdx 365 mov rdx, rsi 366 mov rcx, rdi 367 %endif 368 pushf 369 and dword [rsp], ~X86_EFL_STATUS_BITS 370 or dword [rsp], r8d 371 popf 372 363 373 movzx r11d, dl 364 374 mov rax, rcx 365 375 mov rdx, r9 366 %else 367 movzx r11d, sil 368 mov rax, rdi 369 ;mov rdx, rdx 370 %endif 376 371 377 lea r10, [.first_imm wrt rip] 372 378 lea r10, [r10 + r11] ;; @todo assert that the entry size is 9 bytes
Note:
See TracChangeset
for help on using the changeset viewer.