Commit 04acd3072622097f343d16e2da2ec84d6ee1b840
1 parent
4b2eb8d2
target-alpha: convert remaining arith3 functions to TCG
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5254 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
7 changed files
with
87 additions
and
146 deletions
target-alpha/cpu.h
target-alpha/exec.h
... | ... | @@ -34,13 +34,11 @@ register struct CPUAlphaState *env asm(AREG0); |
34 | 34 | /* no registers can be used */ |
35 | 35 | #define T0 (env->t0) |
36 | 36 | #define T1 (env->t1) |
37 | -#define T2 (env->t2) | |
38 | 37 | |
39 | 38 | #else |
40 | 39 | |
41 | 40 | register uint64_t T0 asm(AREG1); |
42 | 41 | register uint64_t T1 asm(AREG2); |
43 | -register uint64_t T2 asm(AREG3); | |
44 | 42 | |
45 | 43 | #endif /* TARGET_LONG_BITS > HOST_LONG_BITS */ |
46 | 44 | ... | ... |
target-alpha/helper.h
... | ... | @@ -11,6 +11,14 @@ DEF_HELPER(uint64_t, helper_load_implver, (void)) |
11 | 11 | DEF_HELPER(uint64_t, helper_rc, (void)) |
12 | 12 | DEF_HELPER(uint64_t, helper_rs, (void)) |
13 | 13 | |
14 | +DEF_HELPER(uint64_t, helper_addqv, (uint64_t, uint64_t)) | |
15 | +DEF_HELPER(uint64_t, helper_addlv, (uint64_t, uint64_t)) | |
16 | +DEF_HELPER(uint64_t, helper_subqv, (uint64_t, uint64_t)) | |
17 | +DEF_HELPER(uint64_t, helper_sublv, (uint64_t, uint64_t)) | |
18 | +DEF_HELPER(uint64_t, helper_mullv, (uint64_t, uint64_t)) | |
19 | +DEF_HELPER(uint64_t, helper_mulqv, (uint64_t, uint64_t)) | |
20 | +DEF_HELPER(uint64_t, helper_umulh, (uint64_t, uint64_t)) | |
21 | + | |
14 | 22 | DEF_HELPER(uint64_t, helper_ctpop, (uint64_t)) |
15 | 23 | DEF_HELPER(uint64_t, helper_ctlz, (uint64_t)) |
16 | 24 | DEF_HELPER(uint64_t, helper_cttz, (uint64_t)) |
... | ... | @@ -32,3 +40,4 @@ DEF_HELPER(uint64_t, helper_inslh, (int64_t, uint64_t)) |
32 | 40 | DEF_HELPER(uint64_t, helper_mskqh, (int64_t, uint64_t)) |
33 | 41 | DEF_HELPER(uint64_t, helper_insqh, (int64_t, uint64_t)) |
34 | 42 | |
43 | +DEF_HELPER(uint64_t, helper_cmpbge, (uint64_t, uint64_t)) | ... | ... |
target-alpha/op.c
... | ... | @@ -161,59 +161,7 @@ void OPPROTO op_store_fpcr (void) |
161 | 161 | RETURN(); |
162 | 162 | } |
163 | 163 | |
164 | -/* Arithmetic */ | |
165 | -void OPPROTO op_addqv (void) | |
166 | -{ | |
167 | - helper_addqv(); | |
168 | - RETURN(); | |
169 | -} | |
170 | - | |
171 | -void OPPROTO op_addlv (void) | |
172 | -{ | |
173 | - helper_addlv(); | |
174 | - RETURN(); | |
175 | -} | |
176 | - | |
177 | -void OPPROTO op_subqv (void) | |
178 | -{ | |
179 | - helper_subqv(); | |
180 | - RETURN(); | |
181 | -} | |
182 | - | |
183 | -void OPPROTO op_sublv (void) | |
184 | -{ | |
185 | - helper_sublv(); | |
186 | - RETURN(); | |
187 | -} | |
188 | - | |
189 | -void OPPROTO op_mullv (void) | |
190 | -{ | |
191 | - helper_mullv(); | |
192 | - RETURN(); | |
193 | -} | |
194 | - | |
195 | -void OPPROTO op_mulqv (void) | |
196 | -{ | |
197 | - helper_mulqv(); | |
198 | - RETURN(); | |
199 | -} | |
200 | - | |
201 | -void OPPROTO op_umulh (void) | |
202 | -{ | |
203 | - uint64_t tl, th; | |
204 | - | |
205 | - mulu64(&tl, &th, T0, T1); | |
206 | - T0 = th; | |
207 | - RETURN(); | |
208 | -} | |
209 | - | |
210 | 164 | /* Tests */ |
211 | -void OPPROTO op_cmpbge (void) | |
212 | -{ | |
213 | - helper_cmpbge(); | |
214 | - RETURN(); | |
215 | -} | |
216 | - | |
217 | 165 | #if 0 // Qemu does not know how to do this... |
218 | 166 | void OPPROTO op_bcond (void) |
219 | 167 | { | ... | ... |
target-alpha/op_helper.c
... | ... | @@ -163,62 +163,74 @@ uint64_t helper_rc(void) |
163 | 163 | return tmp; |
164 | 164 | } |
165 | 165 | |
166 | -void helper_addqv (void) | |
166 | +uint64_t helper_addqv (uint64_t op1, uint64_t op2) | |
167 | 167 | { |
168 | - T2 = T0; | |
169 | - T0 += T1; | |
170 | - if (unlikely((T2 ^ T1 ^ (-1ULL)) & (T2 ^ T0) & (1ULL << 63))) { | |
168 | + uint64_t tmp = op1; | |
169 | + op1 += op2; | |
170 | + if (unlikely((tmp ^ op2 ^ (-1ULL)) & (tmp ^ op1) & (1ULL << 63))) { | |
171 | 171 | helper_excp(EXCP_ARITH, EXCP_ARITH_OVERFLOW); |
172 | 172 | } |
173 | + return op1; | |
173 | 174 | } |
174 | 175 | |
175 | -void helper_addlv (void) | |
176 | +uint64_t helper_addlv (uint64_t op1, uint64_t op2) | |
176 | 177 | { |
177 | - T2 = T0; | |
178 | - T0 = (uint32_t)(T0 + T1); | |
179 | - if (unlikely((T2 ^ T1 ^ (-1UL)) & (T2 ^ T0) & (1UL << 31))) { | |
178 | + uint64_t tmp = op1; | |
179 | + op1 = (uint32_t)(op1 + op2); | |
180 | + if (unlikely((tmp ^ op2 ^ (-1UL)) & (tmp ^ op1) & (1UL << 31))) { | |
180 | 181 | helper_excp(EXCP_ARITH, EXCP_ARITH_OVERFLOW); |
181 | 182 | } |
183 | + return op1; | |
182 | 184 | } |
183 | 185 | |
184 | -void helper_subqv (void) | |
186 | +uint64_t helper_subqv (uint64_t op1, uint64_t op2) | |
185 | 187 | { |
186 | - T2 = T0; | |
187 | - T0 -= T1; | |
188 | - if (unlikely(((~T2) ^ T0 ^ (-1ULL)) & ((~T2) ^ T1) & (1ULL << 63))) { | |
188 | + uint64_t tmp = op1; | |
189 | + op1 -= op2; | |
190 | + if (unlikely(((~tmp) ^ op1 ^ (-1ULL)) & ((~tmp) ^ op2) & (1ULL << 63))) { | |
189 | 191 | helper_excp(EXCP_ARITH, EXCP_ARITH_OVERFLOW); |
190 | 192 | } |
193 | + return op1; | |
191 | 194 | } |
192 | 195 | |
193 | -void helper_sublv (void) | |
196 | +uint64_t helper_sublv (uint64_t op1, uint64_t op2) | |
194 | 197 | { |
195 | - T2 = T0; | |
196 | - T0 = (uint32_t)(T0 - T1); | |
197 | - if (unlikely(((~T2) ^ T0 ^ (-1UL)) & ((~T2) ^ T1) & (1UL << 31))) { | |
198 | + uint64_t tmp = op1; | |
199 | + op1 = (uint32_t)(op1 - op2); | |
200 | + if (unlikely(((~tmp) ^ op1 ^ (-1UL)) & ((~tmp) ^ op2) & (1UL << 31))) { | |
198 | 201 | helper_excp(EXCP_ARITH, EXCP_ARITH_OVERFLOW); |
199 | 202 | } |
203 | + return op1; | |
200 | 204 | } |
201 | 205 | |
202 | -void helper_mullv (void) | |
206 | +uint64_t helper_mullv (uint64_t op1, uint64_t op2) | |
203 | 207 | { |
204 | - int64_t res = (int64_t)T0 * (int64_t)T1; | |
208 | + int64_t res = (int64_t)op1 * (int64_t)op2; | |
205 | 209 | |
206 | 210 | if (unlikely((int32_t)res != res)) { |
207 | 211 | helper_excp(EXCP_ARITH, EXCP_ARITH_OVERFLOW); |
208 | 212 | } |
209 | - T0 = (int64_t)((int32_t)res); | |
213 | + return (int64_t)((int32_t)res); | |
210 | 214 | } |
211 | 215 | |
212 | -void helper_mulqv () | |
216 | +uint64_t helper_mulqv (uint64_t op1, uint64_t op2) | |
213 | 217 | { |
214 | 218 | uint64_t tl, th; |
215 | 219 | |
216 | - muls64(&tl, &th, T0, T1); | |
220 | + muls64(&tl, &th, op1, op2); | |
217 | 221 | /* If th != 0 && th != -1, then we had an overflow */ |
218 | 222 | if (unlikely((th + 1) > 1)) { |
219 | 223 | helper_excp(EXCP_ARITH, EXCP_ARITH_OVERFLOW); |
220 | 224 | } |
221 | - T0 = tl; | |
225 | + return tl; | |
226 | +} | |
227 | + | |
228 | +uint64_t helper_umulh (uint64_t op1, uint64_t op2) | |
229 | +{ | |
230 | + uint64_t tl, th; | |
231 | + | |
232 | + mulu64(&tl, &th, op1, op2); | |
233 | + return th; | |
222 | 234 | } |
223 | 235 | |
224 | 236 | uint64_t helper_ctpop (uint64_t arg) |
... | ... | @@ -340,19 +352,19 @@ uint64_t helper_insqh(uint64_t val, uint64_t mask) |
340 | 352 | return byte_zap(val, ~((0xFF << (mask & 7)) >> 8)); |
341 | 353 | } |
342 | 354 | |
343 | -void helper_cmpbge (void) | |
355 | +uint64_t helper_cmpbge (uint64_t op1, uint64_t op2) | |
344 | 356 | { |
345 | 357 | uint8_t opa, opb, res; |
346 | 358 | int i; |
347 | 359 | |
348 | 360 | res = 0; |
349 | 361 | for (i = 0; i < 7; i++) { |
350 | - opa = T0 >> (i * 8); | |
351 | - opb = T1 >> (i * 8); | |
362 | + opa = op1 >> (i * 8); | |
363 | + opb = op2 >> (i * 8); | |
352 | 364 | if (opa >= opb) |
353 | 365 | res |= 1 << i; |
354 | 366 | } |
355 | - T0 = res; | |
367 | + return res; | |
356 | 368 | } |
357 | 369 | |
358 | 370 | void helper_cmov_fir (int freg) | ... | ... |
target-alpha/op_helper.h
... | ... | @@ -21,13 +21,6 @@ |
21 | 21 | void helper_call_pal (uint32_t palcode); |
22 | 22 | void helper_load_fpcr (void); |
23 | 23 | void helper_store_fpcr (void); |
24 | -void helper_addqv (void); | |
25 | -void helper_addlv (void); | |
26 | -void helper_subqv (void); | |
27 | -void helper_sublv (void); | |
28 | -void helper_mullv (void); | |
29 | -void helper_mulqv (void); | |
30 | -void helper_cmpbge (void); | |
31 | 24 | void helper_cmov_fir (int freg); |
32 | 25 | |
33 | 26 | double helper_ldff_raw (target_ulong ea); | ... | ... |
target-alpha/translate.c
... | ... | @@ -51,7 +51,7 @@ static TCGv cpu_ir[31]; |
51 | 51 | static TCGv cpu_pc; |
52 | 52 | |
53 | 53 | /* dyngen register indexes */ |
54 | -static TCGv cpu_T[3]; | |
54 | +static TCGv cpu_T[2]; | |
55 | 55 | |
56 | 56 | /* register names */ |
57 | 57 | static char cpu_reg_names[10*4+21*5]; |
... | ... | @@ -74,12 +74,9 @@ static void alpha_translate_init(void) |
74 | 74 | offsetof(CPUState, t0), "T0"); |
75 | 75 | cpu_T[1] = tcg_global_mem_new(TCG_TYPE_I64, TCG_AREG0, |
76 | 76 | offsetof(CPUState, t1), "T1"); |
77 | - cpu_T[2] = tcg_global_mem_new(TCG_TYPE_I64, TCG_AREG0, | |
78 | - offsetof(CPUState, t2), "T2"); | |
79 | 77 | #else |
80 | 78 | cpu_T[0] = tcg_global_reg_new(TCG_TYPE_I64, TCG_AREG1, "T0"); |
81 | 79 | cpu_T[1] = tcg_global_reg_new(TCG_TYPE_I64, TCG_AREG2, "T1"); |
82 | - cpu_T[2] = tcg_global_reg_new(TCG_TYPE_I64, TCG_AREG3, "T2"); | |
83 | 80 | #endif |
84 | 81 | |
85 | 82 | p = cpu_reg_names; |
... | ... | @@ -367,24 +364,6 @@ static always_inline void gen_fbcond (DisasContext *ctx, |
367 | 364 | _gen_op_bcond(ctx); |
368 | 365 | } |
369 | 366 | |
370 | -static always_inline void gen_arith3 (DisasContext *ctx, | |
371 | - void (*gen_arith_op)(void), | |
372 | - int ra, int rb, int rc, | |
373 | - int islit, uint8_t lit) | |
374 | -{ | |
375 | - if (ra != 31) | |
376 | - tcg_gen_mov_i64(cpu_T[0], cpu_ir[ra]); | |
377 | - else | |
378 | - tcg_gen_movi_i64(cpu_T[0], 0); | |
379 | - if (islit) | |
380 | - tcg_gen_movi_i64(cpu_T[1], lit); | |
381 | - else | |
382 | - tcg_gen_mov_i64(cpu_T[1], cpu_ir[rb]); | |
383 | - (*gen_arith_op)(); | |
384 | - if (rc != 31) | |
385 | - tcg_gen_mov_i64(cpu_ir[rc], cpu_T[0]); | |
386 | -} | |
387 | - | |
388 | 367 | static always_inline void gen_cmov (DisasContext *ctx, |
389 | 368 | TCGCond inv_cond, |
390 | 369 | int ra, int rb, int rc, |
... | ... | @@ -525,16 +504,10 @@ static always_inline void gen_ext_l(void (*tcg_gen_ext_i64)(TCGv t0, TCGv t1), |
525 | 504 | tcg_gen_movi_i64(cpu_ir[rc], 0); |
526 | 505 | } |
527 | 506 | |
528 | -/* Code to call byte manipulation helpers, used by: | |
529 | - INSWH, INSLH, INSQH, INSBL, INSWL, INSLL, INSQL, | |
530 | - MSKWH, MSKLH, MSKQH, MSKBL, MSKWL, MSKLL, MSKQL, | |
531 | - ZAP, ZAPNOT | |
532 | - | |
533 | - WARNING: it assumes that when ra31 is used, the result is 0. | |
534 | -*/ | |
535 | -static always_inline void gen_byte_manipulation(void *helper, | |
536 | - int ra, int rb, int rc, | |
537 | - int islit, uint8_t lit) | |
507 | +/* Code to call arith3 helpers */ | |
508 | +static always_inline void gen_arith3_helper(void *helper, | |
509 | + int ra, int rb, int rc, | |
510 | + int islit, uint8_t lit) | |
538 | 511 | { |
539 | 512 | if (unlikely(rc == 31)) |
540 | 513 | return; |
... | ... | @@ -546,8 +519,16 @@ static always_inline void gen_byte_manipulation(void *helper, |
546 | 519 | tcg_temp_free(tmp); |
547 | 520 | } else |
548 | 521 | tcg_gen_helper_1_2(helper, cpu_ir[rc], cpu_ir[ra], cpu_ir[rb]); |
549 | - } else | |
550 | - tcg_gen_movi_i64(cpu_ir[rc], 0); | |
522 | + } else { | |
523 | + TCGv tmp1 = tcg_const_i64(0); | |
524 | + if (islit) { | |
525 | + TCGv tmp2 = tcg_const_i64(lit); | |
526 | + tcg_gen_helper_1_2(helper, cpu_ir[rc], tmp1, tmp2); | |
527 | + tcg_temp_free(tmp2); | |
528 | + } else | |
529 | + tcg_gen_helper_1_2(helper, cpu_ir[rc], tmp1, cpu_ir[rb]); | |
530 | + tcg_temp_free(tmp1); | |
531 | + } | |
551 | 532 | } |
552 | 533 | |
553 | 534 | static always_inline void gen_cmp(TCGCond cond, |
... | ... | @@ -791,7 +772,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) |
791 | 772 | break; |
792 | 773 | case 0x0F: |
793 | 774 | /* CMPBGE */ |
794 | - gen_arith3(ctx, &gen_op_cmpbge, ra, rb, rc, islit, lit); | |
775 | + gen_arith3_helper(helper_cmpbge, ra, rb, rc, islit, lit); | |
795 | 776 | break; |
796 | 777 | case 0x12: |
797 | 778 | /* S8ADDL */ |
... | ... | @@ -957,11 +938,11 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) |
957 | 938 | break; |
958 | 939 | case 0x40: |
959 | 940 | /* ADDL/V */ |
960 | - gen_arith3(ctx, &gen_op_addlv, ra, rb, rc, islit, lit); | |
941 | + gen_arith3_helper(helper_addlv, ra, rb, rc, islit, lit); | |
961 | 942 | break; |
962 | 943 | case 0x49: |
963 | 944 | /* SUBL/V */ |
964 | - gen_arith3(ctx, &gen_op_sublv, ra, rb, rc, islit, lit); | |
945 | + gen_arith3_helper(helper_sublv, ra, rb, rc, islit, lit); | |
965 | 946 | break; |
966 | 947 | case 0x4D: |
967 | 948 | /* CMPLT */ |
... | ... | @@ -969,11 +950,11 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) |
969 | 950 | break; |
970 | 951 | case 0x60: |
971 | 952 | /* ADDQ/V */ |
972 | - gen_arith3(ctx, &gen_op_addqv, ra, rb, rc, islit, lit); | |
953 | + gen_arith3_helper(helper_addqv, ra, rb, rc, islit, lit); | |
973 | 954 | break; |
974 | 955 | case 0x69: |
975 | 956 | /* SUBQ/V */ |
976 | - gen_arith3(ctx, &gen_op_subqv, ra, rb, rc, islit, lit); | |
957 | + gen_arith3_helper(helper_subqv, ra, rb, rc, islit, lit); | |
977 | 958 | break; |
978 | 959 | case 0x6D: |
979 | 960 | /* CMPLE */ |
... | ... | @@ -1138,7 +1119,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) |
1138 | 1119 | switch (fn7) { |
1139 | 1120 | case 0x02: |
1140 | 1121 | /* MSKBL */ |
1141 | - gen_byte_manipulation(helper_mskbl, ra, rb, rc, islit, lit); | |
1122 | + gen_arith3_helper(helper_mskbl, ra, rb, rc, islit, lit); | |
1142 | 1123 | break; |
1143 | 1124 | case 0x06: |
1144 | 1125 | /* EXTBL */ |
... | ... | @@ -1146,11 +1127,11 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) |
1146 | 1127 | break; |
1147 | 1128 | case 0x0B: |
1148 | 1129 | /* INSBL */ |
1149 | - gen_byte_manipulation(helper_insbl, ra, rb, rc, islit, lit); | |
1130 | + gen_arith3_helper(helper_insbl, ra, rb, rc, islit, lit); | |
1150 | 1131 | break; |
1151 | 1132 | case 0x12: |
1152 | 1133 | /* MSKWL */ |
1153 | - gen_byte_manipulation(helper_mskwl, ra, rb, rc, islit, lit); | |
1134 | + gen_arith3_helper(helper_mskwl, ra, rb, rc, islit, lit); | |
1154 | 1135 | break; |
1155 | 1136 | case 0x16: |
1156 | 1137 | /* EXTWL */ |
... | ... | @@ -1158,11 +1139,11 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) |
1158 | 1139 | break; |
1159 | 1140 | case 0x1B: |
1160 | 1141 | /* INSWL */ |
1161 | - gen_byte_manipulation(helper_inswl, ra, rb, rc, islit, lit); | |
1142 | + gen_arith3_helper(helper_inswl, ra, rb, rc, islit, lit); | |
1162 | 1143 | break; |
1163 | 1144 | case 0x22: |
1164 | 1145 | /* MSKLL */ |
1165 | - gen_byte_manipulation(helper_mskll, ra, rb, rc, islit, lit); | |
1146 | + gen_arith3_helper(helper_mskll, ra, rb, rc, islit, lit); | |
1166 | 1147 | break; |
1167 | 1148 | case 0x26: |
1168 | 1149 | /* EXTLL */ |
... | ... | @@ -1170,19 +1151,19 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) |
1170 | 1151 | break; |
1171 | 1152 | case 0x2B: |
1172 | 1153 | /* INSLL */ |
1173 | - gen_byte_manipulation(helper_insll, ra, rb, rc, islit, lit); | |
1154 | + gen_arith3_helper(helper_insll, ra, rb, rc, islit, lit); | |
1174 | 1155 | break; |
1175 | 1156 | case 0x30: |
1176 | 1157 | /* ZAP */ |
1177 | - gen_byte_manipulation(helper_zap, ra, rb, rc, islit, lit); | |
1158 | + gen_arith3_helper(helper_zap, ra, rb, rc, islit, lit); | |
1178 | 1159 | break; |
1179 | 1160 | case 0x31: |
1180 | 1161 | /* ZAPNOT */ |
1181 | - gen_byte_manipulation(helper_zapnot, ra, rb, rc, islit, lit); | |
1162 | + gen_arith3_helper(helper_zapnot, ra, rb, rc, islit, lit); | |
1182 | 1163 | break; |
1183 | 1164 | case 0x32: |
1184 | 1165 | /* MSKQL */ |
1185 | - gen_byte_manipulation(helper_mskql, ra, rb, rc, islit, lit); | |
1166 | + gen_arith3_helper(helper_mskql, ra, rb, rc, islit, lit); | |
1186 | 1167 | break; |
1187 | 1168 | case 0x34: |
1188 | 1169 | /* SRL */ |
... | ... | @@ -1222,7 +1203,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) |
1222 | 1203 | break; |
1223 | 1204 | case 0x3B: |
1224 | 1205 | /* INSQL */ |
1225 | - gen_byte_manipulation(helper_insql, ra, rb, rc, islit, lit); | |
1206 | + gen_arith3_helper(helper_insql, ra, rb, rc, islit, lit); | |
1226 | 1207 | break; |
1227 | 1208 | case 0x3C: |
1228 | 1209 | /* SRA */ |
... | ... | @@ -1242,11 +1223,11 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) |
1242 | 1223 | break; |
1243 | 1224 | case 0x52: |
1244 | 1225 | /* MSKWH */ |
1245 | - gen_byte_manipulation(helper_mskwh, ra, rb, rc, islit, lit); | |
1226 | + gen_arith3_helper(helper_mskwh, ra, rb, rc, islit, lit); | |
1246 | 1227 | break; |
1247 | 1228 | case 0x57: |
1248 | 1229 | /* INSWH */ |
1249 | - gen_byte_manipulation(helper_inswh, ra, rb, rc, islit, lit); | |
1230 | + gen_arith3_helper(helper_inswh, ra, rb, rc, islit, lit); | |
1250 | 1231 | break; |
1251 | 1232 | case 0x5A: |
1252 | 1233 | /* EXTWH */ |
... | ... | @@ -1254,11 +1235,11 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) |
1254 | 1235 | break; |
1255 | 1236 | case 0x62: |
1256 | 1237 | /* MSKLH */ |
1257 | - gen_byte_manipulation(helper_msklh, ra, rb, rc, islit, lit); | |
1238 | + gen_arith3_helper(helper_msklh, ra, rb, rc, islit, lit); | |
1258 | 1239 | break; |
1259 | 1240 | case 0x67: |
1260 | 1241 | /* INSLH */ |
1261 | - gen_byte_manipulation(helper_inslh, ra, rb, rc, islit, lit); | |
1242 | + gen_arith3_helper(helper_inslh, ra, rb, rc, islit, lit); | |
1262 | 1243 | break; |
1263 | 1244 | case 0x6A: |
1264 | 1245 | /* EXTLH */ |
... | ... | @@ -1266,11 +1247,11 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) |
1266 | 1247 | break; |
1267 | 1248 | case 0x72: |
1268 | 1249 | /* MSKQH */ |
1269 | - gen_byte_manipulation(helper_mskqh, ra, rb, rc, islit, lit); | |
1250 | + gen_arith3_helper(helper_mskqh, ra, rb, rc, islit, lit); | |
1270 | 1251 | break; |
1271 | 1252 | case 0x77: |
1272 | 1253 | /* INSQH */ |
1273 | - gen_byte_manipulation(helper_insqh, ra, rb, rc, islit, lit); | |
1254 | + gen_arith3_helper(helper_insqh, ra, rb, rc, islit, lit); | |
1274 | 1255 | break; |
1275 | 1256 | case 0x7A: |
1276 | 1257 | /* EXTQH */ |
... | ... | @@ -1309,15 +1290,15 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) |
1309 | 1290 | break; |
1310 | 1291 | case 0x30: |
1311 | 1292 | /* UMULH */ |
1312 | - gen_arith3(ctx, &gen_op_umulh, ra, rb, rc, islit, lit); | |
1293 | + gen_arith3_helper(helper_umulh, ra, rb, rc, islit, lit); | |
1313 | 1294 | break; |
1314 | 1295 | case 0x40: |
1315 | 1296 | /* MULL/V */ |
1316 | - gen_arith3(ctx, &gen_op_mullv, ra, rb, rc, islit, lit); | |
1297 | + gen_arith3_helper(helper_mullv, ra, rb, rc, islit, lit); | |
1317 | 1298 | break; |
1318 | 1299 | case 0x60: |
1319 | 1300 | /* MULQ/V */ |
1320 | - gen_arith3(ctx, &gen_op_mulqv, ra, rb, rc, islit, lit); | |
1301 | + gen_arith3_helper(helper_mulqv, ra, rb, rc, islit, lit); | |
1321 | 1302 | break; |
1322 | 1303 | default: |
1323 | 1304 | goto invalid_opc; | ... | ... |