Revision 24988dc2 target-sh4/op.c

b/target-sh4/op.c
45 45

  
46 46
void OPPROTO op_movl_imm_T1(void)
47 47
{
48
    T0 = (uint32_t) PARAM1;
49
    RETURN();
50
}
51

  
52
void OPPROTO op_movl_imm_T2(void)
53
{
54
    T0 = (uint32_t) PARAM1;
48
    T1 = (uint32_t) PARAM1;
55 49
    RETURN();
56 50
}
57 51

  
......
240 234
    RETURN();
241 235
}
242 236

  
237
void OPPROTO op_add_T0_T1(void)
238
{
239
    T1 += T0;
240
    RETURN();
241
}
242

  
243 243
void OPPROTO op_addc_T0_T1(void)
244 244
{
245 245
    helper_addc_T0_T1();
......
355 355

  
356 356
void OPPROTO op_mulsw_T0_T1(void)
357 357
{
358
    env->macl = (int32_t) T0 *(int32_t) T1;
358
    env->macl = (int32_t)(int16_t) T0 *(int32_t)(int16_t) T1;
359 359
    RETURN();
360 360
}
361 361

  
362 362
void OPPROTO op_muluw_T0_T1(void)
363 363
{
364
    env->macl = (uint32_t) T0 *(uint32_t) T1;
364
    env->macl = (uint32_t)(uint16_t) T0 *(uint32_t)(uint16_t) T1;
365 365
    RETURN();
366 366
}
367 367

  
......
382 382
    if ((T0 & 0x80000000) == 0)
383 383
	T1 <<= (T0 & 0x1f);
384 384
    else if ((T0 & 0x1f) == 0)
385
	T1 = 0;
385
	T1 = (T1 & 0x80000000)? 0xffffffff : 0;
386 386
    else
387 387
	T1 = ((int32_t) T1) >> ((~T0 & 0x1f) + 1);
388 388
    RETURN();
......
539 539
void OPPROTO op_shar_Rn(void)
540 540
{
541 541
    cond_t(env->gregs[PARAM1] & 1);
542
    env->gregs[PARAM1] >>= 1;
542
    *(int32_t *)&env->gregs[PARAM1] >>= 1;
543 543
    RETURN();
544 544
}
545 545

  
......
767 767
    RETURN();
768 768
}
769 769

  
770
void OPPROTO op_fcmp_eq_FT(void)
771
{
772
    cond_t(float32_compare(FT0, FT1, &env->fp_status) == 0);
773
    RETURN();
774
}
775

  
776
void OPPROTO op_fcmp_eq_DT(void)
777
{
778
    cond_t(float64_compare(DT0, DT1, &env->fp_status) == 0);
779
    RETURN();
780
}
781

  
782
void OPPROTO op_fcmp_gt_FT(void)
783
{
784
    cond_t(float32_compare(FT0, FT1, &env->fp_status) == 1);
785
    RETURN();
786
}
787

  
788
void OPPROTO op_fcmp_gt_DT(void)
789
{
790
    cond_t(float64_compare(DT0, DT1, &env->fp_status) == 1);
791
    RETURN();
792
}
793

  
770 794
void OPPROTO op_float_FT(void)
771 795
{
772 796
    FT0 = int32_to_float32(env->fpul, &env->fp_status);
......
791 815
    RETURN();
792 816
}
793 817

  
818
void OPPROTO op_fneg_frN(void)
819
{
820
    env->fregs[PARAM1] = float32_chs(env->fregs[PARAM1]);
821
    RETURN();
822
}
823

  
824
void OPPROTO op_fabs_FT(void)
825
{
826
    FT0 = float32_abs(FT0);
827
    RETURN();
828
}
829

  
830
void OPPROTO op_fabs_DT(void)
831
{
832
    DT0 = float64_abs(DT0);
833
    RETURN();
834
}
835

  
836
void OPPROTO op_fcnvsd_FT_DT(void)
837
{
838
    DT0 = float32_to_float64(FT0, &env->fp_status);
839
    RETURN();
840
}
841

  
842
void OPPROTO op_fcnvds_DT_FT(void)
843
{
844
    FT0 = float64_to_float32(DT0, &env->fp_status);
845
    RETURN();
846
}
847

  
848
void OPPROTO op_fsqrt_FT(void)
849
{
850
    FT0 = float32_sqrt(FT0, &env->fp_status);
851
    RETURN();
852
}
853

  
854
void OPPROTO op_fsqrt_DT(void)
855
{
856
    DT0 = float64_sqrt(DT0, &env->fp_status);
857
    RETURN();
858
}
859

  
794 860
void OPPROTO op_fmov_T0_frN(void)
795 861
{
796
    *(unsigned int *)&env->fregs[PARAM1] = T0;
862
    *(uint32_t *)&env->fregs[PARAM1] = T0;
797 863
    RETURN();
798 864
}
799 865

  

Also available in: Unified diff