Revision b8b6a50b target-i386/op.c

b/target-i386/op.c
276 276
#ifdef TARGET_X86_64
277 277
void OPPROTO op_mulq_EAX_T0(void)
278 278
{
279
    helper_mulq_EAX_T0();
279
    helper_mulq_EAX_T0(T0);
280 280
}
281 281

  
282 282
void OPPROTO op_imulq_EAX_T0(void)
283 283
{
284
    helper_imulq_EAX_T0();
284
    helper_imulq_EAX_T0(T0);
285 285
}
286 286

  
287 287
void OPPROTO op_imulq_T0_T1(void)
288 288
{
289
    helper_imulq_T0_T1();
289
    T0 = helper_imulq_T0_T1(T0, T1);
290 290
}
291 291
#endif
292 292

  
......
351 351

  
352 352
void OPPROTO op_cmpxchg8b(void)
353 353
{
354
    helper_cmpxchg8b();
354
    helper_cmpxchg8b(A0);
355 355
}
356 356

  
357 357
/* multiple size ops */
......
522 522

  
523 523
/* segment handling */
524 524

  
525
/* never use it with R_CS */
526
void OPPROTO op_movl_seg_T0(void)
527
{
528
    helper_load_seg(PARAM1, T0);
529
}
530

  
531 525
/* faster VM86 version */
532 526
void OPPROTO op_movl_seg_T0_vm(void)
533 527
{
......
548 542

  
549 543
void OPPROTO op_lsl(void)
550 544
{
551
    helper_lsl(T0);
545
    uint32_t val;
546
    val = helper_lsl(T0);
547
    if (CC_SRC & CC_Z)
548
        T1 = val;
549
    FORCE_RET();
552 550
}
553 551

  
554 552
void OPPROTO op_lar(void)
555 553
{
556
    helper_lar(T0);
554
    uint32_t val;
555
    val = helper_lar(T0);
556
    if (CC_SRC & CC_Z)
557
        T1 = val;
558
    FORCE_RET();
557 559
}
558 560

  
559 561
void OPPROTO op_verr(void)
......
585 587
    CC_SRC = (eflags & ~CC_Z) | T1;
586 588
}
587 589

  
588
/* T0: segment, T1:eip */
589
void OPPROTO op_ljmp_protected_T0_T1(void)
590
{
591
    helper_ljmp_protected_T0_T1(PARAM1);
592
}
593

  
594
void OPPROTO op_lcall_real_T0_T1(void)
595
{
596
    helper_lcall_real_T0_T1(PARAM1, PARAM2);
597
}
598

  
599
void OPPROTO op_lcall_protected_T0_T1(void)
600
{
601
    helper_lcall_protected_T0_T1(PARAM1, PARAM2);
602
}
603

  
604
void OPPROTO op_iret_real(void)
605
{
606
    helper_iret_real(PARAM1);
607
}
608

  
609
void OPPROTO op_iret_protected(void)
610
{
611
    helper_iret_protected(PARAM1, PARAM2);
612
}
613

  
614
void OPPROTO op_lret_protected(void)
615
{
616
    helper_lret_protected(PARAM1, PARAM2);
617
}
618

  
619
/* CR registers access. */
620
void OPPROTO op_movl_crN_T0(void)
621
{
622
    helper_movl_crN_T0(PARAM1);
623
}
624

  
625
/* These pseudo-opcodes check for SVM intercepts. */
626
void OPPROTO op_svm_check_intercept(void)
627
{
628
    A0 = PARAM1 & PARAM2;
629
    svm_check_intercept(PARAMQ1);
630
}
631

  
632
void OPPROTO op_svm_check_intercept_param(void)
633
{
634
    A0 = PARAM1 & PARAM2;
635
    svm_check_intercept_param(PARAMQ1, T1);
636
}
637

  
638
void OPPROTO op_svm_vmexit(void)
639
{
640
    A0 = PARAM1 & PARAM2;
641
    vmexit(PARAMQ1, T1);
642
}
643

  
644
void OPPROTO op_geneflags(void)
645
{
646
    CC_SRC = cc_table[CC_OP].compute_all();
647
}
648

  
649
/* This pseudo-opcode checks for IO intercepts. */
650
#if !defined(CONFIG_USER_ONLY)
651
void OPPROTO op_svm_check_intercept_io(void)
652
{
653
    A0 = PARAM1 & PARAM2;
654
    /* PARAMQ1 = TYPE (0 = OUT, 1 = IN; 4 = STRING; 8 = REP)
655
       T0      = PORT
656
       T1      = next eip */
657
    stq_phys(env->vm_vmcb + offsetof(struct vmcb, control.exit_info_2), T1);
658
    /* ASIZE does not appear on real hw */
659
    svm_check_intercept_param(SVM_EXIT_IOIO,
660
                              (PARAMQ1 & ~SVM_IOIO_ASIZE_MASK) |
661
                              ((T0 & 0xffff) << 16));
662
}
663
#endif
664

  
665
#if !defined(CONFIG_USER_ONLY)
666
void OPPROTO op_movtl_T0_cr8(void)
667
{
668
    T0 = cpu_get_apic_tpr(env);
669
}
670
#endif
671

  
672
/* DR registers access */
673
void OPPROTO op_movl_drN_T0(void)
674
{
675
    helper_movl_drN_T0(PARAM1);
676
}
677

  
678
void OPPROTO op_lmsw_T0(void)
679
{
680
    /* only 4 lower bits of CR0 are modified. PE cannot be set to zero
681
       if already set to one. */
682
    T0 = (env->cr[0] & ~0xe) | (T0 & 0xf);
683
    helper_movl_crN_T0(0);
684
}
685

  
686 590
void OPPROTO op_movl_T0_env(void)
687 591
{
688 592
    T0 = *(uint32_t *)((char *)env + PARAM1);
......
718 622
    *(target_ulong *)((char *)env + PARAM1) = T1;
719 623
}
720 624

  
721
void OPPROTO op_clts(void)
722
{
723
    env->cr[0] &= ~CR0_TS_MASK;
724
    env->hflags &= ~HF_TS_MASK;
725
}
726

  
727 625
/* flags handling */
728 626

  
729 627
void OPPROTO op_jmp_label(void)
......
1028 926
    T0 = 0;
1029 927
}
1030 928

  
1031
/* threading support */
1032
void OPPROTO op_lock(void)
1033
{
1034
    cpu_lock();
1035
}
1036

  
1037
void OPPROTO op_unlock(void)
1038
{
1039
    cpu_unlock();
1040
}
1041

  
1042 929
/* SSE support */
1043 930
void OPPROTO op_com_dummy(void)
1044 931
{

Also available in: Unified diff