Changeset 15420 in vbox for trunk/src/VBox
- Timestamp:
- Dec 13, 2008 7:21:55 AM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 40869
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/EMAll.cpp
r15419 r15420 2939 2939 && CPUMIsGuestIn64BitCode(pVM, pRegFrame)) 2940 2940 { 2941 if ( pCpu->pCurInstr->opcode != OP_STOSWD 2942 && pCpu->pCurInstr->opcode != OP_MOV 2943 && pCpu->pCurInstr->opcode != OP_CMPXCHG8B 2944 && pCpu->pCurInstr->opcode != OP_XCHG 2941 uint32_t uOpCode = pCpu->pCurInstr->opcode; 2942 if ( uOpCode != OP_STOSWD 2943 && uOpCode != OP_MOV 2944 && uOpCode != OP_CMPXCHG8B 2945 && uOpCode != OP_XCHG 2945 2946 # ifdef VBOX_WITH_HYBRID_32BIT_KERNEL_IN_R0 2946 && pCpu->pCurInstr->opcode != OP_CMPXCHG /* solaris */ 2947 && pCpu->pCurInstr->opcode != OP_AND /* windows */ 2948 && pCpu->pCurInstr->opcode != OP_OR /* windows */ 2949 && pCpu->pCurInstr->opcode != OP_XOR 2947 && uOpCode != OP_CMPXCHG /* solaris */ 2948 && uOpCode != OP_AND /* windows */ 2949 && uOpCode != OP_OR /* windows */ 2950 && uOpCode != OP_XOR /* because we can */ 2951 && uOpCode != OP_ADD /* windows (dripple) */ 2952 && uOpCode != OP_ADC /* because we can */ 2953 && uOpCode != OP_SUB /* because we can */ 2954 /** @todo OP_BTS or is that a different kind of failure? */ 2950 2955 # endif 2951 2956 ) -
trunk/src/VBox/VMM/VMMAll/EMAllA.asm
r15418 r15420 627 627 628 628 ; switch on size 629 %ifdef RT_ARCH_AMD64629 %ifdef CAN_DO_8_BYTE_OP 630 630 cmp al, 8 631 631 je short .do_qword ; 8 bytes variant … … 662 662 pop MY_RET_REG 663 663 retn 664 665 %ifdef VBOX_WITH_HYBRID_32BIT_KERNEL_IN_R0 666 .do_qword: 667 db 0xea ; jmp far .sixtyfourbit_mode 668 dd .sixtyfourbit_mode, NAME(SUPR0Abs64bitKernelCS) 669 BITS 64 670 .sixtyfourbit_mode: 671 and esp, 0ffffffffh 672 and MY_PTR_REG, 0ffffffffh 673 mov rdx, qword [rsp + 08h] ; rdx = second parameter 674 add [MY_PTR_REG64], rdx ; do 8 bytes ADD 675 jmp far [.fpret wrt rip] 676 .fpret: ; 16:32 Pointer to .done. 677 dd .done, NAME(SUPR0AbsKernelCS) 678 BITS 32 679 %endif ; VBOX_WITH_HYBRID_32BIT_KERNEL_IN_R0 664 680 ENDPROC EMEmulateAdd 665 681 … … 692 708 693 709 ; switch on size 694 %ifdef RT_ARCH_AMD64710 %ifdef CAN_DO_8_BYTE_OP 695 711 cmp al, 8 696 712 je short .do_qword ; 8 bytes variant … … 731 747 pop MY_RET_REG 732 748 retn 749 750 %ifdef VBOX_WITH_HYBRID_32BIT_KERNEL_IN_R0 751 .do_qword: 752 db 0xea ; jmp far .sixtyfourbit_mode 753 dd .sixtyfourbit_mode, NAME(SUPR0Abs64bitKernelCS) 754 BITS 64 755 .sixtyfourbit_mode: 756 and esp, 0ffffffffh 757 and MY_PTR_REG, 0ffffffffh 758 mov rdx, qword [rsp + 08h] ; rdx = second parameter 759 stc ; set carry flag 760 adc [MY_PTR_REG64], rdx ; do 8 bytes ADC 761 jmp far [.fpret wrt rip] 762 .fpret: ; 16:32 Pointer to .done. 763 dd .done, NAME(SUPR0AbsKernelCS) 764 BITS 32 765 %endif ; VBOX_WITH_HYBRID_32BIT_KERNEL_IN_R0 733 766 ENDPROC EMEmulateAdcWithCarrySet 734 767 … … 761 794 762 795 ; switch on size 763 %ifdef RT_ARCH_AMD64796 %ifdef CAN_DO_8_BYTE_OP 764 797 cmp al, 8 765 798 je short .do_qword ; 8 bytes variant … … 796 829 pop MY_RET_REG 797 830 retn 831 832 %ifdef VBOX_WITH_HYBRID_32BIT_KERNEL_IN_R0 833 .do_qword: 834 db 0xea ; jmp far .sixtyfourbit_mode 835 dd .sixtyfourbit_mode, NAME(SUPR0Abs64bitKernelCS) 836 BITS 64 837 .sixtyfourbit_mode: 838 and esp, 0ffffffffh 839 and MY_PTR_REG, 0ffffffffh 840 mov rdx, qword [rsp + 08h] ; rdx = second parameter 841 sub [MY_PTR_REG64], rdx ; do 8 bytes SUB 842 jmp far [.fpret wrt rip] 843 .fpret: ; 16:32 Pointer to .done. 844 dd .done, NAME(SUPR0AbsKernelCS) 845 BITS 32 846 %endif ; VBOX_WITH_HYBRID_32BIT_KERNEL_IN_R0 798 847 ENDPROC EMEmulateSub 799 848
Note:
See TracChangeset
for help on using the changeset viewer.