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