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