Revision fbcc6828 target-mips/translate.c
b/target-mips/translate.c | ||
---|---|---|
402 | 402 |
OPC_MSUB_D = 0x29 | OPC_CP3, |
403 | 403 |
OPC_MSUB_PS = 0x2E | OPC_CP3, |
404 | 404 |
OPC_NMADD_S = 0x30 | OPC_CP3, |
405 |
OPC_NMADD_D = 0x32 | OPC_CP3,
|
|
405 |
OPC_NMADD_D = 0x31 | OPC_CP3,
|
|
406 | 406 |
OPC_NMADD_PS= 0x36 | OPC_CP3, |
407 | 407 |
OPC_NMSUB_S = 0x38 | OPC_CP3, |
408 | 408 |
OPC_NMSUB_D = 0x39 | OPC_CP3, |
... | ... | |
4955 | 4955 |
GEN_STORE_FTN_FREG(fd, WTH2); |
4956 | 4956 |
opn = "movn.ps"; |
4957 | 4957 |
break; |
4958 |
case FOP(24, 22): |
|
4959 |
CHECK_FR(ctx, fs | fd | ft); |
|
4960 |
GEN_LOAD_FREG_FTN(WT0, fs); |
|
4961 |
GEN_LOAD_FREG_FTN(WTH0, fs); |
|
4962 |
GEN_LOAD_FREG_FTN(WT1, ft); |
|
4963 |
GEN_LOAD_FREG_FTN(WTH1, ft); |
|
4964 |
gen_op_float_addr_ps(); |
|
4965 |
GEN_STORE_FTN_FREG(fd, WT2); |
|
4966 |
GEN_STORE_FTN_FREG(fd, WTH2); |
|
4967 |
opn = "addr.ps"; |
|
4968 |
break; |
|
4958 | 4969 |
case FOP(32, 22): |
4959 | 4970 |
CHECK_FR(ctx, fs); |
4960 | 4971 |
GEN_LOAD_FREG_FTN(WTH0, fs); |
... | ... | |
5120 | 5131 |
opn = "madd.s"; |
5121 | 5132 |
break; |
5122 | 5133 |
case OPC_MADD_D: |
5123 |
generate_exception (ctx, EXCP_RI); |
|
5134 |
GEN_LOAD_FREG_FTN(DT0, fs); |
|
5135 |
GEN_LOAD_FREG_FTN(DT1, ft); |
|
5136 |
GEN_LOAD_FREG_FTN(DT2, fr); |
|
5137 |
gen_op_float_muladd_d(); |
|
5138 |
GEN_STORE_FTN_FREG(fd, DT2); |
|
5124 | 5139 |
opn = "madd.d"; |
5125 | 5140 |
break; |
5126 | 5141 |
case OPC_MADD_PS: |
5127 |
generate_exception (ctx, EXCP_RI); |
|
5142 |
GEN_LOAD_FREG_FTN(WT0, fs); |
|
5143 |
GEN_LOAD_FREG_FTN(WTH0, fs); |
|
5144 |
GEN_LOAD_FREG_FTN(WT1, ft); |
|
5145 |
GEN_LOAD_FREG_FTN(WTH1, ft); |
|
5146 |
GEN_LOAD_FREG_FTN(WT2, fr); |
|
5147 |
GEN_LOAD_FREG_FTN(WTH2, fr); |
|
5148 |
gen_op_float_muladd_ps(); |
|
5149 |
GEN_STORE_FTN_FREG(fd, WT2); |
|
5150 |
GEN_STORE_FTN_FREG(fd, WTH2); |
|
5128 | 5151 |
opn = "madd.ps"; |
5129 | 5152 |
break; |
5130 | 5153 |
case OPC_MSUB_S: |
5131 |
generate_exception (ctx, EXCP_RI); |
|
5154 |
GEN_LOAD_FREG_FTN(WT0, fs); |
|
5155 |
GEN_LOAD_FREG_FTN(WT1, ft); |
|
5156 |
GEN_LOAD_FREG_FTN(WT2, fr); |
|
5157 |
gen_op_float_mulsub_s(); |
|
5158 |
GEN_STORE_FTN_FREG(fd, WT2); |
|
5132 | 5159 |
opn = "msub.s"; |
5133 | 5160 |
break; |
5134 | 5161 |
case OPC_MSUB_D: |
5135 |
generate_exception (ctx, EXCP_RI); |
|
5162 |
GEN_LOAD_FREG_FTN(DT0, fs); |
|
5163 |
GEN_LOAD_FREG_FTN(DT1, ft); |
|
5164 |
GEN_LOAD_FREG_FTN(DT2, fr); |
|
5165 |
gen_op_float_mulsub_d(); |
|
5166 |
GEN_STORE_FTN_FREG(fd, DT2); |
|
5136 | 5167 |
opn = "msub.d"; |
5137 | 5168 |
break; |
5138 | 5169 |
case OPC_MSUB_PS: |
5139 |
generate_exception (ctx, EXCP_RI); |
|
5170 |
GEN_LOAD_FREG_FTN(WT0, fs); |
|
5171 |
GEN_LOAD_FREG_FTN(WTH0, fs); |
|
5172 |
GEN_LOAD_FREG_FTN(WT1, ft); |
|
5173 |
GEN_LOAD_FREG_FTN(WTH1, ft); |
|
5174 |
GEN_LOAD_FREG_FTN(WT2, fr); |
|
5175 |
GEN_LOAD_FREG_FTN(WTH2, fr); |
|
5176 |
gen_op_float_mulsub_ps(); |
|
5177 |
GEN_STORE_FTN_FREG(fd, WT2); |
|
5178 |
GEN_STORE_FTN_FREG(fd, WTH2); |
|
5140 | 5179 |
opn = "msub.ps"; |
5141 | 5180 |
break; |
5142 | 5181 |
case OPC_NMADD_S: |
5143 |
generate_exception (ctx, EXCP_RI); |
|
5182 |
GEN_LOAD_FREG_FTN(WT0, fs); |
|
5183 |
GEN_LOAD_FREG_FTN(WT1, ft); |
|
5184 |
GEN_LOAD_FREG_FTN(WT2, fr); |
|
5185 |
gen_op_float_nmuladd_s(); |
|
5186 |
GEN_STORE_FTN_FREG(fd, WT2); |
|
5144 | 5187 |
opn = "nmadd.s"; |
5145 | 5188 |
break; |
5146 | 5189 |
case OPC_NMADD_D: |
5147 |
generate_exception (ctx, EXCP_RI); |
|
5190 |
GEN_LOAD_FREG_FTN(DT0, fs); |
|
5191 |
GEN_LOAD_FREG_FTN(DT1, ft); |
|
5192 |
GEN_LOAD_FREG_FTN(DT2, fr); |
|
5193 |
gen_op_float_nmuladd_d(); |
|
5194 |
GEN_STORE_FTN_FREG(fd, DT2); |
|
5148 | 5195 |
opn = "nmadd.d"; |
5149 | 5196 |
break; |
5150 | 5197 |
case OPC_NMADD_PS: |
5151 |
generate_exception (ctx, EXCP_RI); |
|
5198 |
GEN_LOAD_FREG_FTN(WT0, fs); |
|
5199 |
GEN_LOAD_FREG_FTN(WTH0, fs); |
|
5200 |
GEN_LOAD_FREG_FTN(WT1, ft); |
|
5201 |
GEN_LOAD_FREG_FTN(WTH1, ft); |
|
5202 |
GEN_LOAD_FREG_FTN(WT2, fr); |
|
5203 |
GEN_LOAD_FREG_FTN(WTH2, fr); |
|
5204 |
gen_op_float_nmuladd_ps(); |
|
5205 |
GEN_STORE_FTN_FREG(fd, WT2); |
|
5206 |
GEN_STORE_FTN_FREG(fd, WTH2); |
|
5152 | 5207 |
opn = "nmadd.ps"; |
5153 | 5208 |
break; |
5154 | 5209 |
case OPC_NMSUB_S: |
5155 |
generate_exception (ctx, EXCP_RI); |
|
5210 |
GEN_LOAD_FREG_FTN(WT0, fs); |
|
5211 |
GEN_LOAD_FREG_FTN(WT1, ft); |
|
5212 |
GEN_LOAD_FREG_FTN(WT2, fr); |
|
5213 |
gen_op_float_nmulsub_s(); |
|
5214 |
GEN_STORE_FTN_FREG(fd, WT2); |
|
5156 | 5215 |
opn = "nmsub.s"; |
5157 | 5216 |
break; |
5158 | 5217 |
case OPC_NMSUB_D: |
5159 |
generate_exception (ctx, EXCP_RI); |
|
5218 |
GEN_LOAD_FREG_FTN(DT0, fs); |
|
5219 |
GEN_LOAD_FREG_FTN(DT1, ft); |
|
5220 |
GEN_LOAD_FREG_FTN(DT2, fr); |
|
5221 |
gen_op_float_nmulsub_d(); |
|
5222 |
GEN_STORE_FTN_FREG(fd, DT2); |
|
5160 | 5223 |
opn = "nmsub.d"; |
5161 | 5224 |
break; |
5162 | 5225 |
case OPC_NMSUB_PS: |
5163 |
generate_exception (ctx, EXCP_RI); |
|
5226 |
GEN_LOAD_FREG_FTN(WT0, fs); |
|
5227 |
GEN_LOAD_FREG_FTN(WTH0, fs); |
|
5228 |
GEN_LOAD_FREG_FTN(WT1, ft); |
|
5229 |
GEN_LOAD_FREG_FTN(WTH1, ft); |
|
5230 |
GEN_LOAD_FREG_FTN(WT2, fr); |
|
5231 |
GEN_LOAD_FREG_FTN(WTH2, fr); |
|
5232 |
gen_op_float_nmulsub_ps(); |
|
5233 |
GEN_STORE_FTN_FREG(fd, WT2); |
|
5234 |
GEN_STORE_FTN_FREG(fd, WTH2); |
|
5164 | 5235 |
opn = "nmsub.ps"; |
5165 | 5236 |
break; |
5166 | 5237 |
default: |
... | ... | |
5562 | 5633 |
gen_cp1(ctx, op1, rt, rd); |
5563 | 5634 |
break; |
5564 | 5635 |
case OPC_BC1: |
5636 |
case OPC_BC1ANY2: |
|
5637 |
case OPC_BC1ANY4: |
|
5565 | 5638 |
gen_compute_branch1(ctx, MASK_BC1(ctx->opcode), |
5566 | 5639 |
(rt >> 2) & 0x7, imm << 2); |
5567 | 5640 |
return; |
Also available in: Unified diff