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