Changeset 107101 in vbox for trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-2-gen-asm.asm
- Timestamp:
- Nov 22, 2024 7:56:43 AM (3 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-2-gen-asm.asm
r104002 r107101 44 44 BEGINCODE 45 45 46 %ifdef ASM_CALL64_MSC 47 %define EFLAGS_PARAM_REG r8d 48 %else 49 %define EFLAGS_PARAM_REG edx 46 preface_0: 47 %ifdef ASM_CALL64_GCC 48 mov r9, rcx 49 mov r8, rdx 50 mov rdx, rsi 51 mov rcx, rdi 50 52 %endif 51 53 ret 54 55 preface_1: 56 %ifdef ASM_CALL64_GCC 57 mov r9, rcx 58 mov r8, rdx 59 mov rdx, rsi 60 mov rcx, rdi 61 %endif 62 lahf 63 and ah, 0xfe 64 shl r8d, 8 65 or eax, r8d 66 sahf 67 ret 68 69 preface_2: 70 %ifdef ASM_CALL64_GCC 71 mov r9, rcx 72 mov r8, rdx 73 mov rdx, rsi 74 mov rcx, rdi 75 %endif 76 pushf 77 and dword [rsp], ~X86_EFL_STATUS_BITS 78 or dword [rsp], r8d 79 popf 80 ret 81 82 ;; 83 ; @param 1 which preface to use: 84 ; 0 = no flags meddling 85 ; 1 = takes carry flag in 86 ; 2 = takes entire flags register in 87 %macro DO_PREFACE 1 88 call preface_ %+ %1 89 %endmacro 52 90 53 91 ;; … … 59 97 %if %3 != 0 60 98 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 67 %if %2 != 0 68 lahf 69 and ah, 0xfe 70 shl r8d, 8 71 or eax, r8d 72 sahf 73 %endif 99 DO_PREFACE %2 74 100 %1 cl, dl 75 101 mov [r9], cl … … 81 107 82 108 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 89 %if %2 != 0 90 lahf 91 and ah, 0xfe 92 shl r8d, 8 93 or eax, r8d 94 sahf 95 %endif 109 DO_PREFACE %2 96 110 %1 cx, dx 97 111 mov [r9], cx … … 102 116 103 117 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 110 %if %2 != 0 111 lahf 112 and ah, 0xfe 113 shl r8d, 8 114 or eax, r8d 115 sahf 116 %endif 118 DO_PREFACE %2 117 119 %1 ecx, edx 118 120 mov [r9], ecx … … 123 125 124 126 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 131 %if %2 != 0 132 lahf 133 and ah, 0xfe 134 shl r8d, 8 135 or eax, r8d 136 sahf 137 %endif 127 DO_PREFACE %2 138 128 %1 rcx, rdx 139 129 mov [r9], rcx … … 168 158 169 159 BEGINPROC GenU8_ %+ %1 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 160 DO_PREFACE 2 180 161 xchg rcx, rdx 181 162 %1 dl, cl … … 187 168 188 169 BEGINPROC GenU16_ %+ %1 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 170 DO_PREFACE 2 199 171 xchg cx, dx 200 172 %1 dx, cl … … 206 178 207 179 BEGINPROC GenU32_ %+ %1 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 180 DO_PREFACE 2 218 181 xchg rcx, rdx 219 182 %1 edx, cl … … 225 188 226 189 BEGINPROC GenU64_ %+ %1 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 190 DO_PREFACE 2 237 191 xchg rcx, rdx 238 192 %1 rdx, cl … … 245 199 246 200 BEGINPROC GenU8_ %+ %1 %+ _Ib 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 201 DO_PREFACE 2 258 202 movzx r11d, dl 259 203 mov al, cl … … 283 227 284 228 BEGINPROC GenU16_ %+ %1 %+ _Ib 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 229 DO_PREFACE 2 296 230 movzx r11d, dl 297 231 mov ax, cx … … 322 256 323 257 BEGINPROC GenU32_ %+ %1 %+ _Ib 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 258 DO_PREFACE 2 335 259 movzx r11d, dl 336 260 mov eax, ecx … … 360 284 361 285 BEGINPROC GenU64_ %+ %1 %+ _Ib 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 286 DO_PREFACE 2 373 287 movzx r11d, dl 374 288 mov rax, rcx
Note:
See TracChangeset
for help on using the changeset viewer.