Revision afcb7375
b/target-sparc/helper.h | ||
---|---|---|
148 | 148 |
VIS_HELPER(padd); |
149 | 149 |
VIS_HELPER(psub); |
150 | 150 |
#define VIS_CMPHELPER(name) \ |
151 |
F_HELPER_0_0(name##16); \
|
|
152 |
F_HELPER_0_0(name##32)
|
|
151 |
DEF_HELPER_0(f##name##16, i64); \
|
|
152 |
DEF_HELPER_0(f##name##32, i64)
|
|
153 | 153 |
VIS_CMPHELPER(cmpgt); |
154 | 154 |
VIS_CMPHELPER(cmpeq); |
155 | 155 |
VIS_CMPHELPER(cmple); |
b/target-sparc/op_helper.c | ||
---|---|---|
525 | 525 |
uint16_t w[4]; |
526 | 526 |
int16_t sw[4]; |
527 | 527 |
uint32_t l[2]; |
528 |
uint64_t ll; |
|
528 | 529 |
float64 d; |
529 | 530 |
} vis64; |
530 | 531 |
|
... | ... | |
789 | 790 |
VIS_HELPER(helper_fpsub, FSUB) |
790 | 791 |
|
791 | 792 |
#define VIS_CMPHELPER(name, F) \ |
792 |
void name##16(void) \
|
|
793 |
uint64_t name##16(void) \
|
|
793 | 794 |
{ \ |
794 | 795 |
vis64 s, d; \ |
795 | 796 |
\ |
796 | 797 |
s.d = DT0; \ |
797 | 798 |
d.d = DT1; \ |
798 | 799 |
\ |
799 |
d.VIS_W64(0) = F(d.VIS_W64(0), s.VIS_W64(0))? 1: 0; \ |
|
800 |
d.VIS_W64(0) |= F(d.VIS_W64(1), s.VIS_W64(1))? 2: 0; \ |
|
801 |
d.VIS_W64(0) |= F(d.VIS_W64(2), s.VIS_W64(2))? 4: 0; \ |
|
802 |
d.VIS_W64(0) |= F(d.VIS_W64(3), s.VIS_W64(3))? 8: 0; \ |
|
800 |
d.VIS_W64(0) = F(s.VIS_W64(0), d.VIS_W64(0)) ? 1 : 0; \ |
|
801 |
d.VIS_W64(0) |= F(s.VIS_W64(1), d.VIS_W64(1)) ? 2 : 0; \ |
|
802 |
d.VIS_W64(0) |= F(s.VIS_W64(2), d.VIS_W64(2)) ? 4 : 0; \ |
|
803 |
d.VIS_W64(0) |= F(s.VIS_W64(3), d.VIS_W64(3)) ? 8 : 0; \ |
|
804 |
d.VIS_W64(1) = d.VIS_W64(2) = d.VIS_W64(3) = 0; \ |
|
803 | 805 |
\ |
804 |
DT0 = d.d; \
|
|
806 |
return d.ll; \
|
|
805 | 807 |
} \ |
806 | 808 |
\ |
807 |
void name##32(void) \
|
|
809 |
uint64_t name##32(void) \
|
|
808 | 810 |
{ \ |
809 | 811 |
vis64 s, d; \ |
810 | 812 |
\ |
811 | 813 |
s.d = DT0; \ |
812 | 814 |
d.d = DT1; \ |
813 | 815 |
\ |
814 |
d.VIS_L64(0) = F(d.VIS_L64(0), s.VIS_L64(0))? 1: 0; \ |
|
815 |
d.VIS_L64(0) |= F(d.VIS_L64(1), s.VIS_L64(1))? 2: 0; \ |
|
816 |
d.VIS_L64(0) = F(s.VIS_L64(0), d.VIS_L64(0)) ? 1 : 0; \ |
|
817 |
d.VIS_L64(0) |= F(s.VIS_L64(1), d.VIS_L64(1)) ? 2 : 0; \ |
|
818 |
d.VIS_L64(1) = 0; \ |
|
816 | 819 |
\ |
817 |
DT0 = d.d; \
|
|
820 |
return d.ll; \
|
|
818 | 821 |
} |
819 | 822 |
|
820 | 823 |
#define FCMPGT(a, b) ((a) > (b)) |
b/target-sparc/translate.c | ||
---|---|---|
3789 | 3789 |
CHECK_FPU_FEATURE(dc, VIS1); |
3790 | 3790 |
gen_op_load_fpr_DT0(DFPREG(rs1)); |
3791 | 3791 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
3792 |
gen_helper_fcmple16(); |
|
3793 |
gen_op_store_DT0_fpr(DFPREG(rd));
|
|
3792 |
gen_helper_fcmple16(cpu_dst);
|
|
3793 |
gen_movl_TN_reg(rd, cpu_dst);
|
|
3794 | 3794 |
break; |
3795 | 3795 |
case 0x022: /* VIS I fcmpne16 */ |
3796 | 3796 |
CHECK_FPU_FEATURE(dc, VIS1); |
3797 | 3797 |
gen_op_load_fpr_DT0(DFPREG(rs1)); |
3798 | 3798 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
3799 |
gen_helper_fcmpne16(); |
|
3800 |
gen_op_store_DT0_fpr(DFPREG(rd));
|
|
3799 |
gen_helper_fcmpne16(cpu_dst);
|
|
3800 |
gen_movl_TN_reg(rd, cpu_dst);
|
|
3801 | 3801 |
break; |
3802 | 3802 |
case 0x024: /* VIS I fcmple32 */ |
3803 | 3803 |
CHECK_FPU_FEATURE(dc, VIS1); |
3804 | 3804 |
gen_op_load_fpr_DT0(DFPREG(rs1)); |
3805 | 3805 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
3806 |
gen_helper_fcmple32(); |
|
3807 |
gen_op_store_DT0_fpr(DFPREG(rd));
|
|
3806 |
gen_helper_fcmple32(cpu_dst);
|
|
3807 |
gen_movl_TN_reg(rd, cpu_dst);
|
|
3808 | 3808 |
break; |
3809 | 3809 |
case 0x026: /* VIS I fcmpne32 */ |
3810 | 3810 |
CHECK_FPU_FEATURE(dc, VIS1); |
3811 | 3811 |
gen_op_load_fpr_DT0(DFPREG(rs1)); |
3812 | 3812 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
3813 |
gen_helper_fcmpne32(); |
|
3814 |
gen_op_store_DT0_fpr(DFPREG(rd));
|
|
3813 |
gen_helper_fcmpne32(cpu_dst);
|
|
3814 |
gen_movl_TN_reg(rd, cpu_dst);
|
|
3815 | 3815 |
break; |
3816 | 3816 |
case 0x028: /* VIS I fcmpgt16 */ |
3817 | 3817 |
CHECK_FPU_FEATURE(dc, VIS1); |
3818 | 3818 |
gen_op_load_fpr_DT0(DFPREG(rs1)); |
3819 | 3819 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
3820 |
gen_helper_fcmpgt16(); |
|
3821 |
gen_op_store_DT0_fpr(DFPREG(rd));
|
|
3820 |
gen_helper_fcmpgt16(cpu_dst);
|
|
3821 |
gen_movl_TN_reg(rd, cpu_dst);
|
|
3822 | 3822 |
break; |
3823 | 3823 |
case 0x02a: /* VIS I fcmpeq16 */ |
3824 | 3824 |
CHECK_FPU_FEATURE(dc, VIS1); |
3825 | 3825 |
gen_op_load_fpr_DT0(DFPREG(rs1)); |
3826 | 3826 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
3827 |
gen_helper_fcmpeq16(); |
|
3828 |
gen_op_store_DT0_fpr(DFPREG(rd));
|
|
3827 |
gen_helper_fcmpeq16(cpu_dst);
|
|
3828 |
gen_movl_TN_reg(rd, cpu_dst);
|
|
3829 | 3829 |
break; |
3830 | 3830 |
case 0x02c: /* VIS I fcmpgt32 */ |
3831 | 3831 |
CHECK_FPU_FEATURE(dc, VIS1); |
3832 | 3832 |
gen_op_load_fpr_DT0(DFPREG(rs1)); |
3833 | 3833 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
3834 |
gen_helper_fcmpgt32(); |
|
3835 |
gen_op_store_DT0_fpr(DFPREG(rd));
|
|
3834 |
gen_helper_fcmpgt32(cpu_dst);
|
|
3835 |
gen_movl_TN_reg(rd, cpu_dst);
|
|
3836 | 3836 |
break; |
3837 | 3837 |
case 0x02e: /* VIS I fcmpeq32 */ |
3838 | 3838 |
CHECK_FPU_FEATURE(dc, VIS1); |
3839 | 3839 |
gen_op_load_fpr_DT0(DFPREG(rs1)); |
3840 | 3840 |
gen_op_load_fpr_DT1(DFPREG(rs2)); |
3841 |
gen_helper_fcmpeq32(); |
|
3842 |
gen_op_store_DT0_fpr(DFPREG(rd));
|
|
3841 |
gen_helper_fcmpeq32(cpu_dst);
|
|
3842 |
gen_movl_TN_reg(rd, cpu_dst);
|
|
3843 | 3843 |
break; |
3844 | 3844 |
case 0x031: /* VIS I fmul8x16 */ |
3845 | 3845 |
CHECK_FPU_FEATURE(dc, VIS1); |
Also available in: Unified diff