- Timestamp:
- Jan 16, 2024 12:37:36 AM (9 months ago)
- File:
-
- 1 edited
-
trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm (modified) (54 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm
r102817 r102882 281 281 ; @param 2 The set of modified flags. 282 282 ; @param 3 The set of undefined flags. 283 ; 284 %macro IEM_MAYBE_LOAD_FLAGS 3 285 ;%if (%3) != 0 283 ; @param 4 Force loading the flags. 284 ; 285 %macro IEM_MAYBE_LOAD_FLAGS 3-4 1 286 %if (%3 + %4) != 0 286 287 pushf ; store current flags 287 288 mov T0_32, [%1] ; load the guest flags … … 290 291 or [xSP], T0 ; merge guest flags with host flags. 291 292 popf ; load the mixed flags. 292 ;%endif293 %endif 293 294 %endmacro 294 295 … … 493 494 ; @param 3 The modified flags. 494 495 ; @param 4 The undefined flags. 495 ; 496 %macro IEMIMPL_BIN_OP 4 496 ; @param 5 Force flag loading (ADC, SBC). 497 ; 498 %macro IEMIMPL_BIN_OP 5 497 499 BEGINCODE 498 500 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u8, 12 499 501 PROLOGUE_3_ARGS 500 IEM_MAYBE_LOAD_FLAGS A2, %3, %4 502 IEM_MAYBE_LOAD_FLAGS A2, %3, %4, %5 501 503 %1 byte [A0], A1_8 502 504 IEM_SAVE_FLAGS A2, %3, %4 … … 506 508 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u16, 12 507 509 PROLOGUE_3_ARGS 508 IEM_MAYBE_LOAD_FLAGS A2, %3, %4 510 IEM_MAYBE_LOAD_FLAGS A2, %3, %4, %5 509 511 %1 word [A0], A1_16 510 512 IEM_SAVE_FLAGS A2, %3, %4 … … 514 516 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u32, 12 515 517 PROLOGUE_3_ARGS 516 IEM_MAYBE_LOAD_FLAGS A2, %3, %4 518 IEM_MAYBE_LOAD_FLAGS A2, %3, %4, %5 517 519 %1 dword [A0], A1_32 518 520 IEM_SAVE_FLAGS A2, %3, %4 … … 523 525 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64, 16 524 526 PROLOGUE_3_ARGS 525 IEM_MAYBE_LOAD_FLAGS A2, %3, %4 527 IEM_MAYBE_LOAD_FLAGS A2, %3, %4, %5 526 528 %1 qword [A0], A1 527 529 IEM_SAVE_FLAGS A2, %3, %4 … … 534 536 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u8_locked, 12 535 537 PROLOGUE_3_ARGS 536 IEM_MAYBE_LOAD_FLAGS A2, %3, %4 538 IEM_MAYBE_LOAD_FLAGS A2, %3, %4, %5 537 539 lock %1 byte [A0], A1_8 538 540 IEM_SAVE_FLAGS A2, %3, %4 … … 542 544 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u16_locked, 12 543 545 PROLOGUE_3_ARGS 544 IEM_MAYBE_LOAD_FLAGS A2, %3, %4 546 IEM_MAYBE_LOAD_FLAGS A2, %3, %4, %5 545 547 lock %1 word [A0], A1_16 546 548 IEM_SAVE_FLAGS A2, %3, %4 … … 550 552 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u32_locked, 12 551 553 PROLOGUE_3_ARGS 552 IEM_MAYBE_LOAD_FLAGS A2, %3, %4 554 IEM_MAYBE_LOAD_FLAGS A2, %3, %4, %5 553 555 lock %1 dword [A0], A1_32 554 556 IEM_SAVE_FLAGS A2, %3, %4 … … 559 561 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64_locked, 16 560 562 PROLOGUE_3_ARGS 561 IEM_MAYBE_LOAD_FLAGS A2, %3, %4 563 IEM_MAYBE_LOAD_FLAGS A2, %3, %4, %5 562 564 lock %1 qword [A0], A1 563 565 IEM_SAVE_FLAGS A2, %3, %4 … … 568 570 %endmacro 569 571 570 ; instr,lock, modified-flags, undefined flags 571 IEMIMPL_BIN_OP add, 1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0 572 IEMIMPL_BIN_OP adc, 1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0 573 IEMIMPL_BIN_OP sub, 1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0 574 IEMIMPL_BIN_OP sbb, 1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0 575 IEMIMPL_BIN_OP or, 1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF), X86_EFL_AF 576 IEMIMPL_BIN_OP xor, 1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF), X86_EFL_AF 577 IEMIMPL_BIN_OP and, 1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF), X86_EFL_AF 578 IEMIMPL_BIN_OP cmp, 0, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0 579 IEMIMPL_BIN_OP test, 0, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF), X86_EFL_AF 572 ; instr,lock, modified-flags, undefined flags, force loading flags 573 IEMIMPL_BIN_OP add, 1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0, 0 574 IEMIMPL_BIN_OP adc, 1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0, 1 575 IEMIMPL_BIN_OP sub, 1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0, 0 576 IEMIMPL_BIN_OP sbb, 1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0, 1 577 IEMIMPL_BIN_OP or, 1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF), X86_EFL_AF, 0 578 IEMIMPL_BIN_OP xor, 1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF), X86_EFL_AF, 0 579 IEMIMPL_BIN_OP and, 1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF), X86_EFL_AF, 0 580 IEMIMPL_BIN_OP cmp, 0, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0, 0 581 IEMIMPL_BIN_OP test, 0, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF), X86_EFL_AF, 0 580 582 581 583 … … 658 660 %endmacro 659 661 660 ; instr, modified-flags, undefined-flags662 ; instr, modified-flags, undefined-flags 661 663 IEMIMPL_VEX_BIN_OP_2 blsr, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_CF), (X86_EFL_AF | X86_EFL_PF) 662 664 IEMIMPL_VEX_BIN_OP_2 blsmsk, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_CF), (X86_EFL_AF | X86_EFL_PF) … … 925 927 %endif ; locked 926 928 %endmacro 929 ; modified efl, undefined eflags 927 930 IEMIMPL_BIT_OP bt, 0, (X86_EFL_CF), (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF) 928 931 IEMIMPL_BIT_OP btc, 1, (X86_EFL_CF), (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF) … … 1104 1107 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u16, 12 1105 1108 PROLOGUE_3_ARGS 1106 IEM_MAYBE_LOAD_FLAGS A2, %2, %3 1109 IEM_MAYBE_LOAD_FLAGS A2, %2, %3, 0 1107 1110 %1 T0_16, A1_16 1108 1111 mov [A0], T0_16 … … 1113 1116 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u32, 12 1114 1117 PROLOGUE_3_ARGS 1115 IEM_MAYBE_LOAD_FLAGS A2, %2, %3 1118 IEM_MAYBE_LOAD_FLAGS A2, %2, %3, 0 1116 1119 %1 T0_32, A1_32 1117 1120 mov [A0], T0_32 … … 1123 1126 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64, 16 1124 1127 PROLOGUE_3_ARGS 1125 IEM_MAYBE_LOAD_FLAGS A2, %2, %3 1128 IEM_MAYBE_LOAD_FLAGS A2, %2, %3, 0 1126 1129 %1 T0, A1 1127 1130 mov [A0], T0 … … 1283 1286 BEGINPROC_FASTCALL iemAImpl_xadd_u8, 12 1284 1287 PROLOGUE_3_ARGS 1285 IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0 1288 IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0, 0 1286 1289 mov T0_8, [A1] 1287 1290 xadd [A0], T0_8 … … 1293 1296 BEGINPROC_FASTCALL iemAImpl_xadd_u16, 12 1294 1297 PROLOGUE_3_ARGS 1295 IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0 1298 IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0, 0 1296 1299 mov T0_16, [A1] 1297 1300 xadd [A0], T0_16 … … 1303 1306 BEGINPROC_FASTCALL iemAImpl_xadd_u32, 12 1304 1307 PROLOGUE_3_ARGS 1305 IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0 1308 IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0, 0 1306 1309 mov T0_32, [A1] 1307 1310 xadd [A0], T0_32 … … 1314 1317 BEGINPROC_FASTCALL iemAImpl_xadd_u64, 12 1315 1318 PROLOGUE_3_ARGS 1316 IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0 1319 IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0, 0 1317 1320 mov T0, [A1] 1318 1321 xadd [A0], T0 … … 1325 1328 BEGINPROC_FASTCALL iemAImpl_xadd_u8_locked, 12 1326 1329 PROLOGUE_3_ARGS 1327 IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0 1330 IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0, 0 1328 1331 mov T0_8, [A1] 1329 1332 lock xadd [A0], T0_8 … … 1335 1338 BEGINPROC_FASTCALL iemAImpl_xadd_u16_locked, 12 1336 1339 PROLOGUE_3_ARGS 1337 IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0 1340 IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0, 0 1338 1341 mov T0_16, [A1] 1339 1342 lock xadd [A0], T0_16 … … 1345 1348 BEGINPROC_FASTCALL iemAImpl_xadd_u32_locked, 12 1346 1349 PROLOGUE_3_ARGS 1347 IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0 1350 IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0, 0 1348 1351 mov T0_32, [A1] 1349 1352 lock xadd [A0], T0_32 … … 1356 1359 BEGINPROC_FASTCALL iemAImpl_xadd_u64_locked, 12 1357 1360 PROLOGUE_3_ARGS 1358 IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0 1361 IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0, 0 1359 1362 mov T0, [A1] 1360 1363 lock xadd [A0], T0 … … 1391 1394 mov ebx, [r8] 1392 1395 mov ecx, [r8 + 4] 1393 IEM_MAYBE_LOAD_FLAGS r9, (X86_EFL_ZF), 0 ; clobbers T0 (eax)1396 IEM_MAYBE_LOAD_FLAGS r9, (X86_EFL_ZF), 0, 0 ; clobbers T0 (eax) 1394 1397 mov eax, [r11] 1395 1398 mov edx, [r11 + 4] … … 1411 1414 mov ebx, [r11] 1412 1415 mov ecx, [r11 + 4] 1413 IEM_MAYBE_LOAD_FLAGS r10, (X86_EFL_ZF), 0 ; clobbers T0 (eax)1416 IEM_MAYBE_LOAD_FLAGS r10, (X86_EFL_ZF), 0, 0 ; clobbers T0 (eax) 1414 1417 mov eax, [rsi] 1415 1418 mov edx, [rsi + 4] … … 1438 1441 mov ebx, [ecx] 1439 1442 mov ecx, [ecx + 4] 1440 IEM_MAYBE_LOAD_FLAGS ebp, (X86_EFL_ZF), 0 ; clobbers T0 (eax)1443 IEM_MAYBE_LOAD_FLAGS ebp, (X86_EFL_ZF), 0, 0 ; clobbers T0 (eax) 1441 1444 mov eax, [esi] 1442 1445 mov edx, [esi + 4] … … 1466 1469 mov ebx, [r8] 1467 1470 mov ecx, [r8 + 4] 1468 IEM_MAYBE_LOAD_FLAGS r9, (X86_EFL_ZF), 0 ; clobbers T0 (eax)1471 IEM_MAYBE_LOAD_FLAGS r9, (X86_EFL_ZF), 0, 0 ; clobbers T0 (eax) 1469 1472 mov eax, [r11] 1470 1473 mov edx, [r11 + 4] … … 1486 1489 mov ebx, [r11] 1487 1490 mov ecx, [r11 + 4] 1488 IEM_MAYBE_LOAD_FLAGS r10, (X86_EFL_ZF), 0 ; clobbers T0 (eax)1491 IEM_MAYBE_LOAD_FLAGS r10, (X86_EFL_ZF), 0, 0 ; clobbers T0 (eax) 1489 1492 mov eax, [rsi] 1490 1493 mov edx, [rsi + 4] … … 1513 1516 mov ebx, [ecx] 1514 1517 mov ecx, [ecx + 4] 1515 IEM_MAYBE_LOAD_FLAGS ebp, (X86_EFL_ZF), 0 ; clobbers T0 (eax)1518 IEM_MAYBE_LOAD_FLAGS ebp, (X86_EFL_ZF), 0, 0 ; clobbers T0 (eax) 1516 1519 mov eax, [esi] 1517 1520 mov edx, [esi + 4] … … 1557 1560 mov rbx, [r8] 1558 1561 mov rcx, [r8 + 8] 1559 IEM_MAYBE_LOAD_FLAGS r9, (X86_EFL_ZF), 0 ; clobbers T0 (eax)1562 IEM_MAYBE_LOAD_FLAGS r9, (X86_EFL_ZF), 0, 0 ; clobbers T0 (eax) 1560 1563 mov rax, [r11] 1561 1564 mov rdx, [r11 + 8] … … 1577 1580 mov rbx, [r11] 1578 1581 mov rcx, [r11 + 8] 1579 IEM_MAYBE_LOAD_FLAGS r10, (X86_EFL_ZF), 0 ; clobbers T0 (eax)1582 IEM_MAYBE_LOAD_FLAGS r10, (X86_EFL_ZF), 0, 0 ; clobbers T0 (eax) 1580 1583 mov rax, [rsi] 1581 1584 mov rdx, [rsi + 8] … … 1602 1605 mov rbx, [r8] 1603 1606 mov rcx, [r8 + 8] 1604 IEM_MAYBE_LOAD_FLAGS r9, (X86_EFL_ZF), 0 ; clobbers T0 (eax)1607 IEM_MAYBE_LOAD_FLAGS r9, (X86_EFL_ZF), 0, 0 ; clobbers T0 (eax) 1605 1608 mov rax, [r11] 1606 1609 mov rdx, [r11 + 8] … … 1622 1625 mov rbx, [r11] 1623 1626 mov rcx, [r11 + 8] 1624 IEM_MAYBE_LOAD_FLAGS r10, (X86_EFL_ZF), 0 ; clobbers T0 (eax)1627 IEM_MAYBE_LOAD_FLAGS r10, (X86_EFL_ZF), 0, 0 ; clobbers T0 (eax) 1625 1628 mov rax, [rsi] 1626 1629 mov rdx, [rsi + 8] … … 1653 1656 BEGINPROC_FASTCALL iemAImpl_cmpxchg_u8 %+ %2, 16 1654 1657 PROLOGUE_4_ARGS 1655 IEM_MAYBE_LOAD_FLAGS A3, (X86_EFL_ZF | X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF), 0 ; clobbers T0 (eax)1658 IEM_MAYBE_LOAD_FLAGS A3, (X86_EFL_ZF | X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF), 0, 0 ; clobbers T0 (eax) 1656 1659 mov al, [A1] 1657 1660 %1 cmpxchg [A0], A2_8 … … 1663 1666 BEGINPROC_FASTCALL iemAImpl_cmpxchg_u16 %+ %2, 16 1664 1667 PROLOGUE_4_ARGS 1665 IEM_MAYBE_LOAD_FLAGS A3, (X86_EFL_ZF | X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF), 0 ; clobbers T0 (eax)1668 IEM_MAYBE_LOAD_FLAGS A3, (X86_EFL_ZF | X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF), 0, 0 ; clobbers T0 (eax) 1666 1669 mov ax, [A1] 1667 1670 %1 cmpxchg [A0], A2_16 … … 1673 1676 BEGINPROC_FASTCALL iemAImpl_cmpxchg_u32 %+ %2, 16 1674 1677 PROLOGUE_4_ARGS 1675 IEM_MAYBE_LOAD_FLAGS A3, (X86_EFL_ZF | X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF), 0 ; clobbers T0 (eax)1678 IEM_MAYBE_LOAD_FLAGS A3, (X86_EFL_ZF | X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF), 0, 0 ; clobbers T0 (eax) 1676 1679 mov eax, [A1] 1677 1680 %1 cmpxchg [A0], A2_32 … … 1684 1687 %ifdef RT_ARCH_AMD64 1685 1688 PROLOGUE_4_ARGS 1686 IEM_MAYBE_LOAD_FLAGS A3, (X86_EFL_ZF | X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF), 0 ; clobbers T0 (eax)1689 IEM_MAYBE_LOAD_FLAGS A3, (X86_EFL_ZF | X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF), 0, 0 ; clobbers T0 (eax) 1687 1690 mov rax, [A1] 1688 1691 %1 cmpxchg [A0], A2 … … 1706 1709 mov ebx, [ecx] 1707 1710 mov ecx, [ecx + 4] 1708 IEM_MAYBE_LOAD_FLAGS ebp, (X86_EFL_ZF | X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF), 0 ; clobbers T0 (eax)1711 IEM_MAYBE_LOAD_FLAGS ebp, (X86_EFL_ZF | X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF), 0, 0 ; clobbers T0 (eax) 1709 1712 mov eax, [esi] 1710 1713 mov edx, [esi + 4] … … 1714 1717 ; cmpxchg8b doesn't set CF, PF, AF, SF and OF, so we have to do that. 1715 1718 jz .cmpxchg8b_not_equal 1719 ;; @todo this isn't correct. Need to do a 64-bit compare, not just the lower 32-bit. 1716 1720 cmp eax, eax ; just set the other flags. 1717 1721 .store: … … 1757 1761 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u8, 8 1758 1762 PROLOGUE_2_ARGS 1759 IEM_MAYBE_LOAD_FLAGS A1, %2, %3 1763 IEM_MAYBE_LOAD_FLAGS A1, %2, %3, 0 1760 1764 %1 byte [A0] 1761 1765 IEM_SAVE_FLAGS A1, %2, %3 … … 1765 1769 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u8_locked, 8 1766 1770 PROLOGUE_2_ARGS 1767 IEM_MAYBE_LOAD_FLAGS A1, %2, %3 1771 IEM_MAYBE_LOAD_FLAGS A1, %2, %3, 0 1768 1772 lock %1 byte [A0] 1769 1773 IEM_SAVE_FLAGS A1, %2, %3 … … 1773 1777 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u16, 8 1774 1778 PROLOGUE_2_ARGS 1775 IEM_MAYBE_LOAD_FLAGS A1, %2, %3 1779 IEM_MAYBE_LOAD_FLAGS A1, %2, %3, 0 1776 1780 %1 word [A0] 1777 1781 IEM_SAVE_FLAGS A1, %2, %3 … … 1781 1785 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u16_locked, 8 1782 1786 PROLOGUE_2_ARGS 1783 IEM_MAYBE_LOAD_FLAGS A1, %2, %3 1787 IEM_MAYBE_LOAD_FLAGS A1, %2, %3, 0 1784 1788 lock %1 word [A0] 1785 1789 IEM_SAVE_FLAGS A1, %2, %3 … … 1789 1793 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u32, 8 1790 1794 PROLOGUE_2_ARGS 1791 IEM_MAYBE_LOAD_FLAGS A1, %2, %3 1795 IEM_MAYBE_LOAD_FLAGS A1, %2, %3, 0 1792 1796 %1 dword [A0] 1793 1797 IEM_SAVE_FLAGS A1, %2, %3 … … 1797 1801 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u32_locked, 8 1798 1802 PROLOGUE_2_ARGS 1799 IEM_MAYBE_LOAD_FLAGS A1, %2, %3 1803 IEM_MAYBE_LOAD_FLAGS A1, %2, %3, 0 1800 1804 lock %1 dword [A0] 1801 1805 IEM_SAVE_FLAGS A1, %2, %3 … … 1806 1810 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64, 8 1807 1811 PROLOGUE_2_ARGS 1808 IEM_MAYBE_LOAD_FLAGS A1, %2, %3 1812 IEM_MAYBE_LOAD_FLAGS A1, %2, %3, 0 1809 1813 %1 qword [A0] 1810 1814 IEM_SAVE_FLAGS A1, %2, %3 … … 1814 1818 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64_locked, 8 1815 1819 PROLOGUE_2_ARGS 1816 IEM_MAYBE_LOAD_FLAGS A1, %2, %3 1820 IEM_MAYBE_LOAD_FLAGS A1, %2, %3, 0 1817 1821 lock %1 qword [A0] 1818 1822 IEM_SAVE_FLAGS A1, %2, %3 … … 1884 1888 ; @param 2 The modified flags. 1885 1889 ; @param 3 The undefined flags. 1890 ; @param 4 Force load flags. 1886 1891 ; 1887 1892 ; Makes ASSUMPTIONS about A0, A1 and A2 assignments. … … 1889 1894 ; @note the _intel and _amd variants are implemented in C. 1890 1895 ; 1891 %macro IEMIMPL_SHIFT_OP 31896 %macro IEMIMPL_SHIFT_OP 4 1892 1897 BEGINCODE 1893 1898 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u8, 12 1894 1899 PROLOGUE_3_ARGS 1895 IEM_MAYBE_LOAD_FLAGS A2, %2, %3 1900 IEM_MAYBE_LOAD_FLAGS A2, %2, %3, %4 1896 1901 %ifdef ASM_CALL64_GCC 1897 1902 mov cl, A1_8 … … 1907 1912 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u16, 12 1908 1913 PROLOGUE_3_ARGS 1909 IEM_MAYBE_LOAD_FLAGS A2, %2, %3 1914 IEM_MAYBE_LOAD_FLAGS A2, %2, %3, %4 1910 1915 %ifdef ASM_CALL64_GCC 1911 1916 mov cl, A1_8 … … 1921 1926 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u32, 12 1922 1927 PROLOGUE_3_ARGS 1923 IEM_MAYBE_LOAD_FLAGS A2, %2, %3 1928 IEM_MAYBE_LOAD_FLAGS A2, %2, %3, %4 1924 1929 %ifdef ASM_CALL64_GCC 1925 1930 mov cl, A1_8 … … 1936 1941 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64, 12 1937 1942 PROLOGUE_3_ARGS 1938 IEM_MAYBE_LOAD_FLAGS A2, %2, %3 1943 IEM_MAYBE_LOAD_FLAGS A2, %2, %3, %4 1939 1944 %ifdef ASM_CALL64_GCC 1940 1945 mov cl, A1_8 … … 1951 1956 %endmacro 1952 1957 1953 IEMIMPL_SHIFT_OP rol, (X86_EFL_OF | X86_EFL_CF), 0 1954 IEMIMPL_SHIFT_OP ror, (X86_EFL_OF | X86_EFL_CF), 0 1955 IEMIMPL_SHIFT_OP rcl, (X86_EFL_OF | X86_EFL_CF), 0 1956 IEMIMPL_SHIFT_OP rcr, (X86_EFL_OF | X86_EFL_CF), 0 1957 IEMIMPL_SHIFT_OP shl, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF), (X86_EFL_AF) 1958 IEMIMPL_SHIFT_OP shr, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF), (X86_EFL_AF) 1959 IEMIMPL_SHIFT_OP sar, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF), (X86_EFL_AF) 1958 ;; @todo some questions wrt flags when the shift count is high according to intel docs... 1959 IEMIMPL_SHIFT_OP rol, (X86_EFL_OF | X86_EFL_CF), 0, X86_EFL_CF 1960 IEMIMPL_SHIFT_OP ror, (X86_EFL_OF | X86_EFL_CF), 0, X86_EFL_CF 1961 IEMIMPL_SHIFT_OP rcl, (X86_EFL_OF | X86_EFL_CF), 0, X86_EFL_CF 1962 IEMIMPL_SHIFT_OP rcr, (X86_EFL_OF | X86_EFL_CF), 0, X86_EFL_CF 1963 IEMIMPL_SHIFT_OP shl, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF), (X86_EFL_AF), 0 1964 IEMIMPL_SHIFT_OP shr, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF), (X86_EFL_AF), 0 1965 IEMIMPL_SHIFT_OP sar, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF), (X86_EFL_AF), 0 1960 1966 1961 1967
Note:
See TracChangeset
for help on using the changeset viewer.

