Revision 02da0b2d target-arm/translate.c

b/target-arm/translate.c
3711 3711
    if (q) {
3712 3712
        switch (size) {
3713 3713
        case 0:
3714
            gen_helper_neon_qunzip8(tmp, tmp2);
3714
            gen_helper_neon_qunzip8(cpu_env, tmp, tmp2);
3715 3715
            break;
3716 3716
        case 1:
3717
            gen_helper_neon_qunzip16(tmp, tmp2);
3717
            gen_helper_neon_qunzip16(cpu_env, tmp, tmp2);
3718 3718
            break;
3719 3719
        case 2:
3720
            gen_helper_neon_qunzip32(tmp, tmp2);
3720
            gen_helper_neon_qunzip32(cpu_env, tmp, tmp2);
3721 3721
            break;
3722 3722
        default:
3723 3723
            abort();
......
3725 3725
    } else {
3726 3726
        switch (size) {
3727 3727
        case 0:
3728
            gen_helper_neon_unzip8(tmp, tmp2);
3728
            gen_helper_neon_unzip8(cpu_env, tmp, tmp2);
3729 3729
            break;
3730 3730
        case 1:
3731
            gen_helper_neon_unzip16(tmp, tmp2);
3731
            gen_helper_neon_unzip16(cpu_env, tmp, tmp2);
3732 3732
            break;
3733 3733
        default:
3734 3734
            abort();
......
3750 3750
    if (q) {
3751 3751
        switch (size) {
3752 3752
        case 0:
3753
            gen_helper_neon_qzip8(tmp, tmp2);
3753
            gen_helper_neon_qzip8(cpu_env, tmp, tmp2);
3754 3754
            break;
3755 3755
        case 1:
3756
            gen_helper_neon_qzip16(tmp, tmp2);
3756
            gen_helper_neon_qzip16(cpu_env, tmp, tmp2);
3757 3757
            break;
3758 3758
        case 2:
3759
            gen_helper_neon_qzip32(tmp, tmp2);
3759
            gen_helper_neon_qzip32(cpu_env, tmp, tmp2);
3760 3760
            break;
3761 3761
        default:
3762 3762
            abort();
......
3764 3764
    } else {
3765 3765
        switch (size) {
3766 3766
        case 0:
3767
            gen_helper_neon_zip8(tmp, tmp2);
3767
            gen_helper_neon_zip8(cpu_env, tmp, tmp2);
3768 3768
            break;
3769 3769
        case 1:
3770
            gen_helper_neon_zip16(tmp, tmp2);
3770
            gen_helper_neon_zip16(cpu_env, tmp, tmp2);
3771 3771
            break;
3772 3772
        default:
3773 3773
            abort();
......
4167 4167
static inline void gen_neon_narrow_sats(int size, TCGv dest, TCGv_i64 src)
4168 4168
{
4169 4169
    switch (size) {
4170
    case 0: gen_helper_neon_narrow_sat_s8(dest, src); break;
4171
    case 1: gen_helper_neon_narrow_sat_s16(dest, src); break;
4172
    case 2: gen_helper_neon_narrow_sat_s32(dest, src); break;
4170
    case 0: gen_helper_neon_narrow_sat_s8(dest, cpu_env, src); break;
4171
    case 1: gen_helper_neon_narrow_sat_s16(dest, cpu_env, src); break;
4172
    case 2: gen_helper_neon_narrow_sat_s32(dest, cpu_env, src); break;
4173 4173
    default: abort();
4174 4174
    }
4175 4175
}
......
4177 4177
static inline void gen_neon_narrow_satu(int size, TCGv dest, TCGv_i64 src)
4178 4178
{
4179 4179
    switch (size) {
4180
    case 0: gen_helper_neon_narrow_sat_u8(dest, src); break;
4181
    case 1: gen_helper_neon_narrow_sat_u16(dest, src); break;
4182
    case 2: gen_helper_neon_narrow_sat_u32(dest, src); break;
4180
    case 0: gen_helper_neon_narrow_sat_u8(dest, cpu_env, src); break;
4181
    case 1: gen_helper_neon_narrow_sat_u16(dest, cpu_env, src); break;
4182
    case 2: gen_helper_neon_narrow_sat_u32(dest, cpu_env, src); break;
4183 4183
    default: abort();
4184 4184
    }
4185 4185
}
......
4187 4187
static inline void gen_neon_unarrow_sats(int size, TCGv dest, TCGv_i64 src)
4188 4188
{
4189 4189
    switch (size) {
4190
    case 0: gen_helper_neon_unarrow_sat8(dest, src); break;
4191
    case 1: gen_helper_neon_unarrow_sat16(dest, src); break;
4192
    case 2: gen_helper_neon_unarrow_sat32(dest, src); break;
4190
    case 0: gen_helper_neon_unarrow_sat8(dest, cpu_env, src); break;
4191
    case 1: gen_helper_neon_unarrow_sat16(dest, cpu_env, src); break;
4192
    case 2: gen_helper_neon_unarrow_sat32(dest, cpu_env, src); break;
4193 4193
    default: abort();
4194 4194
    }
4195 4195
}
......
4281 4281
static inline void gen_neon_addl_saturate(TCGv_i64 op0, TCGv_i64 op1, int size)
4282 4282
{
4283 4283
    switch (size) {
4284
    case 1: gen_helper_neon_addl_saturate_s32(op0, op0, op1); break;
4285
    case 2: gen_helper_neon_addl_saturate_s64(op0, op0, op1); break;
4284
    case 1: gen_helper_neon_addl_saturate_s32(op0, cpu_env, op0, op1); break;
4285
    case 2: gen_helper_neon_addl_saturate_s64(op0, cpu_env, op0, op1); break;
4286 4286
    default: abort();
4287 4287
    }
4288 4288
}
......
4558 4558
                switch (op) {
4559 4559
                case NEON_3R_VQADD:
4560 4560
                    if (u) {
4561
                        gen_helper_neon_qadd_u64(cpu_V0, cpu_V0, cpu_V1);
4561
                        gen_helper_neon_qadd_u64(cpu_V0, cpu_env,
4562
                                                 cpu_V0, cpu_V1);
4562 4563
                    } else {
4563
                        gen_helper_neon_qadd_s64(cpu_V0, cpu_V0, cpu_V1);
4564
                        gen_helper_neon_qadd_s64(cpu_V0, cpu_env,
4565
                                                 cpu_V0, cpu_V1);
4564 4566
                    }
4565 4567
                    break;
4566 4568
                case NEON_3R_VQSUB:
4567 4569
                    if (u) {
4568
                        gen_helper_neon_qsub_u64(cpu_V0, cpu_V0, cpu_V1);
4570
                        gen_helper_neon_qsub_u64(cpu_V0, cpu_env,
4571
                                                 cpu_V0, cpu_V1);
4569 4572
                    } else {
4570
                        gen_helper_neon_qsub_s64(cpu_V0, cpu_V0, cpu_V1);
4573
                        gen_helper_neon_qsub_s64(cpu_V0, cpu_env,
4574
                                                 cpu_V0, cpu_V1);
4571 4575
                    }
4572 4576
                    break;
4573 4577
                case NEON_3R_VSHL:
......
4579 4583
                    break;
4580 4584
                case NEON_3R_VQSHL:
4581 4585
                    if (u) {
4582
                        gen_helper_neon_qshl_u64(cpu_V0, cpu_V1, cpu_V0);
4586
                        gen_helper_neon_qshl_u64(cpu_V0, cpu_env,
4587
                                                 cpu_V1, cpu_V0);
4583 4588
                    } else {
4584
                        gen_helper_neon_qshl_s64(cpu_V0, cpu_V1, cpu_V0);
4589
                        gen_helper_neon_qshl_s64(cpu_V0, cpu_env,
4590
                                                 cpu_V1, cpu_V0);
4585 4591
                    }
4586 4592
                    break;
4587 4593
                case NEON_3R_VRSHL:
......
4593 4599
                    break;
4594 4600
                case NEON_3R_VQRSHL:
4595 4601
                    if (u) {
4596
                        gen_helper_neon_qrshl_u64(cpu_V0, cpu_V1, cpu_V0);
4602
                        gen_helper_neon_qrshl_u64(cpu_V0, cpu_env,
4603
                                                  cpu_V1, cpu_V0);
4597 4604
                    } else {
4598
                        gen_helper_neon_qrshl_s64(cpu_V0, cpu_V1, cpu_V0);
4605
                        gen_helper_neon_qrshl_s64(cpu_V0, cpu_env,
4606
                                                  cpu_V1, cpu_V0);
4599 4607
                    }
4600 4608
                    break;
4601 4609
                case NEON_3R_VADD_VSUB:
......
4693 4701
            GEN_NEON_INTEGER_OP(hadd);
4694 4702
            break;
4695 4703
        case NEON_3R_VQADD:
4696
            GEN_NEON_INTEGER_OP(qadd);
4704
            GEN_NEON_INTEGER_OP_ENV(qadd);
4697 4705
            break;
4698 4706
        case NEON_3R_VRHADD:
4699 4707
            GEN_NEON_INTEGER_OP(rhadd);
......
4736 4744
            GEN_NEON_INTEGER_OP(hsub);
4737 4745
            break;
4738 4746
        case NEON_3R_VQSUB:
4739
            GEN_NEON_INTEGER_OP(qsub);
4747
            GEN_NEON_INTEGER_OP_ENV(qsub);
4740 4748
            break;
4741 4749
        case NEON_3R_VCGT:
4742 4750
            GEN_NEON_INTEGER_OP(cgt);
......
4748 4756
            GEN_NEON_INTEGER_OP(shl);
4749 4757
            break;
4750 4758
        case NEON_3R_VQSHL:
4751
            GEN_NEON_INTEGER_OP(qshl);
4759
            GEN_NEON_INTEGER_OP_ENV(qshl);
4752 4760
            break;
4753 4761
        case NEON_3R_VRSHL:
4754 4762
            GEN_NEON_INTEGER_OP(rshl);
4755 4763
            break;
4756 4764
        case NEON_3R_VQRSHL:
4757
            GEN_NEON_INTEGER_OP(qrshl);
4765
            GEN_NEON_INTEGER_OP_ENV(qrshl);
4758 4766
            break;
4759 4767
        case NEON_3R_VMAX:
4760 4768
            GEN_NEON_INTEGER_OP(max);
......
4836 4844
        case NEON_3R_VQDMULH_VQRDMULH: /* Multiply high.  */
4837 4845
            if (!u) { /* VQDMULH */
4838 4846
                switch (size) {
4839
                case 1: gen_helper_neon_qdmulh_s16(tmp, tmp, tmp2); break;
4840
                case 2: gen_helper_neon_qdmulh_s32(tmp, tmp, tmp2); break;
4847
                case 1:
4848
                    gen_helper_neon_qdmulh_s16(tmp, cpu_env, tmp, tmp2);
4849
                    break;
4850
                case 2:
4851
                    gen_helper_neon_qdmulh_s32(tmp, cpu_env, tmp, tmp2);
4852
                    break;
4841 4853
                default: abort();
4842 4854
                }
4843 4855
            } else { /* VQRDMULH */
4844 4856
                switch (size) {
4845
                case 1: gen_helper_neon_qrdmulh_s16(tmp, tmp, tmp2); break;
4846
                case 2: gen_helper_neon_qrdmulh_s32(tmp, tmp, tmp2); break;
4857
                case 1:
4858
                    gen_helper_neon_qrdmulh_s16(tmp, cpu_env, tmp, tmp2);
4859
                    break;
4860
                case 2:
4861
                    gen_helper_neon_qrdmulh_s32(tmp, cpu_env, tmp, tmp2);
4862
                    break;
4847 4863
                default: abort();
4848 4864
                }
4849 4865
            }
......
5035 5051
                            gen_helper_neon_shl_u64(cpu_V0, cpu_V0, cpu_V1);
5036 5052
                            break;
5037 5053
                        case 6: /* VQSHLU */
5038
                            gen_helper_neon_qshlu_s64(cpu_V0, cpu_V0, cpu_V1);
5054
                            gen_helper_neon_qshlu_s64(cpu_V0, cpu_env,
5055
                                                      cpu_V0, cpu_V1);
5039 5056
                            break;
5040 5057
                        case 7: /* VQSHL */
5041 5058
                            if (u) {
5042
                                gen_helper_neon_qshl_u64(cpu_V0,
5059
                                gen_helper_neon_qshl_u64(cpu_V0, cpu_env,
5043 5060
                                                         cpu_V0, cpu_V1);
5044 5061
                            } else {
5045
                                gen_helper_neon_qshl_s64(cpu_V0,
5062
                                gen_helper_neon_qshl_s64(cpu_V0, cpu_env,
5046 5063
                                                         cpu_V0, cpu_V1);
5047 5064
                            }
5048 5065
                            break;
......
5094 5111
                        case 6: /* VQSHLU */
5095 5112
                            switch (size) {
5096 5113
                            case 0:
5097
                                gen_helper_neon_qshlu_s8(tmp, tmp, tmp2);
5114
                                gen_helper_neon_qshlu_s8(tmp, cpu_env,
5115
                                                         tmp, tmp2);
5098 5116
                                break;
5099 5117
                            case 1:
5100
                                gen_helper_neon_qshlu_s16(tmp, tmp, tmp2);
5118
                                gen_helper_neon_qshlu_s16(tmp, cpu_env,
5119
                                                          tmp, tmp2);
5101 5120
                                break;
5102 5121
                            case 2:
5103
                                gen_helper_neon_qshlu_s32(tmp, tmp, tmp2);
5122
                                gen_helper_neon_qshlu_s32(tmp, cpu_env,
5123
                                                          tmp, tmp2);
5104 5124
                                break;
5105 5125
                            default:
5106 5126
                                abort();
5107 5127
                            }
5108 5128
                            break;
5109 5129
                        case 7: /* VQSHL */
5110
                            GEN_NEON_INTEGER_OP(qshl);
5130
                            GEN_NEON_INTEGER_OP_ENV(qshl);
5111 5131
                            break;
5112 5132
                        }
5113 5133
                        tcg_temp_free_i32(tmp2);
......
5616 5636
                        tmp2 = neon_load_reg(rn, pass);
5617 5637
                        if (op == 12) {
5618 5638
                            if (size == 1) {
5619
                                gen_helper_neon_qdmulh_s16(tmp, tmp, tmp2);
5639
                                gen_helper_neon_qdmulh_s16(tmp, cpu_env, tmp, tmp2);
5620 5640
                            } else {
5621
                                gen_helper_neon_qdmulh_s32(tmp, tmp, tmp2);
5641
                                gen_helper_neon_qdmulh_s32(tmp, cpu_env, tmp, tmp2);
5622 5642
                            }
5623 5643
                        } else if (op == 13) {
5624 5644
                            if (size == 1) {
5625
                                gen_helper_neon_qrdmulh_s16(tmp, tmp, tmp2);
5645
                                gen_helper_neon_qrdmulh_s16(tmp, cpu_env, tmp, tmp2);
5626 5646
                            } else {
5627
                                gen_helper_neon_qrdmulh_s32(tmp, tmp, tmp2);
5647
                                gen_helper_neon_qrdmulh_s32(tmp, cpu_env, tmp, tmp2);
5628 5648
                            }
5629 5649
                        } else if (op & 1) {
5630 5650
                            TCGv_ptr fpstatus = get_fpstatus_ptr(1);
......
5996 6016
                            break;
5997 6017
                        case NEON_2RM_VQABS:
5998 6018
                            switch (size) {
5999
                            case 0: gen_helper_neon_qabs_s8(tmp, tmp); break;
6000
                            case 1: gen_helper_neon_qabs_s16(tmp, tmp); break;
6001
                            case 2: gen_helper_neon_qabs_s32(tmp, tmp); break;
6019
                            case 0:
6020
                                gen_helper_neon_qabs_s8(tmp, cpu_env, tmp);
6021
                                break;
6022
                            case 1:
6023
                                gen_helper_neon_qabs_s16(tmp, cpu_env, tmp);
6024
                                break;
6025
                            case 2:
6026
                                gen_helper_neon_qabs_s32(tmp, cpu_env, tmp);
6027
                                break;
6002 6028
                            default: abort();
6003 6029
                            }
6004 6030
                            break;
6005 6031
                        case NEON_2RM_VQNEG:
6006 6032
                            switch (size) {
6007
                            case 0: gen_helper_neon_qneg_s8(tmp, tmp); break;
6008
                            case 1: gen_helper_neon_qneg_s16(tmp, tmp); break;
6009
                            case 2: gen_helper_neon_qneg_s32(tmp, tmp); break;
6033
                            case 0:
6034
                                gen_helper_neon_qneg_s8(tmp, cpu_env, tmp);
6035
                                break;
6036
                            case 1:
6037
                                gen_helper_neon_qneg_s16(tmp, cpu_env, tmp);
6038
                                break;
6039
                            case 2:
6040
                                gen_helper_neon_qneg_s32(tmp, cpu_env, tmp);
6041
                                break;
6010 6042
                            default: abort();
6011 6043
                            }
6012 6044
                            break;

Also available in: Unified diff