Revision 505935fc
b/target-arm/translate.c | ||
---|---|---|
4553 | 4553 |
#define NEON_3R_FLOAT_CMP 28 /* float VCEQ, VCGE, VCGT */ |
4554 | 4554 |
#define NEON_3R_FLOAT_ACMP 29 /* float VACGE, VACGT, VACLE, VACLT */ |
4555 | 4555 |
#define NEON_3R_FLOAT_MINMAX 30 /* float VMIN, VMAX */ |
4556 |
#define NEON_3R_VRECPS_VRSQRTS 31 /* float VRECPS, VRSQRTS */
|
|
4556 |
#define NEON_3R_FLOAT_MISC 31 /* float VRECPS, VRSQRTS, VMAXNM/MINNM */
|
|
4557 | 4557 |
|
4558 | 4558 |
static const uint8_t neon_3r_sizes[] = { |
4559 | 4559 |
[NEON_3R_VHADD] = 0x7, |
... | ... | |
4586 | 4586 |
[NEON_3R_FLOAT_CMP] = 0x5, /* size bit 1 encodes op */ |
4587 | 4587 |
[NEON_3R_FLOAT_ACMP] = 0x5, /* size bit 1 encodes op */ |
4588 | 4588 |
[NEON_3R_FLOAT_MINMAX] = 0x5, /* size bit 1 encodes op */ |
4589 |
[NEON_3R_VRECPS_VRSQRTS] = 0x5, /* size bit 1 encodes op */
|
|
4589 |
[NEON_3R_FLOAT_MISC] = 0x5, /* size bit 1 encodes op */
|
|
4590 | 4590 |
}; |
4591 | 4591 |
|
4592 | 4592 |
/* Symbolic constants for op fields for Neon 2-register miscellaneous. |
... | ... | |
4847 | 4847 |
return 1; |
4848 | 4848 |
} |
4849 | 4849 |
break; |
4850 |
case NEON_3R_VRECPS_VRSQRTS: |
|
4851 |
if (u) { |
|
4850 |
case NEON_3R_FLOAT_MISC: |
|
4851 |
/* VMAXNM/VMINNM in ARMv8 */ |
|
4852 |
if (u && !arm_feature(env, ARM_FEATURE_V8)) { |
|
4852 | 4853 |
return 1; |
4853 | 4854 |
} |
4854 | 4855 |
break; |
... | ... | |
5137 | 5138 |
tcg_temp_free_ptr(fpstatus); |
5138 | 5139 |
break; |
5139 | 5140 |
} |
5140 |
case NEON_3R_VRECPS_VRSQRTS: |
|
5141 |
if (size == 0) |
|
5142 |
gen_helper_recps_f32(tmp, tmp, tmp2, cpu_env); |
|
5143 |
else |
|
5144 |
gen_helper_rsqrts_f32(tmp, tmp, tmp2, cpu_env); |
|
5141 |
case NEON_3R_FLOAT_MISC: |
|
5142 |
if (u) { |
|
5143 |
/* VMAXNM/VMINNM */ |
|
5144 |
TCGv_ptr fpstatus = get_fpstatus_ptr(1); |
|
5145 |
if (size == 0) { |
|
5146 |
gen_helper_vfp_maxnms(tmp, tmp, tmp2, fpstatus); |
|
5147 |
} else { |
|
5148 |
gen_helper_vfp_minnms(tmp, tmp, tmp2, fpstatus); |
|
5149 |
} |
|
5150 |
tcg_temp_free_ptr(fpstatus); |
|
5151 |
} else { |
|
5152 |
if (size == 0) { |
|
5153 |
gen_helper_recps_f32(tmp, tmp, tmp2, cpu_env); |
|
5154 |
} else { |
|
5155 |
gen_helper_rsqrts_f32(tmp, tmp, tmp2, cpu_env); |
|
5156 |
} |
|
5157 |
} |
|
5145 | 5158 |
break; |
5146 | 5159 |
case NEON_3R_VFM: |
5147 | 5160 |
{ |
Also available in: Unified diff