Commit a7812ae412311d7d47f8aa85656faadac9d64b56

Authored by pbrook
1 parent 30913bae

TCG variable type checking.

Signed-off-by: Paul Brook <paul@codesourcery.com>


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5729 c046a42c-6fe2-441c-8c8c-71466251a162

Too many changes to show.

To preserve performance only 16 of 37 files are displayed.

cpu-exec.c
@@ -345,7 +345,7 @@ int cpu_exec(CPUState *env1) @@ -345,7 +345,7 @@ int cpu_exec(CPUState *env1)
345 #ifdef USE_KQEMU 345 #ifdef USE_KQEMU
346 if (kqemu_is_ok(env) && env->interrupt_request == 0) { 346 if (kqemu_is_ok(env) && env->interrupt_request == 0) {
347 int ret; 347 int ret;
348 - env->eflags = env->eflags | cc_table[CC_OP].compute_all() | (DF & DF_MASK); 348 + env->eflags = env->eflags | helper_cc_compute_all(CC_OP) | (DF & DF_MASK);
349 ret = kqemu_cpu_exec(env); 349 ret = kqemu_cpu_exec(env);
350 /* put eflags in CPU temporary format */ 350 /* put eflags in CPU temporary format */
351 CC_SRC = env->eflags & (CC_O | CC_S | CC_Z | CC_A | CC_P | CC_C); 351 CC_SRC = env->eflags & (CC_O | CC_S | CC_Z | CC_A | CC_P | CC_C);
@@ -571,7 +571,7 @@ int cpu_exec(CPUState *env1) @@ -571,7 +571,7 @@ int cpu_exec(CPUState *env1)
571 /* restore flags in standard format */ 571 /* restore flags in standard format */
572 regs_to_env(); 572 regs_to_env();
573 #if defined(TARGET_I386) 573 #if defined(TARGET_I386)
574 - env->eflags = env->eflags | cc_table[CC_OP].compute_all() | (DF & DF_MASK); 574 + env->eflags = env->eflags | helper_cc_compute_all(CC_OP) | (DF & DF_MASK);
575 cpu_dump_state(env, logfile, fprintf, X86_DUMP_CCOP); 575 cpu_dump_state(env, logfile, fprintf, X86_DUMP_CCOP);
576 env->eflags &= ~(DF_MASK | CC_O | CC_S | CC_Z | CC_A | CC_P | CC_C); 576 env->eflags &= ~(DF_MASK | CC_O | CC_S | CC_Z | CC_A | CC_P | CC_C);
577 #elif defined(TARGET_ARM) 577 #elif defined(TARGET_ARM)
@@ -695,7 +695,7 @@ int cpu_exec(CPUState *env1) @@ -695,7 +695,7 @@ int cpu_exec(CPUState *env1)
695 695
696 #if defined(TARGET_I386) 696 #if defined(TARGET_I386)
697 /* restore flags in standard format */ 697 /* restore flags in standard format */
698 - env->eflags = env->eflags | cc_table[CC_OP].compute_all() | (DF & DF_MASK); 698 + env->eflags = env->eflags | helper_cc_compute_all(CC_OP) | (DF & DF_MASK);
699 #elif defined(TARGET_ARM) 699 #elif defined(TARGET_ARM)
700 /* XXX: Save/restore host fpu exception state?. */ 700 /* XXX: Save/restore host fpu exception state?. */
701 #elif defined(TARGET_SPARC) 701 #elif defined(TARGET_SPARC)
def-helper.h 0 → 100644
  1 +/* Helper file for declaring TCG helper functions.
  2 + Should be included at the start and end of target-foo/helper.h.
  3 +
  4 + Targets should use DEF_HELPER_N and DEF_HELPER_FLAGS_N to declare helper
  5 + functions. Names should be specified without the helper_ prefix, and
  6 + the return and argument types specified. 3 basic types are understood
  7 + (i32, i64 and ptr). Additional aliases are provided for convenience and
  8 + to match the types used by the C helper implementation.
  9 +
  10 + The target helper.h should be included in all files that use/define
  11 + helper functions. THis will ensure that function prototypes are
  12 + consistent. In addition it should be included an extra two times for
  13 + helper.c, defining:
  14 + GEN_HELPER 1 to produce op generation functions (gen_helper_*)
  15 + GEN_HELPER 2 to do runtime registration helper functions.
  16 + */
  17 +
  18 +#ifndef DEF_HELPER_H
  19 +#define DEF_HELPER_H 1
  20 +
  21 +#define HELPER(name) glue(helper_, name)
  22 +
  23 +#define GET_TCGV_i32 GET_TCGV_I32
  24 +#define GET_TCGV_i64 GET_TCGV_I64
  25 +#define GET_TCGV_ptr GET_TCGV_PTR
  26 +
  27 +/* Some types that make sense in C, but not for TCG. */
  28 +#define dh_alias_i32 i32
  29 +#define dh_alias_s32 i32
  30 +#define dh_alias_int i32
  31 +#define dh_alias_i64 i64
  32 +#define dh_alias_s64 i64
  33 +#define dh_alias_f32 i32
  34 +#define dh_alias_f64 i64
  35 +#if TARGET_LONG_BITS == 32
  36 +#define dh_alias_tl i32
  37 +#else
  38 +#define dh_alias_tl i64
  39 +#endif
  40 +#define dh_alias_ptr ptr
  41 +#define dh_alias_void void
  42 +#define dh_alias_env ptr
  43 +#define dh_alias(t) glue(dh_alias_, t)
  44 +
  45 +#define dh_ctype_i32 uint32_t
  46 +#define dh_ctype_s32 int32_t
  47 +#define dh_ctype_int int
  48 +#define dh_ctype_i64 uint64_t
  49 +#define dh_ctype_s64 int64_t
  50 +#define dh_ctype_f32 float32
  51 +#define dh_ctype_f64 float64
  52 +#define dh_ctype_tl target_ulong
  53 +#define dh_ctype_ptr void *
  54 +#define dh_ctype_void void
  55 +#define dh_ctype_env CPUState *
  56 +#define dh_ctype(t) dh_ctype_##t
  57 +
  58 +/* We can't use glue() here because it falls foul of C preprocessor
  59 + recursive expansion rules. */
  60 +#define dh_retvar_decl0_void void
  61 +#define dh_retvar_decl0_i32 TCGv_i32 retval
  62 +#define dh_retvar_decl0_i64 TCGv_i64 retval
  63 +#define dh_retvar_decl0_ptr TCGv_iptr retval
  64 +#define dh_retvar_decl0(t) glue(dh_retvar_decl0_, dh_alias(t))
  65 +
  66 +#define dh_retvar_decl_void
  67 +#define dh_retvar_decl_i32 TCGv_i32 retval,
  68 +#define dh_retvar_decl_i64 TCGv_i64 retval,
  69 +#define dh_retvar_decl_ptr TCGv_iptr retval,
  70 +#define dh_retvar_decl(t) glue(dh_retvar_decl_, dh_alias(t))
  71 +
  72 +#define dh_retvar_void TCG_CALL_DUMMY_ARG
  73 +#define dh_retvar_i32 GET_TCGV_i32(retval)
  74 +#define dh_retvar_i64 GET_TCGV_i64(retval)
  75 +#define dh_retvar_ptr GET_TCGV_ptr(retval)
  76 +#define dh_retvar(t) glue(dh_retvar_, dh_alias(t))
  77 +
  78 +#define dh_is_64bit_void 0
  79 +#define dh_is_64bit_i32 0
  80 +#define dh_is_64bit_i64 1
  81 +#define dh_is_64bit_ptr (TCG_TARGET_REG_BITS == 64)
  82 +#define dh_is_64bit(t) glue(dh_is_64bit_, dh_alias(t))
  83 +
  84 +#define dh_arg(t, n) \
  85 + args[n - 1] = glue(GET_TCGV_, dh_alias(t))(glue(arg, n)); \
  86 + sizemask |= dh_is_64bit(t) << n
  87 +
  88 +#define dh_arg_decl(t, n) glue(TCGv_, dh_alias(t)) glue(arg, n)
  89 +
  90 +
  91 +#define DEF_HELPER_0(name, ret) \
  92 + DEF_HELPER_FLAGS_0(name, 0, ret)
  93 +#define DEF_HELPER_1(name, ret, t1) \
  94 + DEF_HELPER_FLAGS_1(name, 0, ret, t1)
  95 +#define DEF_HELPER_2(name, ret, t1, t2) \
  96 + DEF_HELPER_FLAGS_2(name, 0, ret, t1, t2)
  97 +#define DEF_HELPER_3(name, ret, t1, t2, t3) \
  98 + DEF_HELPER_FLAGS_3(name, 0, ret, t1, t2, t3)
  99 +#define DEF_HELPER_4(name, ret, t1, t2, t3, t4) \
  100 + DEF_HELPER_FLAGS_4(name, 0, ret, t1, t2, t3, t4)
  101 +
  102 +#endif /* DEF_HELPER_H */
  103 +
  104 +#ifndef GEN_HELPER
  105 +/* Function prototypes. */
  106 +
  107 +#define DEF_HELPER_FLAGS_0(name, flags, ret) \
  108 +dh_ctype(ret) HELPER(name) (void);
  109 +
  110 +#define DEF_HELPER_FLAGS_1(name, flags, ret, t1) \
  111 +dh_ctype(ret) HELPER(name) (dh_ctype(t1));
  112 +
  113 +#define DEF_HELPER_FLAGS_2(name, flags, ret, t1, t2) \
  114 +dh_ctype(ret) HELPER(name) (dh_ctype(t1), dh_ctype(t2));
  115 +
  116 +#define DEF_HELPER_FLAGS_3(name, flags, ret, t1, t2, t3) \
  117 +dh_ctype(ret) HELPER(name) (dh_ctype(t1), dh_ctype(t2), dh_ctype(t3));
  118 +
  119 +#define DEF_HELPER_FLAGS_4(name, flags, ret, t1, t2, t3, t4) \
  120 +dh_ctype(ret) HELPER(name) (dh_ctype(t1), dh_ctype(t2), dh_ctype(t3), \
  121 + dh_ctype(t4));
  122 +
  123 +#undef GEN_HELPER
  124 +#define GEN_HELPER -1
  125 +
  126 +#elif GEN_HELPER == 1
  127 +/* Gen functions. */
  128 +
  129 +#define DEF_HELPER_FLAGS_0(name, flags, ret) \
  130 +static inline void glue(gen_helper_, name)(dh_retvar_decl0(ret)) \
  131 +{ \
  132 + int sizemask; \
  133 + sizemask = dh_is_64bit(ret); \
  134 + tcg_gen_helperN(HELPER(name), flags, sizemask, dh_retvar(ret), 0, NULL); \
  135 +}
  136 +
  137 +#define DEF_HELPER_FLAGS_1(name, flags, ret, t1) \
  138 +static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) dh_arg_decl(t1, 1)) \
  139 +{ \
  140 + TCGArg args[1]; \
  141 + int sizemask; \
  142 + sizemask = dh_is_64bit(ret); \
  143 + dh_arg(t1, 1); \
  144 + tcg_gen_helperN(HELPER(name), flags, sizemask, dh_retvar(ret), 1, args); \
  145 +}
  146 +
  147 +#define DEF_HELPER_FLAGS_2(name, flags, ret, t1, t2) \
  148 +static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) dh_arg_decl(t1, 1), \
  149 + dh_arg_decl(t2, 2)) \
  150 +{ \
  151 + TCGArg args[2]; \
  152 + int sizemask; \
  153 + sizemask = dh_is_64bit(ret); \
  154 + dh_arg(t1, 1); \
  155 + dh_arg(t2, 2); \
  156 + tcg_gen_helperN(HELPER(name), flags, sizemask, dh_retvar(ret), 2, args); \
  157 +}
  158 +
  159 +#define DEF_HELPER_FLAGS_3(name, flags, ret, t1, t2, t3) \
  160 +static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) dh_arg_decl(t1, 1), \
  161 + dh_arg_decl(t2, 2), dh_arg_decl(t3, 3)) \
  162 +{ \
  163 + TCGArg args[3]; \
  164 + int sizemask; \
  165 + sizemask = dh_is_64bit(ret); \
  166 + dh_arg(t1, 1); \
  167 + dh_arg(t2, 2); \
  168 + dh_arg(t3, 3); \
  169 + tcg_gen_helperN(HELPER(name), flags, sizemask, dh_retvar(ret), 3, args); \
  170 +}
  171 +
  172 +#define DEF_HELPER_FLAGS_4(name, flags, ret, t1, t2, t3, t4) \
  173 +static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) dh_arg_decl(t1, 1), \
  174 + dh_arg_decl(t2, 2), dh_arg_decl(t3, 3), dh_arg_decl(t4, 4)) \
  175 +{ \
  176 + TCGArg args[4]; \
  177 + int sizemask; \
  178 + sizemask = dh_is_64bit(ret); \
  179 + dh_arg(t1, 1); \
  180 + dh_arg(t2, 2); \
  181 + dh_arg(t3, 3); \
  182 + dh_arg(t4, 4); \
  183 + tcg_gen_helperN(HELPER(name), flags, sizemask, dh_retvar(ret), 4, args); \
  184 +}
  185 +
  186 +#undef GEN_HELPER
  187 +#define GEN_HELPER -1
  188 +
  189 +#elif GEN_HELPER == 2
  190 +/* Register helpers. */
  191 +
  192 +#define DEF_HELPER_FLAGS_0(name, flags, ret) \
  193 +tcg_register_helper(HELPER(name), #name);
  194 +
  195 +#define DEF_HELPER_FLAGS_1(name, flags, ret, t1) \
  196 +DEF_HELPER_FLAGS_0(name, flags, ret)
  197 +
  198 +#define DEF_HELPER_FLAGS_2(name, flags, ret, t1, t2) \
  199 +DEF_HELPER_FLAGS_0(name, flags, ret)
  200 +
  201 +#define DEF_HELPER_FLAGS_3(name, flags, ret, t1, t2, t3) \
  202 +DEF_HELPER_FLAGS_0(name, flags, ret)
  203 +
  204 +#define DEF_HELPER_FLAGS_4(name, flags, ret, t1, t2, t3, t4) \
  205 +DEF_HELPER_FLAGS_0(name, flags, ret)
  206 +
  207 +#undef GEN_HELPER
  208 +#define GEN_HELPER -1
  209 +
  210 +#elif GEN_HELPER == -1
  211 +/* Undefine macros. */
  212 +
  213 +#undef DEF_HELPER_FLAGS_0
  214 +#undef DEF_HELPER_FLAGS_1
  215 +#undef DEF_HELPER_FLAGS_2
  216 +#undef DEF_HELPER_FLAGS_3
  217 +#undef DEF_HELPER_FLAGS_4
  218 +#undef GEN_HELPER
  219 +
  220 +#endif
  221 +
gen-icount.h
@@ -5,7 +5,7 @@ static int icount_label; @@ -5,7 +5,7 @@ static int icount_label;
5 5
6 static inline void gen_icount_start(void) 6 static inline void gen_icount_start(void)
7 { 7 {
8 - TCGv count; 8 + TCGv_i32 count;
9 9
10 if (!use_icount) 10 if (!use_icount)
11 return; 11 return;
@@ -15,7 +15,7 @@ static inline void gen_icount_start(void) @@ -15,7 +15,7 @@ static inline void gen_icount_start(void)
15 count needs to live over the conditional branch. To workaround this 15 count needs to live over the conditional branch. To workaround this
16 we allow the target to supply a convenient register temporary. */ 16 we allow the target to supply a convenient register temporary. */
17 #ifndef ICOUNT_TEMP 17 #ifndef ICOUNT_TEMP
18 - count = tcg_temp_local_new(TCG_TYPE_I32); 18 + count = tcg_temp_local_new_i32();
19 #else 19 #else
20 count = ICOUNT_TEMP; 20 count = ICOUNT_TEMP;
21 #endif 21 #endif
@@ -27,7 +27,7 @@ static inline void gen_icount_start(void) @@ -27,7 +27,7 @@ static inline void gen_icount_start(void)
27 tcg_gen_brcondi_i32(TCG_COND_LT, count, 0, icount_label); 27 tcg_gen_brcondi_i32(TCG_COND_LT, count, 0, icount_label);
28 tcg_gen_st16_i32(count, cpu_env, offsetof(CPUState, icount_decr.u16.low)); 28 tcg_gen_st16_i32(count, cpu_env, offsetof(CPUState, icount_decr.u16.low));
29 #ifndef ICOUNT_TEMP 29 #ifndef ICOUNT_TEMP
30 - tcg_temp_free(count); 30 + tcg_temp_free_i32(count);
31 #endif 31 #endif
32 } 32 }
33 33
@@ -42,15 +42,15 @@ static void gen_icount_end(TranslationBlock *tb, int num_insns) @@ -42,15 +42,15 @@ static void gen_icount_end(TranslationBlock *tb, int num_insns)
42 42
43 static void inline gen_io_start(void) 43 static void inline gen_io_start(void)
44 { 44 {
45 - TCGv tmp = tcg_const_i32(1); 45 + TCGv_i32 tmp = tcg_const_i32(1);
46 tcg_gen_st_i32(tmp, cpu_env, offsetof(CPUState, can_do_io)); 46 tcg_gen_st_i32(tmp, cpu_env, offsetof(CPUState, can_do_io));
47 - tcg_temp_free(tmp); 47 + tcg_temp_free_i32(tmp);
48 } 48 }
49 49
50 static inline void gen_io_end(void) 50 static inline void gen_io_end(void)
51 { 51 {
52 - TCGv tmp = tcg_const_i32(0); 52 + TCGv_i32 tmp = tcg_const_i32(0);
53 tcg_gen_st_i32(tmp, cpu_env, offsetof(CPUState, can_do_io)); 53 tcg_gen_st_i32(tmp, cpu_env, offsetof(CPUState, can_do_io));
54 - tcg_temp_free(tmp); 54 + tcg_temp_free_i32(tmp);
55 } 55 }
56 56
target-alpha/helper.h
1 -#ifndef DEF_HELPER  
2 -#define DEF_HELPER(ret, name, params) ret name params;  
3 -#endif  
4 -  
5 -DEF_HELPER(void, helper_tb_flush, (void))  
6 -  
7 -DEF_HELPER(void, helper_excp, (int, int))  
8 -DEF_HELPER(uint64_t, helper_amask, (uint64_t))  
9 -DEF_HELPER(uint64_t, helper_load_pcc, (void))  
10 -DEF_HELPER(uint64_t, helper_load_implver, (void))  
11 -DEF_HELPER(uint64_t, helper_rc, (void))  
12 -DEF_HELPER(uint64_t, helper_rs, (void))  
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 -  
22 -DEF_HELPER(uint64_t, helper_ctpop, (uint64_t))  
23 -DEF_HELPER(uint64_t, helper_ctlz, (uint64_t))  
24 -DEF_HELPER(uint64_t, helper_cttz, (uint64_t))  
25 -  
26 -DEF_HELPER(uint64_t, helper_mskbl, (int64_t, uint64_t))  
27 -DEF_HELPER(uint64_t, helper_insbl, (int64_t, uint64_t))  
28 -DEF_HELPER(uint64_t, helper_mskwl, (int64_t, uint64_t))  
29 -DEF_HELPER(uint64_t, helper_inswl, (int64_t, uint64_t))  
30 -DEF_HELPER(uint64_t, helper_mskll, (int64_t, uint64_t))  
31 -DEF_HELPER(uint64_t, helper_insll, (int64_t, uint64_t))  
32 -DEF_HELPER(uint64_t, helper_zap, (int64_t, uint64_t))  
33 -DEF_HELPER(uint64_t, helper_zapnot, (int64_t, uint64_t))  
34 -DEF_HELPER(uint64_t, helper_mskql, (int64_t, uint64_t))  
35 -DEF_HELPER(uint64_t, helper_insql, (int64_t, uint64_t))  
36 -DEF_HELPER(uint64_t, helper_mskwh, (int64_t, uint64_t))  
37 -DEF_HELPER(uint64_t, helper_inswh, (int64_t, uint64_t))  
38 -DEF_HELPER(uint64_t, helper_msklh, (int64_t, uint64_t))  
39 -DEF_HELPER(uint64_t, helper_inslh, (int64_t, uint64_t))  
40 -DEF_HELPER(uint64_t, helper_mskqh, (int64_t, uint64_t))  
41 -DEF_HELPER(uint64_t, helper_insqh, (int64_t, uint64_t))  
42 -  
43 -DEF_HELPER(uint64_t, helper_cmpbge, (uint64_t, uint64_t))  
44 -  
45 -DEF_HELPER(uint64_t, helper_load_fpcr, (void))  
46 -DEF_HELPER(void, helper_store_fpcr, (uint64_t val))  
47 -  
48 -DEF_HELPER(uint32_t, helper_f_to_memory, (uint64_t s))  
49 -DEF_HELPER(uint64_t, helper_memory_to_f, (uint32_t s))  
50 -DEF_HELPER(uint64_t, helper_addf, (uint64_t, uint64_t))  
51 -DEF_HELPER(uint64_t, helper_subf, (uint64_t, uint64_t))  
52 -DEF_HELPER(uint64_t, helper_mulf, (uint64_t, uint64_t))  
53 -DEF_HELPER(uint64_t, helper_divf, (uint64_t, uint64_t))  
54 -DEF_HELPER(uint64_t, helper_sqrtf, (uint64_t))  
55 -  
56 -DEF_HELPER(uint64_t, helper_g_to_memory, (uint64_t s))  
57 -DEF_HELPER(uint64_t, helper_memory_to_g, (uint64_t s))  
58 -DEF_HELPER(uint64_t, helper_addg, (uint64_t, uint64_t))  
59 -DEF_HELPER(uint64_t, helper_subg, (uint64_t, uint64_t))  
60 -DEF_HELPER(uint64_t, helper_mulg, (uint64_t, uint64_t))  
61 -DEF_HELPER(uint64_t, helper_divg, (uint64_t, uint64_t))  
62 -DEF_HELPER(uint64_t, helper_sqrtg, (uint64_t))  
63 -  
64 -DEF_HELPER(uint32_t, helper_s_to_memory, (uint64_t s))  
65 -DEF_HELPER(uint64_t, helper_memory_to_s, (uint32_t s))  
66 -DEF_HELPER(uint64_t, helper_adds, (uint64_t, uint64_t))  
67 -DEF_HELPER(uint64_t, helper_subs, (uint64_t, uint64_t))  
68 -DEF_HELPER(uint64_t, helper_muls, (uint64_t, uint64_t))  
69 -DEF_HELPER(uint64_t, helper_divs, (uint64_t, uint64_t))  
70 -DEF_HELPER(uint64_t, helper_sqrts, (uint64_t))  
71 -  
72 -DEF_HELPER(uint64_t, helper_addt, (uint64_t, uint64_t))  
73 -DEF_HELPER(uint64_t, helper_subt, (uint64_t, uint64_t))  
74 -DEF_HELPER(uint64_t, helper_mult, (uint64_t, uint64_t))  
75 -DEF_HELPER(uint64_t, helper_divt, (uint64_t, uint64_t))  
76 -DEF_HELPER(uint64_t, helper_sqrtt, (uint64_t))  
77 -  
78 -DEF_HELPER(uint64_t, helper_cmptun, (uint64_t, uint64_t))  
79 -DEF_HELPER(uint64_t, helper_cmpteq, (uint64_t, uint64_t))  
80 -DEF_HELPER(uint64_t, helper_cmptle, (uint64_t, uint64_t))  
81 -DEF_HELPER(uint64_t, helper_cmptlt, (uint64_t, uint64_t))  
82 -DEF_HELPER(uint64_t, helper_cmpgeq, (uint64_t, uint64_t))  
83 -DEF_HELPER(uint64_t, helper_cmpgle, (uint64_t, uint64_t))  
84 -DEF_HELPER(uint64_t, helper_cmpglt, (uint64_t, uint64_t))  
85 -  
86 -DEF_HELPER(uint64_t, helper_cmpfeq, (uint64_t))  
87 -DEF_HELPER(uint64_t, helper_cmpfne, (uint64_t))  
88 -DEF_HELPER(uint64_t, helper_cmpflt, (uint64_t))  
89 -DEF_HELPER(uint64_t, helper_cmpfle, (uint64_t))  
90 -DEF_HELPER(uint64_t, helper_cmpfgt, (uint64_t))  
91 -DEF_HELPER(uint64_t, helper_cmpfge, (uint64_t))  
92 -  
93 -DEF_HELPER(uint64_t, helper_cpys, (uint64_t, uint64_t))  
94 -DEF_HELPER(uint64_t, helper_cpysn, (uint64_t, uint64_t))  
95 -DEF_HELPER(uint64_t, helper_cpyse, (uint64_t, uint64_t))  
96 -  
97 -DEF_HELPER(uint64_t, helper_cvtts, (uint64_t))  
98 -DEF_HELPER(uint64_t, helper_cvtst, (uint64_t))  
99 -DEF_HELPER(uint64_t, helper_cvttq, (uint64_t))  
100 -DEF_HELPER(uint32_t, helper_cvtqs, (uint64_t))  
101 -DEF_HELPER(uint64_t, helper_cvtqt, (uint64_t))  
102 -DEF_HELPER(uint64_t, helper_cvtqf, (uint64_t))  
103 -DEF_HELPER(uint64_t, helper_cvtgf, (uint64_t))  
104 -DEF_HELPER(uint64_t, helper_cvtgq, (uint64_t))  
105 -DEF_HELPER(uint64_t, helper_cvtqg, (uint64_t))  
106 -DEF_HELPER(uint64_t, helper_cvtlq, (uint64_t))  
107 -DEF_HELPER(uint64_t, helper_cvtql, (uint64_t))  
108 -DEF_HELPER(uint64_t, helper_cvtqlv, (uint64_t))  
109 -DEF_HELPER(uint64_t, helper_cvtqlsv, (uint64_t)) 1 +#include "def-helper.h"
  2 +
  3 +DEF_HELPER_0(tb_flush, void)
  4 +
  5 +DEF_HELPER_2(excp, void, int, int)
  6 +DEF_HELPER_1(amask, i64, i64)
  7 +DEF_HELPER_0(load_pcc, i64)
  8 +DEF_HELPER_0(load_implver, i64)
  9 +DEF_HELPER_0(rc, i64)
  10 +DEF_HELPER_0(rs, i64)
  11 +
  12 +DEF_HELPER_2(addqv, i64, i64, i64)
  13 +DEF_HELPER_2(addlv, i64, i64, i64)
  14 +DEF_HELPER_2(subqv, i64, i64, i64)
  15 +DEF_HELPER_2(sublv, i64, i64, i64)
  16 +DEF_HELPER_2(mullv, i64, i64, i64)
  17 +DEF_HELPER_2(mulqv, i64, i64, i64)
  18 +DEF_HELPER_2(umulh, i64, i64, i64)
  19 +
  20 +DEF_HELPER_1(ctpop, i64, i64)
  21 +DEF_HELPER_1(ctlz, i64, i64)
  22 +DEF_HELPER_1(cttz, i64, i64)
  23 +
  24 +DEF_HELPER_2(mskbl, i64, i64, i64)
  25 +DEF_HELPER_2(insbl, i64, i64, i64)
  26 +DEF_HELPER_2(mskwl, i64, i64, i64)
  27 +DEF_HELPER_2(inswl, i64, i64, i64)
  28 +DEF_HELPER_2(mskll, i64, i64, i64)
  29 +DEF_HELPER_2(insll, i64, i64, i64)
  30 +DEF_HELPER_2(zap, i64, i64, i64)
  31 +DEF_HELPER_2(zapnot, i64, i64, i64)
  32 +DEF_HELPER_2(mskql, i64, i64, i64)
  33 +DEF_HELPER_2(insql, i64, i64, i64)
  34 +DEF_HELPER_2(mskwh, i64, i64, i64)
  35 +DEF_HELPER_2(inswh, i64, i64, i64)
  36 +DEF_HELPER_2(msklh, i64, i64, i64)
  37 +DEF_HELPER_2(inslh, i64, i64, i64)
  38 +DEF_HELPER_2(mskqh, i64, i64, i64)
  39 +DEF_HELPER_2(insqh, i64, i64, i64)
  40 +
  41 +DEF_HELPER_2(cmpbge, i64, i64, i64)
  42 +
  43 +DEF_HELPER_0(load_fpcr, i64)
  44 +DEF_HELPER_1(store_fpcr, void, i64)
  45 +
  46 +DEF_HELPER_1(f_to_memory, i32, i64)
  47 +DEF_HELPER_1(memory_to_f, i64, i32)
  48 +DEF_HELPER_2(addf, i64, i64, i64)
  49 +DEF_HELPER_2(subf, i64, i64, i64)
  50 +DEF_HELPER_2(mulf, i64, i64, i64)
  51 +DEF_HELPER_2(divf, i64, i64, i64)
  52 +DEF_HELPER_1(sqrtf, i64, i64)
  53 +
  54 +DEF_HELPER_1(g_to_memory, i64, i64)
  55 +DEF_HELPER_1(memory_to_g, i64, i64)
  56 +DEF_HELPER_2(addg, i64, i64, i64)
  57 +DEF_HELPER_2(subg, i64, i64, i64)
  58 +DEF_HELPER_2(mulg, i64, i64, i64)
  59 +DEF_HELPER_2(divg, i64, i64, i64)
  60 +DEF_HELPER_1(sqrtg, i64, i64)
  61 +
  62 +DEF_HELPER_1(s_to_memory, i32, i64)
  63 +DEF_HELPER_1(memory_to_s, i64, i32)
  64 +DEF_HELPER_2(adds, i64, i64, i64)
  65 +DEF_HELPER_2(subs, i64, i64, i64)
  66 +DEF_HELPER_2(muls, i64, i64, i64)
  67 +DEF_HELPER_2(divs, i64, i64, i64)
  68 +DEF_HELPER_1(sqrts, i64, i64)
  69 +
  70 +DEF_HELPER_2(addt, i64, i64, i64)
  71 +DEF_HELPER_2(subt, i64, i64, i64)
  72 +DEF_HELPER_2(mult, i64, i64, i64)
  73 +DEF_HELPER_2(divt, i64, i64, i64)
  74 +DEF_HELPER_1(sqrtt, i64, i64)
  75 +
  76 +DEF_HELPER_2(cmptun, i64, i64, i64)
  77 +DEF_HELPER_2(cmpteq, i64, i64, i64)
  78 +DEF_HELPER_2(cmptle, i64, i64, i64)
  79 +DEF_HELPER_2(cmptlt, i64, i64, i64)
  80 +DEF_HELPER_2(cmpgeq, i64, i64, i64)
  81 +DEF_HELPER_2(cmpgle, i64, i64, i64)
  82 +DEF_HELPER_2(cmpglt, i64, i64, i64)
  83 +
  84 +DEF_HELPER_1(cmpfeq, i64, i64)
  85 +DEF_HELPER_1(cmpfne, i64, i64)
  86 +DEF_HELPER_1(cmpflt, i64, i64)
  87 +DEF_HELPER_1(cmpfle, i64, i64)
  88 +DEF_HELPER_1(cmpfgt, i64, i64)
  89 +DEF_HELPER_1(cmpfge, i64, i64)
  90 +
  91 +DEF_HELPER_2(cpys, i64, i64, i64)
  92 +DEF_HELPER_2(cpysn, i64, i64, i64)
  93 +DEF_HELPER_2(cpyse, i64, i64, i64)
  94 +
  95 +DEF_HELPER_1(cvtts, i64, i64)
  96 +DEF_HELPER_1(cvtst, i64, i64)
  97 +DEF_HELPER_1(cvttq, i64, i64)
  98 +DEF_HELPER_1(cvtqs, i64, i64)
  99 +DEF_HELPER_1(cvtqt, i64, i64)
  100 +DEF_HELPER_1(cvtqf, i64, i64)
  101 +DEF_HELPER_1(cvtgf, i64, i64)
  102 +DEF_HELPER_1(cvtgq, i64, i64)
  103 +DEF_HELPER_1(cvtqg, i64, i64)
  104 +DEF_HELPER_1(cvtlq, i64, i64)
  105 +DEF_HELPER_1(cvtql, i64, i64)
  106 +DEF_HELPER_1(cvtqlv, i64, i64)
  107 +DEF_HELPER_1(cvtqlsv, i64, i64)
110 108
111 #if !defined (CONFIG_USER_ONLY) 109 #if !defined (CONFIG_USER_ONLY)
112 -DEF_HELPER(void, helper_hw_rei, (void))  
113 -DEF_HELPER(void, helper_hw_ret, (uint64_t))  
114 -DEF_HELPER(uint64_t, helper_mfpr, (int, uint64_t))  
115 -DEF_HELPER(void, helper_mtpr, (int, uint64_t))  
116 -DEF_HELPER(void, helper_set_alt_mode, (void))  
117 -DEF_HELPER(void, helper_restore_mode, (void))  
118 -  
119 -DEF_HELPER(uint64_t, helper_ld_virt_to_phys, (uint64_t))  
120 -DEF_HELPER(uint64_t, helper_st_virt_to_phys, (uint64_t))  
121 -DEF_HELPER(void, helper_ldl_raw, (uint64_t, uint64_t))  
122 -DEF_HELPER(void, helper_ldq_raw, (uint64_t, uint64_t))  
123 -DEF_HELPER(void, helper_ldl_l_raw, (uint64_t, uint64_t))  
124 -DEF_HELPER(void, helper_ldq_l_raw, (uint64_t, uint64_t))  
125 -DEF_HELPER(void, helper_ldl_kernel, (uint64_t, uint64_t))  
126 -DEF_HELPER(void, helper_ldq_kernel, (uint64_t, uint64_t))  
127 -DEF_HELPER(void, helper_ldl_data, (uint64_t, uint64_t))  
128 -DEF_HELPER(void, helper_ldq_data, (uint64_t, uint64_t))  
129 -DEF_HELPER(void, helper_stl_raw, (uint64_t, uint64_t))  
130 -DEF_HELPER(void, helper_stq_raw, (uint64_t, uint64_t))  
131 -DEF_HELPER(uint64_t, helper_stl_c_raw, (uint64_t, uint64_t))  
132 -DEF_HELPER(uint64_t, helper_stq_c_raw, (uint64_t, uint64_t)) 110 +DEF_HELPER_0(hw_rei, void)
  111 +DEF_HELPER_1(hw_ret, void, i64)
  112 +DEF_HELPER_2(mfpr, i64, int, i64)
  113 +DEF_HELPER_2(mtpr, void, int, i64)
  114 +DEF_HELPER_0(set_alt_mode, void)
  115 +DEF_HELPER_0(restore_mode, void)
  116 +
  117 +DEF_HELPER_1(ld_virt_to_phys, i64, i64)
  118 +DEF_HELPER_1(st_virt_to_phys, i64, i64)
  119 +DEF_HELPER_2(ldl_raw, void, i64, i64)
  120 +DEF_HELPER_2(ldq_raw, void, i64, i64)
  121 +DEF_HELPER_2(ldl_l_raw, void, i64, i64)
  122 +DEF_HELPER_2(ldq_l_raw, void, i64, i64)
  123 +DEF_HELPER_2(ldl_kernel, void, i64, i64)
  124 +DEF_HELPER_2(ldq_kernel, void, i64, i64)
  125 +DEF_HELPER_2(ldl_data, void, i64, i64)
  126 +DEF_HELPER_2(ldq_data, void, i64, i64)
  127 +DEF_HELPER_2(stl_raw, void, i64, i64)
  128 +DEF_HELPER_2(stq_raw, void, i64, i64)
  129 +DEF_HELPER_2(stl_c_raw, i64, i64, i64)
  130 +DEF_HELPER_2(stq_c_raw, i64, i64, i64)
133 #endif 131 #endif
  132 +
  133 +#include "def-helper.h"
target-alpha/op_helper.c
@@ -21,6 +21,7 @@ @@ -21,6 +21,7 @@
21 #include "exec.h" 21 #include "exec.h"
22 #include "host-utils.h" 22 #include "host-utils.h"
23 #include "softfloat.h" 23 #include "softfloat.h"
  24 +#include "helper.h"
24 25
25 void helper_tb_flush (void) 26 void helper_tb_flush (void)
26 { 27 {
target-alpha/translate.c
@@ -26,10 +26,13 @@ @@ -26,10 +26,13 @@
26 #include "exec-all.h" 26 #include "exec-all.h"
27 #include "disas.h" 27 #include "disas.h"
28 #include "host-utils.h" 28 #include "host-utils.h"
29 -#include "helper.h"  
30 #include "tcg-op.h" 29 #include "tcg-op.h"
31 #include "qemu-common.h" 30 #include "qemu-common.h"
32 31
  32 +#include "helper.h"
  33 +#define GEN_HELPER 1
  34 +#include "helper.h"
  35 +
33 /* #define DO_SINGLE_STEP */ 36 /* #define DO_SINGLE_STEP */
34 #define ALPHA_DEBUG_DISAS 37 #define ALPHA_DEBUG_DISAS
35 /* #define DO_TB_FLUSH */ 38 /* #define DO_TB_FLUSH */
@@ -45,7 +48,7 @@ struct DisasContext { @@ -45,7 +48,7 @@ struct DisasContext {
45 }; 48 };
46 49
47 /* global register indexes */ 50 /* global register indexes */
48 -static TCGv cpu_env; 51 +static TCGv_ptr cpu_env;
49 static TCGv cpu_ir[31]; 52 static TCGv cpu_ir[31];
50 static TCGv cpu_fir[31]; 53 static TCGv cpu_fir[31];
51 static TCGv cpu_pc; 54 static TCGv cpu_pc;
@@ -65,30 +68,29 @@ static void alpha_translate_init(void) @@ -65,30 +68,29 @@ static void alpha_translate_init(void)
65 if (done_init) 68 if (done_init)
66 return; 69 return;
67 70
68 - cpu_env = tcg_global_reg_new(TCG_TYPE_PTR, TCG_AREG0, "env"); 71 + cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
69 72
70 p = cpu_reg_names; 73 p = cpu_reg_names;
71 for (i = 0; i < 31; i++) { 74 for (i = 0; i < 31; i++) {
72 sprintf(p, "ir%d", i); 75 sprintf(p, "ir%d", i);
73 - cpu_ir[i] = tcg_global_mem_new(TCG_TYPE_I64, TCG_AREG0,  
74 - offsetof(CPUState, ir[i]), p); 76 + cpu_ir[i] = tcg_global_mem_new_i64(TCG_AREG0,
  77 + offsetof(CPUState, ir[i]), p);
75 p += (i < 10) ? 4 : 5; 78 p += (i < 10) ? 4 : 5;
76 79
77 sprintf(p, "fir%d", i); 80 sprintf(p, "fir%d", i);
78 - cpu_fir[i] = tcg_global_mem_new(TCG_TYPE_I64, TCG_AREG0,  
79 - offsetof(CPUState, fir[i]), p); 81 + cpu_fir[i] = tcg_global_mem_new_i64(TCG_AREG0,
  82 + offsetof(CPUState, fir[i]), p);
80 p += (i < 10) ? 5 : 6; 83 p += (i < 10) ? 5 : 6;
81 } 84 }
82 85
83 - cpu_pc = tcg_global_mem_new(TCG_TYPE_I64, TCG_AREG0,  
84 - offsetof(CPUState, pc), "pc"); 86 + cpu_pc = tcg_global_mem_new_i64(TCG_AREG0,
  87 + offsetof(CPUState, pc), "pc");
85 88
86 - cpu_lock = tcg_global_mem_new(TCG_TYPE_I64, TCG_AREG0,  
87 - offsetof(CPUState, lock), "lock"); 89 + cpu_lock = tcg_global_mem_new_i64(TCG_AREG0,
  90 + offsetof(CPUState, lock), "lock");
88 91
89 /* register helpers */ 92 /* register helpers */
90 -#undef DEF_HELPER  
91 -#define DEF_HELPER(ret, name, params) tcg_register_helper(name, #name); 93 +#define GEN_HELPER 2
92 #include "helper.h" 94 #include "helper.h"
93 95
94 done_init = 1; 96 done_init = 1;
@@ -97,14 +99,14 @@ static void alpha_translate_init(void) @@ -97,14 +99,14 @@ static void alpha_translate_init(void)
97 static always_inline void gen_excp (DisasContext *ctx, 99 static always_inline void gen_excp (DisasContext *ctx,
98 int exception, int error_code) 100 int exception, int error_code)
99 { 101 {
100 - TCGv tmp1, tmp2; 102 + TCGv_i32 tmp1, tmp2;
101 103
102 tcg_gen_movi_i64(cpu_pc, ctx->pc); 104 tcg_gen_movi_i64(cpu_pc, ctx->pc);
103 tmp1 = tcg_const_i32(exception); 105 tmp1 = tcg_const_i32(exception);
104 tmp2 = tcg_const_i32(error_code); 106 tmp2 = tcg_const_i32(error_code);
105 - tcg_gen_helper_0_2(helper_excp, tmp1, tmp2);  
106 - tcg_temp_free(tmp2);  
107 - tcg_temp_free(tmp1); 107 + gen_helper_excp(tmp1, tmp2);
  108 + tcg_temp_free_i32(tmp2);
  109 + tcg_temp_free_i32(tmp1);
108 } 110 }
109 111
110 static always_inline void gen_invalid (DisasContext *ctx) 112 static always_inline void gen_invalid (DisasContext *ctx)
@@ -114,25 +116,31 @@ static always_inline void gen_invalid (DisasContext *ctx) @@ -114,25 +116,31 @@ static always_inline void gen_invalid (DisasContext *ctx)
114 116
115 static always_inline void gen_qemu_ldf (TCGv t0, TCGv t1, int flags) 117 static always_inline void gen_qemu_ldf (TCGv t0, TCGv t1, int flags)
116 { 118 {
117 - TCGv tmp = tcg_temp_new(TCG_TYPE_I32); 119 + TCGv tmp = tcg_temp_new();
  120 + TCGv_i32 tmp32 = tcg_temp_new_i32();
118 tcg_gen_qemu_ld32u(tmp, t1, flags); 121 tcg_gen_qemu_ld32u(tmp, t1, flags);
119 - tcg_gen_helper_1_1(helper_memory_to_f, t0, tmp); 122 + tcg_gen_trunc_i64_i32(tmp32, tmp);
  123 + gen_helper_memory_to_f(t0, tmp32);
  124 + tcg_temp_free_i32(tmp32);
120 tcg_temp_free(tmp); 125 tcg_temp_free(tmp);
121 } 126 }
122 127
123 static always_inline void gen_qemu_ldg (TCGv t0, TCGv t1, int flags) 128 static always_inline void gen_qemu_ldg (TCGv t0, TCGv t1, int flags)
124 { 129 {
125 - TCGv tmp = tcg_temp_new(TCG_TYPE_I64); 130 + TCGv tmp = tcg_temp_new();
126 tcg_gen_qemu_ld64(tmp, t1, flags); 131 tcg_gen_qemu_ld64(tmp, t1, flags);
127 - tcg_gen_helper_1_1(helper_memory_to_g, t0, tmp); 132 + gen_helper_memory_to_g(t0, tmp);
128 tcg_temp_free(tmp); 133 tcg_temp_free(tmp);
129 } 134 }
130 135
131 static always_inline void gen_qemu_lds (TCGv t0, TCGv t1, int flags) 136 static always_inline void gen_qemu_lds (TCGv t0, TCGv t1, int flags)
132 { 137 {
133 - TCGv tmp = tcg_temp_new(TCG_TYPE_I32); 138 + TCGv tmp = tcg_temp_new();
  139 + TCGv_i32 tmp32 = tcg_temp_new_i32();
134 tcg_gen_qemu_ld32u(tmp, t1, flags); 140 tcg_gen_qemu_ld32u(tmp, t1, flags);
135 - tcg_gen_helper_1_1(helper_memory_to_s, t0, tmp); 141 + tcg_gen_trunc_i64_i32(tmp32, tmp);
  142 + gen_helper_memory_to_s(t0, tmp32);
  143 + tcg_temp_free_i32(tmp32);
136 tcg_temp_free(tmp); 144 tcg_temp_free(tmp);
137 } 145 }
138 146
@@ -158,7 +166,7 @@ static always_inline void gen_load_mem (DisasContext *ctx, @@ -158,7 +166,7 @@ static always_inline void gen_load_mem (DisasContext *ctx,
158 if (unlikely(ra == 31)) 166 if (unlikely(ra == 31))
159 return; 167 return;
160 168
161 - addr = tcg_temp_new(TCG_TYPE_I64); 169 + addr = tcg_temp_new();
162 if (rb != 31) { 170 if (rb != 31) {
163 tcg_gen_addi_i64(addr, cpu_ir[rb], disp16); 171 tcg_gen_addi_i64(addr, cpu_ir[rb], disp16);
164 if (clear) 172 if (clear)
@@ -177,26 +185,32 @@ static always_inline void gen_load_mem (DisasContext *ctx, @@ -177,26 +185,32 @@ static always_inline void gen_load_mem (DisasContext *ctx,
177 185
178 static always_inline void gen_qemu_stf (TCGv t0, TCGv t1, int flags) 186 static always_inline void gen_qemu_stf (TCGv t0, TCGv t1, int flags)
179 { 187 {
180 - TCGv tmp = tcg_temp_new(TCG_TYPE_I32);  
181 - tcg_gen_helper_1_1(helper_f_to_memory, tmp, t0); 188 + TCGv_i32 tmp32 = tcg_temp_new_i32();
  189 + TCGv tmp = tcg_temp_new();
  190 + gen_helper_f_to_memory(tmp32, t0);
  191 + tcg_gen_extu_i32_i64(tmp, tmp32);
182 tcg_gen_qemu_st32(tmp, t1, flags); 192 tcg_gen_qemu_st32(tmp, t1, flags);
183 tcg_temp_free(tmp); 193 tcg_temp_free(tmp);
  194 + tcg_temp_free_i32(tmp32);
184 } 195 }
185 196
186 static always_inline void gen_qemu_stg (TCGv t0, TCGv t1, int flags) 197 static always_inline void gen_qemu_stg (TCGv t0, TCGv t1, int flags)
187 { 198 {
188 - TCGv tmp = tcg_temp_new(TCG_TYPE_I64);  
189 - tcg_gen_helper_1_1(helper_g_to_memory, tmp, t0); 199 + TCGv tmp = tcg_temp_new();
  200 + gen_helper_g_to_memory(tmp, t0);
190 tcg_gen_qemu_st64(tmp, t1, flags); 201 tcg_gen_qemu_st64(tmp, t1, flags);
191 tcg_temp_free(tmp); 202 tcg_temp_free(tmp);
192 } 203 }
193 204
194 static always_inline void gen_qemu_sts (TCGv t0, TCGv t1, int flags) 205 static always_inline void gen_qemu_sts (TCGv t0, TCGv t1, int flags)
195 { 206 {
196 - TCGv tmp = tcg_temp_new(TCG_TYPE_I32);  
197 - tcg_gen_helper_1_1(helper_s_to_memory, tmp, t0); 207 + TCGv_i32 tmp32 = tcg_temp_new_i32();
  208 + TCGv tmp = tcg_temp_new();
  209 + gen_helper_s_to_memory(tmp32, t0);
  210 + tcg_gen_extu_i32_i64(tmp, tmp32);
198 tcg_gen_qemu_st32(tmp, t1, flags); 211 tcg_gen_qemu_st32(tmp, t1, flags);
199 tcg_temp_free(tmp); 212 tcg_temp_free(tmp);
  213 + tcg_temp_free_i32(tmp32);
200 } 214 }
201 215
202 static always_inline void gen_qemu_stl_c (TCGv t0, TCGv t1, int flags) 216 static always_inline void gen_qemu_stl_c (TCGv t0, TCGv t1, int flags)
@@ -238,9 +252,9 @@ static always_inline void gen_store_mem (DisasContext *ctx, @@ -238,9 +252,9 @@ static always_inline void gen_store_mem (DisasContext *ctx,
238 { 252 {
239 TCGv addr; 253 TCGv addr;
240 if (local) 254 if (local)
241 - addr = tcg_temp_local_new(TCG_TYPE_I64); 255 + addr = tcg_temp_local_new();
242 else 256 else
243 - addr = tcg_temp_new(TCG_TYPE_I64); 257 + addr = tcg_temp_new();
244 if (rb != 31) { 258 if (rb != 31) {
245 tcg_gen_addi_i64(addr, cpu_ir[rb], disp16); 259 tcg_gen_addi_i64(addr, cpu_ir[rb], disp16);
246 if (clear) 260 if (clear)
@@ -277,7 +291,7 @@ static always_inline void gen_bcond (DisasContext *ctx, @@ -277,7 +291,7 @@ static always_inline void gen_bcond (DisasContext *ctx,
277 l2 = gen_new_label(); 291 l2 = gen_new_label();
278 if (likely(ra != 31)) { 292 if (likely(ra != 31)) {
279 if (mask) { 293 if (mask) {
280 - TCGv tmp = tcg_temp_new(TCG_TYPE_I64); 294 + TCGv tmp = tcg_temp_new();
281 tcg_gen_andi_i64(tmp, cpu_ir[ra], 1); 295 tcg_gen_andi_i64(tmp, cpu_ir[ra], 1);
282 tcg_gen_brcondi_i64(cond, tmp, 0, l1); 296 tcg_gen_brcondi_i64(cond, tmp, 0, l1);
283 tcg_temp_free(tmp); 297 tcg_temp_free(tmp);
@@ -296,21 +310,43 @@ static always_inline void gen_bcond (DisasContext *ctx, @@ -296,21 +310,43 @@ static always_inline void gen_bcond (DisasContext *ctx,
296 gen_set_label(l2); 310 gen_set_label(l2);
297 } 311 }
298 312
299 -static always_inline void gen_fbcond (DisasContext *ctx,  
300 - void* func, 313 +static always_inline void gen_fbcond (DisasContext *ctx, int opc,
301 int ra, int32_t disp16) 314 int ra, int32_t disp16)
302 { 315 {
303 int l1, l2; 316 int l1, l2;
304 TCGv tmp; 317 TCGv tmp;
  318 + TCGv src;
305 319
306 l1 = gen_new_label(); 320 l1 = gen_new_label();
307 l2 = gen_new_label(); 321 l2 = gen_new_label();
308 if (ra != 31) { 322 if (ra != 31) {
309 - tmp = tcg_temp_new(TCG_TYPE_I64);  
310 - tcg_gen_helper_1_1(func, tmp, cpu_fir[ra]); 323 + tmp = tcg_temp_new();
  324 + src = cpu_fir[ra];
311 } else { 325 } else {
312 tmp = tcg_const_i64(0); 326 tmp = tcg_const_i64(0);
313 - tcg_gen_helper_1_1(func, tmp, tmp); 327 + src = tmp;
  328 + }
  329 + switch (opc) {
  330 + case 0x31: /* FBEQ */
  331 + gen_helper_cmpfeq(tmp, src);
  332 + break;
  333 + case 0x32: /* FBLT */
  334 + gen_helper_cmpflt(tmp, src);
  335 + break;
  336 + case 0x33: /* FBLE */
  337 + gen_helper_cmpfle(tmp, src);
  338 + break;
  339 + case 0x35: /* FBNE */
  340 + gen_helper_cmpfne(tmp, src);
  341 + break;
  342 + case 0x36: /* FBGE */
  343 + gen_helper_cmpfge(tmp, src);
  344 + break;
  345 + case 0x37: /* FBGT */
  346 + gen_helper_cmpfgt(tmp, src);
  347 + break;
  348 + default:
  349 + abort();
314 } 350 }
315 tcg_gen_brcondi_i64(TCG_COND_NE, tmp, 0, l1); 351 tcg_gen_brcondi_i64(TCG_COND_NE, tmp, 0, l1);
316 tcg_gen_movi_i64(cpu_pc, ctx->pc); 352 tcg_gen_movi_i64(cpu_pc, ctx->pc);
@@ -333,7 +369,7 @@ static always_inline void gen_cmov (TCGCond inv_cond, @@ -333,7 +369,7 @@ static always_inline void gen_cmov (TCGCond inv_cond,
333 369
334 if (ra != 31) { 370 if (ra != 31) {
335 if (mask) { 371 if (mask) {
336 - TCGv tmp = tcg_temp_new(TCG_TYPE_I64); 372 + TCGv tmp = tcg_temp_new();
337 tcg_gen_andi_i64(tmp, cpu_ir[ra], 1); 373 tcg_gen_andi_i64(tmp, cpu_ir[ra], 1);
338 tcg_gen_brcondi_i64(inv_cond, tmp, 0, l1); 374 tcg_gen_brcondi_i64(inv_cond, tmp, 0, l1);
339 tcg_temp_free(tmp); 375 tcg_temp_free(tmp);
@@ -353,70 +389,120 @@ static always_inline void gen_cmov (TCGCond inv_cond, @@ -353,70 +389,120 @@ static always_inline void gen_cmov (TCGCond inv_cond,
353 gen_set_label(l1); 389 gen_set_label(l1);
354 } 390 }
355 391
356 -static always_inline void gen_farith2 (void *helper,  
357 - int rb, int rc)  
358 -{  
359 - if (unlikely(rc == 31))  
360 - return;  
361 -  
362 - if (rb != 31)  
363 - tcg_gen_helper_1_1(helper, cpu_fir[rc], cpu_fir[rb]);  
364 - else {  
365 - TCGv tmp = tcg_const_i64(0);  
366 - tcg_gen_helper_1_1(helper, cpu_fir[rc], tmp);  
367 - tcg_temp_free(tmp);  
368 - } 392 +#define FARITH2(name) \
  393 +static always_inline void glue(gen_f, name)(int rb, int rc) \
  394 +{ \
  395 + if (unlikely(rc == 31)) \
  396 + return; \
  397 + \
  398 + if (rb != 31) \
  399 + gen_helper_ ## name (cpu_fir[rc], cpu_fir[rb]); \
  400 + else { \
  401 + TCGv tmp = tcg_const_i64(0); \
  402 + gen_helper_ ## name (cpu_fir[rc], tmp); \
  403 + tcg_temp_free(tmp); \
  404 + } \
369 } 405 }
370 -  
371 -static always_inline void gen_farith3 (void *helper,  
372 - int ra, int rb, int rc)  
373 -{  
374 - if (unlikely(rc == 31))  
375 - return;  
376 -  
377 - if (ra != 31) {  
378 - if (rb != 31)  
379 - tcg_gen_helper_1_2(helper, cpu_fir[rc], cpu_fir[ra], cpu_fir[rb]);  
380 - else {  
381 - TCGv tmp = tcg_const_i64(0);  
382 - tcg_gen_helper_1_2(helper, cpu_fir[rc], cpu_fir[ra], tmp);  
383 - tcg_temp_free(tmp);  
384 - }  
385 - } else {  
386 - TCGv tmp = tcg_const_i64(0);  
387 - if (rb != 31)  
388 - tcg_gen_helper_1_2(helper, cpu_fir[rc], tmp, cpu_fir[rb]);  
389 - else  
390 - tcg_gen_helper_1_2(helper, cpu_fir[rc], tmp, tmp);  
391 - tcg_temp_free(tmp);  
392 - } 406 +FARITH2(sqrts)
  407 +FARITH2(sqrtf)
  408 +FARITH2(sqrtg)
  409 +FARITH2(sqrtt)
  410 +FARITH2(cvtgf)
  411 +FARITH2(cvtgq)
  412 +FARITH2(cvtqf)
  413 +FARITH2(cvtqg)
  414 +FARITH2(cvtst)
  415 +FARITH2(cvtts)
  416 +FARITH2(cvttq)
  417 +FARITH2(cvtqs)
  418 +FARITH2(cvtqt)
  419 +FARITH2(cvtlq)
  420 +FARITH2(cvtql)
  421 +FARITH2(cvtqlv)
  422 +FARITH2(cvtqlsv)
  423 +
  424 +#define FARITH3(name) \
  425 +static always_inline void glue(gen_f, name) (int ra, int rb, int rc) \
  426 +{ \
  427 + if (unlikely(rc == 31)) \
  428 + return; \
  429 + \
  430 + if (ra != 31) { \
  431 + if (rb != 31) \
  432 + gen_helper_ ## name (cpu_fir[rc], cpu_fir[ra], cpu_fir[rb]); \
  433 + else { \
  434 + TCGv tmp = tcg_const_i64(0); \
  435 + gen_helper_ ## name (cpu_fir[rc], cpu_fir[ra], tmp); \
  436 + tcg_temp_free(tmp); \
  437 + } \
  438 + } else { \
  439 + TCGv tmp = tcg_const_i64(0); \
  440 + if (rb != 31) \
  441 + gen_helper_ ## name (cpu_fir[rc], tmp, cpu_fir[rb]); \
  442 + else \
  443 + gen_helper_ ## name (cpu_fir[rc], tmp, tmp); \
  444 + tcg_temp_free(tmp); \
  445 + } \
393 } 446 }
394 447
395 -static always_inline void gen_fcmov (void *func,  
396 - int ra, int rb, int rc)  
397 -{  
398 - int l1;  
399 - TCGv tmp;  
400 -  
401 - if (unlikely(rc == 31))  
402 - return;  
403 -  
404 - l1 = gen_new_label();  
405 - tmp = tcg_temp_new(TCG_TYPE_I64);  
406 - if (ra != 31) {  
407 - tmp = tcg_temp_new(TCG_TYPE_I64);  
408 - tcg_gen_helper_1_1(func, tmp, cpu_fir[ra]);  
409 - } else {  
410 - tmp = tcg_const_i64(0);  
411 - tcg_gen_helper_1_1(func, tmp, tmp);  
412 - }  
413 - tcg_gen_brcondi_i64(TCG_COND_EQ, tmp, 0, l1);  
414 - if (rb != 31)  
415 - tcg_gen_mov_i64(cpu_fir[rc], cpu_fir[ra]);  
416 - else  
417 - tcg_gen_movi_i64(cpu_fir[rc], 0);  
418 - gen_set_label(l1); 448 +FARITH3(addf)
  449 +FARITH3(subf)
  450 +FARITH3(mulf)
  451 +FARITH3(divf)
  452 +FARITH3(addg)
  453 +FARITH3(subg)
  454 +FARITH3(mulg)
  455 +FARITH3(divg)
  456 +FARITH3(cmpgeq)
  457 +FARITH3(cmpglt)
  458 +FARITH3(cmpgle)
  459 +FARITH3(adds)
  460 +FARITH3(subs)
  461 +FARITH3(muls)
  462 +FARITH3(divs)
  463 +FARITH3(addt)
  464 +FARITH3(subt)
  465 +FARITH3(mult)
  466 +FARITH3(divt)
  467 +FARITH3(cmptun)
  468 +FARITH3(cmpteq)
  469 +FARITH3(cmptlt)
  470 +FARITH3(cmptle)
  471 +FARITH3(cpys)
  472 +FARITH3(cpysn)
  473 +FARITH3(cpyse)
  474 +
  475 +#define FCMOV(name) \
  476 +static always_inline void glue(gen_f, name) (int ra, int rb, int rc) \
  477 +{ \
  478 + int l1; \
  479 + TCGv tmp; \
  480 + \
  481 + if (unlikely(rc == 31)) \
  482 + return; \
  483 + \
  484 + l1 = gen_new_label(); \
  485 + tmp = tcg_temp_new(); \
  486 + if (ra != 31) { \
  487 + tmp = tcg_temp_new(); \
  488 + gen_helper_ ## name (tmp, cpu_fir[ra]); \
  489 + } else { \
  490 + tmp = tcg_const_i64(0); \
  491 + gen_helper_ ## name (tmp, tmp); \
  492 + } \
  493 + tcg_gen_brcondi_i64(TCG_COND_EQ, tmp, 0, l1); \
  494 + if (rb != 31) \
  495 + tcg_gen_mov_i64(cpu_fir[rc], cpu_fir[ra]); \
  496 + else \
  497 + tcg_gen_movi_i64(cpu_fir[rc], 0); \
  498 + gen_set_label(l1); \
419 } 499 }
  500 +FCMOV(cmpfeq)
  501 +FCMOV(cmpfne)
  502 +FCMOV(cmpflt)
  503 +FCMOV(cmpfge)
  504 +FCMOV(cmpfle)
  505 +FCMOV(cmpfgt)
420 506
421 /* EXTWH, EXTWH, EXTLH, EXTQH */ 507 /* EXTWH, EXTWH, EXTLH, EXTQH */
422 static always_inline void gen_ext_h(void (*tcg_gen_ext_i64)(TCGv t0, TCGv t1), 508 static always_inline void gen_ext_h(void (*tcg_gen_ext_i64)(TCGv t0, TCGv t1),
@@ -434,7 +520,7 @@ static always_inline void gen_ext_h(void (*tcg_gen_ext_i64)(TCGv t0, TCGv t1), @@ -434,7 +520,7 @@ static always_inline void gen_ext_h(void (*tcg_gen_ext_i64)(TCGv t0, TCGv t1),
434 tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[ra]); 520 tcg_gen_mov_i64(cpu_ir[rc], cpu_ir[ra]);
435 } else { 521 } else {
436 TCGv tmp1, tmp2; 522 TCGv tmp1, tmp2;
437 - tmp1 = tcg_temp_new(TCG_TYPE_I64); 523 + tmp1 = tcg_temp_new();
438 tcg_gen_andi_i64(tmp1, cpu_ir[rb], 7); 524 tcg_gen_andi_i64(tmp1, cpu_ir[rb], 7);
439 tcg_gen_shli_i64(tmp1, tmp1, 3); 525 tcg_gen_shli_i64(tmp1, tmp1, 3);
440 tmp2 = tcg_const_i64(64); 526 tmp2 = tcg_const_i64(64);
@@ -461,7 +547,7 @@ static always_inline void gen_ext_l(void (*tcg_gen_ext_i64)(TCGv t0, TCGv t1), @@ -461,7 +547,7 @@ static always_inline void gen_ext_l(void (*tcg_gen_ext_i64)(TCGv t0, TCGv t1),
461 if (islit) { 547 if (islit) {
462 tcg_gen_shri_i64(cpu_ir[rc], cpu_ir[ra], (lit & 7) * 8); 548 tcg_gen_shri_i64(cpu_ir[rc], cpu_ir[ra], (lit & 7) * 8);
463 } else { 549 } else {
464 - TCGv tmp = tcg_temp_new(TCG_TYPE_I64); 550 + TCGv tmp = tcg_temp_new();
465 tcg_gen_andi_i64(tmp, cpu_ir[rb], 7); 551 tcg_gen_andi_i64(tmp, cpu_ir[rb], 7);
466 tcg_gen_shli_i64(tmp, tmp, 3); 552 tcg_gen_shli_i64(tmp, tmp, 3);
467 tcg_gen_shr_i64(cpu_ir[rc], cpu_ir[ra], tmp); 553 tcg_gen_shr_i64(cpu_ir[rc], cpu_ir[ra], tmp);
@@ -474,31 +560,55 @@ static always_inline void gen_ext_l(void (*tcg_gen_ext_i64)(TCGv t0, TCGv t1), @@ -474,31 +560,55 @@ static always_inline void gen_ext_l(void (*tcg_gen_ext_i64)(TCGv t0, TCGv t1),
474 } 560 }
475 561
476 /* Code to call arith3 helpers */ 562 /* Code to call arith3 helpers */
477 -static always_inline void gen_arith3 (void *helper,  
478 - int ra, int rb, int rc,  
479 - int islit, uint8_t lit)  
480 -{  
481 - if (unlikely(rc == 31))  
482 - return;  
483 -  
484 - if (ra != 31) {  
485 - if (islit) {  
486 - TCGv tmp = tcg_const_i64(lit);  
487 - tcg_gen_helper_1_2(helper, cpu_ir[rc], cpu_ir[ra], tmp);  
488 - tcg_temp_free(tmp);  
489 - } else  
490 - tcg_gen_helper_1_2(helper, cpu_ir[rc], cpu_ir[ra], cpu_ir[rb]);  
491 - } else {  
492 - TCGv tmp1 = tcg_const_i64(0);  
493 - if (islit) {  
494 - TCGv tmp2 = tcg_const_i64(lit);  
495 - tcg_gen_helper_1_2(helper, cpu_ir[rc], tmp1, tmp2);  
496 - tcg_temp_free(tmp2);  
497 - } else  
498 - tcg_gen_helper_1_2(helper, cpu_ir[rc], tmp1, cpu_ir[rb]);  
499 - tcg_temp_free(tmp1);  
500 - } 563 +#define ARITH3(name) \
  564 +static always_inline void glue(gen_, name) (int ra, int rb, int rc, \
  565 + int islit, uint8_t lit) \
  566 +{ \
  567 + if (unlikely(rc == 31)) \
  568 + return; \
  569 + \
  570 + if (ra != 31) { \
  571 + if (islit) { \
  572 + TCGv tmp = tcg_const_i64(lit); \
  573 + gen_helper_ ## name(cpu_ir[rc], cpu_ir[ra], tmp); \
  574 + tcg_temp_free(tmp); \
  575 + } else \
  576 + gen_helper_ ## name (cpu_ir[rc], cpu_ir[ra], cpu_ir[rb]); \
  577 + } else { \
  578 + TCGv tmp1 = tcg_const_i64(0); \
  579 + if (islit) { \
  580 + TCGv tmp2 = tcg_const_i64(lit); \
  581 + gen_helper_ ## name (cpu_ir[rc], tmp1, tmp2); \
  582 + tcg_temp_free(tmp2); \
  583 + } else \
  584 + gen_helper_ ## name (cpu_ir[rc], tmp1, cpu_ir[rb]); \
  585 + tcg_temp_free(tmp1); \
  586 + } \
501 } 587 }
  588 +ARITH3(cmpbge)
  589 +ARITH3(addlv)
  590 +ARITH3(sublv)
  591 +ARITH3(addqv)
  592 +ARITH3(subqv)
  593 +ARITH3(mskbl)
  594 +ARITH3(insbl)
  595 +ARITH3(mskwl)
  596 +ARITH3(inswl)
  597 +ARITH3(mskll)
  598 +ARITH3(insll)
  599 +ARITH3(zap)
  600 +ARITH3(zapnot)
  601 +ARITH3(mskql)
  602 +ARITH3(insql)
  603 +ARITH3(mskwh)
  604 +ARITH3(inswh)
  605 +ARITH3(msklh)
  606 +ARITH3(inslh)
  607 +ARITH3(mskqh)
  608 +ARITH3(insqh)
  609 +ARITH3(umulh)
  610 +ARITH3(mullv)
  611 +ARITH3(mulqv)
502 612
503 static always_inline void gen_cmp(TCGCond cond, 613 static always_inline void gen_cmp(TCGCond cond,
504 int ra, int rb, int rc, 614 int ra, int rb, int rc,
@@ -514,7 +624,7 @@ static always_inline void gen_cmp(TCGCond cond, @@ -514,7 +624,7 @@ static always_inline void gen_cmp(TCGCond cond,
514 l2 = gen_new_label(); 624 l2 = gen_new_label();
515 625
516 if (ra != 31) { 626 if (ra != 31) {
517 - tmp = tcg_temp_new(TCG_TYPE_I64); 627 + tmp = tcg_temp_new();
518 tcg_gen_mov_i64(tmp, cpu_ir[ra]); 628 tcg_gen_mov_i64(tmp, cpu_ir[ra]);
519 } else 629 } else
520 tmp = tcg_const_i64(0); 630 tmp = tcg_const_i64(0);
@@ -679,7 +789,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -679,7 +789,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
679 /* S4ADDL */ 789 /* S4ADDL */
680 if (likely(rc != 31)) { 790 if (likely(rc != 31)) {
681 if (ra != 31) { 791 if (ra != 31) {
682 - TCGv tmp = tcg_temp_new(TCG_TYPE_I64); 792 + TCGv tmp = tcg_temp_new();
683 tcg_gen_shli_i64(tmp, cpu_ir[ra], 2); 793 tcg_gen_shli_i64(tmp, cpu_ir[ra], 2);
684 if (islit) 794 if (islit)
685 tcg_gen_addi_i64(tmp, tmp, lit); 795 tcg_gen_addi_i64(tmp, tmp, lit);
@@ -717,7 +827,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -717,7 +827,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
717 /* S4SUBL */ 827 /* S4SUBL */
718 if (likely(rc != 31)) { 828 if (likely(rc != 31)) {
719 if (ra != 31) { 829 if (ra != 31) {
720 - TCGv tmp = tcg_temp_new(TCG_TYPE_I64); 830 + TCGv tmp = tcg_temp_new();
721 tcg_gen_shli_i64(tmp, cpu_ir[ra], 2); 831 tcg_gen_shli_i64(tmp, cpu_ir[ra], 2);
722 if (islit) 832 if (islit)
723 tcg_gen_subi_i64(tmp, tmp, lit); 833 tcg_gen_subi_i64(tmp, tmp, lit);
@@ -737,13 +847,13 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -737,13 +847,13 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
737 break; 847 break;
738 case 0x0F: 848 case 0x0F:
739 /* CMPBGE */ 849 /* CMPBGE */
740 - gen_arith3(helper_cmpbge, ra, rb, rc, islit, lit); 850 + gen_cmpbge(ra, rb, rc, islit, lit);
741 break; 851 break;
742 case 0x12: 852 case 0x12:
743 /* S8ADDL */ 853 /* S8ADDL */
744 if (likely(rc != 31)) { 854 if (likely(rc != 31)) {
745 if (ra != 31) { 855 if (ra != 31) {
746 - TCGv tmp = tcg_temp_new(TCG_TYPE_I64); 856 + TCGv tmp = tcg_temp_new();
747 tcg_gen_shli_i64(tmp, cpu_ir[ra], 3); 857 tcg_gen_shli_i64(tmp, cpu_ir[ra], 3);
748 if (islit) 858 if (islit)
749 tcg_gen_addi_i64(tmp, tmp, lit); 859 tcg_gen_addi_i64(tmp, tmp, lit);
@@ -763,7 +873,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -763,7 +873,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
763 /* S8SUBL */ 873 /* S8SUBL */
764 if (likely(rc != 31)) { 874 if (likely(rc != 31)) {
765 if (ra != 31) { 875 if (ra != 31) {
766 - TCGv tmp = tcg_temp_new(TCG_TYPE_I64); 876 + TCGv tmp = tcg_temp_new();
767 tcg_gen_shli_i64(tmp, cpu_ir[ra], 3); 877 tcg_gen_shli_i64(tmp, cpu_ir[ra], 3);
768 if (islit) 878 if (islit)
769 tcg_gen_subi_i64(tmp, tmp, lit); 879 tcg_gen_subi_i64(tmp, tmp, lit);
@@ -805,7 +915,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -805,7 +915,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
805 /* S4ADDQ */ 915 /* S4ADDQ */
806 if (likely(rc != 31)) { 916 if (likely(rc != 31)) {
807 if (ra != 31) { 917 if (ra != 31) {
808 - TCGv tmp = tcg_temp_new(TCG_TYPE_I64); 918 + TCGv tmp = tcg_temp_new();
809 tcg_gen_shli_i64(tmp, cpu_ir[ra], 2); 919 tcg_gen_shli_i64(tmp, cpu_ir[ra], 2);
810 if (islit) 920 if (islit)
811 tcg_gen_addi_i64(cpu_ir[rc], tmp, lit); 921 tcg_gen_addi_i64(cpu_ir[rc], tmp, lit);
@@ -840,7 +950,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -840,7 +950,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
840 /* S4SUBQ */ 950 /* S4SUBQ */
841 if (likely(rc != 31)) { 951 if (likely(rc != 31)) {
842 if (ra != 31) { 952 if (ra != 31) {
843 - TCGv tmp = tcg_temp_new(TCG_TYPE_I64); 953 + TCGv tmp = tcg_temp_new();
844 tcg_gen_shli_i64(tmp, cpu_ir[ra], 2); 954 tcg_gen_shli_i64(tmp, cpu_ir[ra], 2);
845 if (islit) 955 if (islit)
846 tcg_gen_subi_i64(cpu_ir[rc], tmp, lit); 956 tcg_gen_subi_i64(cpu_ir[rc], tmp, lit);
@@ -863,7 +973,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -863,7 +973,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
863 /* S8ADDQ */ 973 /* S8ADDQ */
864 if (likely(rc != 31)) { 974 if (likely(rc != 31)) {
865 if (ra != 31) { 975 if (ra != 31) {
866 - TCGv tmp = tcg_temp_new(TCG_TYPE_I64); 976 + TCGv tmp = tcg_temp_new();
867 tcg_gen_shli_i64(tmp, cpu_ir[ra], 3); 977 tcg_gen_shli_i64(tmp, cpu_ir[ra], 3);
868 if (islit) 978 if (islit)
869 tcg_gen_addi_i64(cpu_ir[rc], tmp, lit); 979 tcg_gen_addi_i64(cpu_ir[rc], tmp, lit);
@@ -882,7 +992,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -882,7 +992,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
882 /* S8SUBQ */ 992 /* S8SUBQ */
883 if (likely(rc != 31)) { 993 if (likely(rc != 31)) {
884 if (ra != 31) { 994 if (ra != 31) {
885 - TCGv tmp = tcg_temp_new(TCG_TYPE_I64); 995 + TCGv tmp = tcg_temp_new();
886 tcg_gen_shli_i64(tmp, cpu_ir[ra], 3); 996 tcg_gen_shli_i64(tmp, cpu_ir[ra], 3);
887 if (islit) 997 if (islit)
888 tcg_gen_subi_i64(cpu_ir[rc], tmp, lit); 998 tcg_gen_subi_i64(cpu_ir[rc], tmp, lit);
@@ -903,11 +1013,11 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -903,11 +1013,11 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
903 break; 1013 break;
904 case 0x40: 1014 case 0x40:
905 /* ADDL/V */ 1015 /* ADDL/V */
906 - gen_arith3(helper_addlv, ra, rb, rc, islit, lit); 1016 + gen_addlv(ra, rb, rc, islit, lit);
907 break; 1017 break;
908 case 0x49: 1018 case 0x49:
909 /* SUBL/V */ 1019 /* SUBL/V */
910 - gen_arith3(helper_sublv, ra, rb, rc, islit, lit); 1020 + gen_sublv(ra, rb, rc, islit, lit);
911 break; 1021 break;
912 case 0x4D: 1022 case 0x4D:
913 /* CMPLT */ 1023 /* CMPLT */
@@ -915,11 +1025,11 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -915,11 +1025,11 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
915 break; 1025 break;
916 case 0x60: 1026 case 0x60:
917 /* ADDQ/V */ 1027 /* ADDQ/V */
918 - gen_arith3(helper_addqv, ra, rb, rc, islit, lit); 1028 + gen_addqv(ra, rb, rc, islit, lit);
919 break; 1029 break;
920 case 0x69: 1030 case 0x69:
921 /* SUBQ/V */ 1031 /* SUBQ/V */
922 - gen_arith3(helper_subqv, ra, rb, rc, islit, lit); 1032 + gen_subqv(ra, rb, rc, islit, lit);
923 break; 1033 break;
924 case 0x6D: 1034 case 0x6D:
925 /* CMPLE */ 1035 /* CMPLE */
@@ -1048,7 +1158,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1048,7 +1158,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1048 if (islit) 1158 if (islit)
1049 tcg_gen_movi_i64(cpu_ir[rc], helper_amask(lit)); 1159 tcg_gen_movi_i64(cpu_ir[rc], helper_amask(lit));
1050 else 1160 else
1051 - tcg_gen_helper_1_1(helper_amask, cpu_ir[rc], cpu_ir[rb]); 1161 + gen_helper_amask(cpu_ir[rc], cpu_ir[rb]);
1052 } 1162 }
1053 break; 1163 break;
1054 case 0x64: 1164 case 0x64:
@@ -1062,7 +1172,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1062,7 +1172,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1062 case 0x6C: 1172 case 0x6C:
1063 /* IMPLVER */ 1173 /* IMPLVER */
1064 if (rc != 31) 1174 if (rc != 31)
1065 - tcg_gen_helper_1_0(helper_load_implver, cpu_ir[rc]); 1175 + gen_helper_load_implver(cpu_ir[rc]);
1066 break; 1176 break;
1067 default: 1177 default:
1068 goto invalid_opc; 1178 goto invalid_opc;
@@ -1072,7 +1182,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1072,7 +1182,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1072 switch (fn7) { 1182 switch (fn7) {
1073 case 0x02: 1183 case 0x02:
1074 /* MSKBL */ 1184 /* MSKBL */
1075 - gen_arith3(helper_mskbl, ra, rb, rc, islit, lit); 1185 + gen_mskbl(ra, rb, rc, islit, lit);
1076 break; 1186 break;
1077 case 0x06: 1187 case 0x06:
1078 /* EXTBL */ 1188 /* EXTBL */
@@ -1080,11 +1190,11 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1080,11 +1190,11 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1080 break; 1190 break;
1081 case 0x0B: 1191 case 0x0B:
1082 /* INSBL */ 1192 /* INSBL */
1083 - gen_arith3(helper_insbl, ra, rb, rc, islit, lit); 1193 + gen_insbl(ra, rb, rc, islit, lit);
1084 break; 1194 break;
1085 case 0x12: 1195 case 0x12:
1086 /* MSKWL */ 1196 /* MSKWL */
1087 - gen_arith3(helper_mskwl, ra, rb, rc, islit, lit); 1197 + gen_mskwl(ra, rb, rc, islit, lit);
1088 break; 1198 break;
1089 case 0x16: 1199 case 0x16:
1090 /* EXTWL */ 1200 /* EXTWL */
@@ -1092,11 +1202,11 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1092,11 +1202,11 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1092 break; 1202 break;
1093 case 0x1B: 1203 case 0x1B:
1094 /* INSWL */ 1204 /* INSWL */
1095 - gen_arith3(helper_inswl, ra, rb, rc, islit, lit); 1205 + gen_inswl(ra, rb, rc, islit, lit);
1096 break; 1206 break;
1097 case 0x22: 1207 case 0x22:
1098 /* MSKLL */ 1208 /* MSKLL */
1099 - gen_arith3(helper_mskll, ra, rb, rc, islit, lit); 1209 + gen_mskll(ra, rb, rc, islit, lit);
1100 break; 1210 break;
1101 case 0x26: 1211 case 0x26:
1102 /* EXTLL */ 1212 /* EXTLL */
@@ -1104,19 +1214,19 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1104,19 +1214,19 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1104 break; 1214 break;
1105 case 0x2B: 1215 case 0x2B:
1106 /* INSLL */ 1216 /* INSLL */
1107 - gen_arith3(helper_insll, ra, rb, rc, islit, lit); 1217 + gen_insll(ra, rb, rc, islit, lit);
1108 break; 1218 break;
1109 case 0x30: 1219 case 0x30:
1110 /* ZAP */ 1220 /* ZAP */
1111 - gen_arith3(helper_zap, ra, rb, rc, islit, lit); 1221 + gen_zap(ra, rb, rc, islit, lit);
1112 break; 1222 break;
1113 case 0x31: 1223 case 0x31:
1114 /* ZAPNOT */ 1224 /* ZAPNOT */
1115 - gen_arith3(helper_zapnot, ra, rb, rc, islit, lit); 1225 + gen_zapnot(ra, rb, rc, islit, lit);
1116 break; 1226 break;
1117 case 0x32: 1227 case 0x32:
1118 /* MSKQL */ 1228 /* MSKQL */
1119 - gen_arith3(helper_mskql, ra, rb, rc, islit, lit); 1229 + gen_mskql(ra, rb, rc, islit, lit);
1120 break; 1230 break;
1121 case 0x34: 1231 case 0x34:
1122 /* SRL */ 1232 /* SRL */
@@ -1125,7 +1235,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1125,7 +1235,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1125 if (islit) 1235 if (islit)
1126 tcg_gen_shri_i64(cpu_ir[rc], cpu_ir[ra], lit & 0x3f); 1236 tcg_gen_shri_i64(cpu_ir[rc], cpu_ir[ra], lit & 0x3f);
1127 else { 1237 else {
1128 - TCGv shift = tcg_temp_new(TCG_TYPE_I64); 1238 + TCGv shift = tcg_temp_new();
1129 tcg_gen_andi_i64(shift, cpu_ir[rb], 0x3f); 1239 tcg_gen_andi_i64(shift, cpu_ir[rb], 0x3f);
1130 tcg_gen_shr_i64(cpu_ir[rc], cpu_ir[ra], shift); 1240 tcg_gen_shr_i64(cpu_ir[rc], cpu_ir[ra], shift);
1131 tcg_temp_free(shift); 1241 tcg_temp_free(shift);
@@ -1145,7 +1255,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1145,7 +1255,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1145 if (islit) 1255 if (islit)
1146 tcg_gen_shli_i64(cpu_ir[rc], cpu_ir[ra], lit & 0x3f); 1256 tcg_gen_shli_i64(cpu_ir[rc], cpu_ir[ra], lit & 0x3f);
1147 else { 1257 else {
1148 - TCGv shift = tcg_temp_new(TCG_TYPE_I64); 1258 + TCGv shift = tcg_temp_new();
1149 tcg_gen_andi_i64(shift, cpu_ir[rb], 0x3f); 1259 tcg_gen_andi_i64(shift, cpu_ir[rb], 0x3f);
1150 tcg_gen_shl_i64(cpu_ir[rc], cpu_ir[ra], shift); 1260 tcg_gen_shl_i64(cpu_ir[rc], cpu_ir[ra], shift);
1151 tcg_temp_free(shift); 1261 tcg_temp_free(shift);
@@ -1156,7 +1266,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1156,7 +1266,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1156 break; 1266 break;
1157 case 0x3B: 1267 case 0x3B:
1158 /* INSQL */ 1268 /* INSQL */
1159 - gen_arith3(helper_insql, ra, rb, rc, islit, lit); 1269 + gen_insql(ra, rb, rc, islit, lit);
1160 break; 1270 break;
1161 case 0x3C: 1271 case 0x3C:
1162 /* SRA */ 1272 /* SRA */
@@ -1165,7 +1275,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1165,7 +1275,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1165 if (islit) 1275 if (islit)
1166 tcg_gen_sari_i64(cpu_ir[rc], cpu_ir[ra], lit & 0x3f); 1276 tcg_gen_sari_i64(cpu_ir[rc], cpu_ir[ra], lit & 0x3f);
1167 else { 1277 else {
1168 - TCGv shift = tcg_temp_new(TCG_TYPE_I64); 1278 + TCGv shift = tcg_temp_new();
1169 tcg_gen_andi_i64(shift, cpu_ir[rb], 0x3f); 1279 tcg_gen_andi_i64(shift, cpu_ir[rb], 0x3f);
1170 tcg_gen_sar_i64(cpu_ir[rc], cpu_ir[ra], shift); 1280 tcg_gen_sar_i64(cpu_ir[rc], cpu_ir[ra], shift);
1171 tcg_temp_free(shift); 1281 tcg_temp_free(shift);
@@ -1176,11 +1286,11 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1176,11 +1286,11 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1176 break; 1286 break;
1177 case 0x52: 1287 case 0x52:
1178 /* MSKWH */ 1288 /* MSKWH */
1179 - gen_arith3(helper_mskwh, ra, rb, rc, islit, lit); 1289 + gen_mskwh(ra, rb, rc, islit, lit);
1180 break; 1290 break;
1181 case 0x57: 1291 case 0x57:
1182 /* INSWH */ 1292 /* INSWH */
1183 - gen_arith3(helper_inswh, ra, rb, rc, islit, lit); 1293 + gen_inswh(ra, rb, rc, islit, lit);
1184 break; 1294 break;
1185 case 0x5A: 1295 case 0x5A:
1186 /* EXTWH */ 1296 /* EXTWH */
@@ -1188,11 +1298,11 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1188,11 +1298,11 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1188 break; 1298 break;
1189 case 0x62: 1299 case 0x62:
1190 /* MSKLH */ 1300 /* MSKLH */
1191 - gen_arith3(helper_msklh, ra, rb, rc, islit, lit); 1301 + gen_msklh(ra, rb, rc, islit, lit);
1192 break; 1302 break;
1193 case 0x67: 1303 case 0x67:
1194 /* INSLH */ 1304 /* INSLH */
1195 - gen_arith3(helper_inslh, ra, rb, rc, islit, lit); 1305 + gen_inslh(ra, rb, rc, islit, lit);
1196 break; 1306 break;
1197 case 0x6A: 1307 case 0x6A:
1198 /* EXTLH */ 1308 /* EXTLH */
@@ -1200,11 +1310,11 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1200,11 +1310,11 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1200 break; 1310 break;
1201 case 0x72: 1311 case 0x72:
1202 /* MSKQH */ 1312 /* MSKQH */
1203 - gen_arith3(helper_mskqh, ra, rb, rc, islit, lit); 1313 + gen_mskqh(ra, rb, rc, islit, lit);
1204 break; 1314 break;
1205 case 0x77: 1315 case 0x77:
1206 /* INSQH */ 1316 /* INSQH */
1207 - gen_arith3(helper_insqh, ra, rb, rc, islit, lit); 1317 + gen_insqh(ra, rb, rc, islit, lit);
1208 break; 1318 break;
1209 case 0x7A: 1319 case 0x7A:
1210 /* EXTQH */ 1320 /* EXTQH */
@@ -1243,15 +1353,15 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1243,15 +1353,15 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1243 break; 1353 break;
1244 case 0x30: 1354 case 0x30:
1245 /* UMULH */ 1355 /* UMULH */
1246 - gen_arith3(helper_umulh, ra, rb, rc, islit, lit); 1356 + gen_umulh(ra, rb, rc, islit, lit);
1247 break; 1357 break;
1248 case 0x40: 1358 case 0x40:
1249 /* MULL/V */ 1359 /* MULL/V */
1250 - gen_arith3(helper_mullv, ra, rb, rc, islit, lit); 1360 + gen_mullv(ra, rb, rc, islit, lit);
1251 break; 1361 break;
1252 case 0x60: 1362 case 0x60:
1253 /* MULQ/V */ 1363 /* MULQ/V */
1254 - gen_arith3(helper_mulqv, ra, rb, rc, islit, lit); 1364 + gen_mulqv(ra, rb, rc, islit, lit);
1255 break; 1365 break;
1256 default: 1366 default:
1257 goto invalid_opc; 1367 goto invalid_opc;
@@ -1265,10 +1375,10 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1265,10 +1375,10 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1265 goto invalid_opc; 1375 goto invalid_opc;
1266 if (likely(rc != 31)) { 1376 if (likely(rc != 31)) {
1267 if (ra != 31) { 1377 if (ra != 31) {
1268 - TCGv tmp = tcg_temp_new(TCG_TYPE_I32); 1378 + TCGv_i32 tmp = tcg_temp_new_i32();
1269 tcg_gen_trunc_i64_i32(tmp, cpu_ir[ra]); 1379 tcg_gen_trunc_i64_i32(tmp, cpu_ir[ra]);
1270 - tcg_gen_helper_1_1(helper_memory_to_s, cpu_fir[rc], tmp);  
1271 - tcg_temp_free(tmp); 1380 + gen_helper_memory_to_s(cpu_fir[rc], tmp);
  1381 + tcg_temp_free_i32(tmp);
1272 } else 1382 } else
1273 tcg_gen_movi_i64(cpu_fir[rc], 0); 1383 tcg_gen_movi_i64(cpu_fir[rc], 0);
1274 } 1384 }
@@ -1277,13 +1387,13 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1277,13 +1387,13 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1277 /* SQRTF */ 1387 /* SQRTF */
1278 if (!(ctx->amask & AMASK_FIX)) 1388 if (!(ctx->amask & AMASK_FIX))
1279 goto invalid_opc; 1389 goto invalid_opc;
1280 - gen_farith2(&helper_sqrtf, rb, rc); 1390 + gen_fsqrtf(rb, rc);
1281 break; 1391 break;
1282 case 0x0B: 1392 case 0x0B:
1283 /* SQRTS */ 1393 /* SQRTS */
1284 if (!(ctx->amask & AMASK_FIX)) 1394 if (!(ctx->amask & AMASK_FIX))
1285 goto invalid_opc; 1395 goto invalid_opc;
1286 - gen_farith2(&helper_sqrts, rb, rc); 1396 + gen_fsqrts(rb, rc);
1287 break; 1397 break;
1288 case 0x14: 1398 case 0x14:
1289 /* ITOFF */ 1399 /* ITOFF */
@@ -1291,10 +1401,10 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1291,10 +1401,10 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1291 goto invalid_opc; 1401 goto invalid_opc;
1292 if (likely(rc != 31)) { 1402 if (likely(rc != 31)) {
1293 if (ra != 31) { 1403 if (ra != 31) {
1294 - TCGv tmp = tcg_temp_new(TCG_TYPE_I32); 1404 + TCGv_i32 tmp = tcg_temp_new_i32();
1295 tcg_gen_trunc_i64_i32(tmp, cpu_ir[ra]); 1405 tcg_gen_trunc_i64_i32(tmp, cpu_ir[ra]);
1296 - tcg_gen_helper_1_1(helper_memory_to_f, cpu_fir[rc], tmp);  
1297 - tcg_temp_free(tmp); 1406 + gen_helper_memory_to_f(cpu_fir[rc], tmp);
  1407 + tcg_temp_free_i32(tmp);
1298 } else 1408 } else
1299 tcg_gen_movi_i64(cpu_fir[rc], 0); 1409 tcg_gen_movi_i64(cpu_fir[rc], 0);
1300 } 1410 }
@@ -1314,13 +1424,13 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1314,13 +1424,13 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1314 /* SQRTG */ 1424 /* SQRTG */
1315 if (!(ctx->amask & AMASK_FIX)) 1425 if (!(ctx->amask & AMASK_FIX))
1316 goto invalid_opc; 1426 goto invalid_opc;
1317 - gen_farith2(&helper_sqrtg, rb, rc); 1427 + gen_fsqrtg(rb, rc);
1318 break; 1428 break;
1319 case 0x02B: 1429 case 0x02B:
1320 /* SQRTT */ 1430 /* SQRTT */
1321 if (!(ctx->amask & AMASK_FIX)) 1431 if (!(ctx->amask & AMASK_FIX))
1322 goto invalid_opc; 1432 goto invalid_opc;
1323 - gen_farith2(&helper_sqrtt, rb, rc); 1433 + gen_fsqrtt(rb, rc);
1324 break; 1434 break;
1325 default: 1435 default:
1326 goto invalid_opc; 1436 goto invalid_opc;
@@ -1332,79 +1442,79 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1332,79 +1442,79 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1332 switch (fpfn) { /* f11 & 0x3F */ 1442 switch (fpfn) { /* f11 & 0x3F */
1333 case 0x00: 1443 case 0x00:
1334 /* ADDF */ 1444 /* ADDF */
1335 - gen_farith3(&helper_addf, ra, rb, rc); 1445 + gen_faddf(ra, rb, rc);
1336 break; 1446 break;
1337 case 0x01: 1447 case 0x01:
1338 /* SUBF */ 1448 /* SUBF */
1339 - gen_farith3(&helper_subf, ra, rb, rc); 1449 + gen_fsubf(ra, rb, rc);
1340 break; 1450 break;
1341 case 0x02: 1451 case 0x02:
1342 /* MULF */ 1452 /* MULF */
1343 - gen_farith3(&helper_mulf, ra, rb, rc); 1453 + gen_fmulf(ra, rb, rc);
1344 break; 1454 break;
1345 case 0x03: 1455 case 0x03:
1346 /* DIVF */ 1456 /* DIVF */
1347 - gen_farith3(&helper_divf, ra, rb, rc); 1457 + gen_fdivf(ra, rb, rc);
1348 break; 1458 break;
1349 case 0x1E: 1459 case 0x1E:
1350 /* CVTDG */ 1460 /* CVTDG */
1351 #if 0 // TODO 1461 #if 0 // TODO
1352 - gen_farith2(&helper_cvtdg, rb, rc); 1462 + gen_fcvtdg(rb, rc);
1353 #else 1463 #else
1354 goto invalid_opc; 1464 goto invalid_opc;
1355 #endif 1465 #endif
1356 break; 1466 break;
1357 case 0x20: 1467 case 0x20:
1358 /* ADDG */ 1468 /* ADDG */
1359 - gen_farith3(&helper_addg, ra, rb, rc); 1469 + gen_faddg(ra, rb, rc);
1360 break; 1470 break;
1361 case 0x21: 1471 case 0x21:
1362 /* SUBG */ 1472 /* SUBG */
1363 - gen_farith3(&helper_subg, ra, rb, rc); 1473 + gen_fsubg(ra, rb, rc);
1364 break; 1474 break;
1365 case 0x22: 1475 case 0x22:
1366 /* MULG */ 1476 /* MULG */
1367 - gen_farith3(&helper_mulg, ra, rb, rc); 1477 + gen_fmulg(ra, rb, rc);
1368 break; 1478 break;
1369 case 0x23: 1479 case 0x23:
1370 /* DIVG */ 1480 /* DIVG */
1371 - gen_farith3(&helper_divg, ra, rb, rc); 1481 + gen_fdivg(ra, rb, rc);
1372 break; 1482 break;
1373 case 0x25: 1483 case 0x25:
1374 /* CMPGEQ */ 1484 /* CMPGEQ */
1375 - gen_farith3(&helper_cmpgeq, ra, rb, rc); 1485 + gen_fcmpgeq(ra, rb, rc);
1376 break; 1486 break;
1377 case 0x26: 1487 case 0x26:
1378 /* CMPGLT */ 1488 /* CMPGLT */
1379 - gen_farith3(&helper_cmpglt, ra, rb, rc); 1489 + gen_fcmpglt(ra, rb, rc);
1380 break; 1490 break;
1381 case 0x27: 1491 case 0x27:
1382 /* CMPGLE */ 1492 /* CMPGLE */
1383 - gen_farith3(&helper_cmpgle, ra, rb, rc); 1493 + gen_fcmpgle(ra, rb, rc);
1384 break; 1494 break;
1385 case 0x2C: 1495 case 0x2C:
1386 /* CVTGF */ 1496 /* CVTGF */
1387 - gen_farith2(&helper_cvtgf, rb, rc); 1497 + gen_fcvtgf(rb, rc);
1388 break; 1498 break;
1389 case 0x2D: 1499 case 0x2D:
1390 /* CVTGD */ 1500 /* CVTGD */
1391 #if 0 // TODO 1501 #if 0 // TODO
1392 - gen_farith2(ctx, &helper_cvtgd, rb, rc); 1502 + gen_fcvtgd(rb, rc);
1393 #else 1503 #else
1394 goto invalid_opc; 1504 goto invalid_opc;
1395 #endif 1505 #endif
1396 break; 1506 break;
1397 case 0x2F: 1507 case 0x2F:
1398 /* CVTGQ */ 1508 /* CVTGQ */
1399 - gen_farith2(&helper_cvtgq, rb, rc); 1509 + gen_fcvtgq(rb, rc);
1400 break; 1510 break;
1401 case 0x3C: 1511 case 0x3C:
1402 /* CVTQF */ 1512 /* CVTQF */
1403 - gen_farith2(&helper_cvtqf, rb, rc); 1513 + gen_fcvtqf(rb, rc);
1404 break; 1514 break;
1405 case 0x3E: 1515 case 0x3E:
1406 /* CVTQG */ 1516 /* CVTQG */
1407 - gen_farith2(&helper_cvtqg, rb, rc); 1517 + gen_fcvtqg(rb, rc);
1408 break; 1518 break;
1409 default: 1519 default:
1410 goto invalid_opc; 1520 goto invalid_opc;
@@ -1416,73 +1526,73 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1416,73 +1526,73 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1416 switch (fpfn) { /* f11 & 0x3F */ 1526 switch (fpfn) { /* f11 & 0x3F */
1417 case 0x00: 1527 case 0x00:
1418 /* ADDS */ 1528 /* ADDS */
1419 - gen_farith3(&helper_adds, ra, rb, rc); 1529 + gen_fadds(ra, rb, rc);
1420 break; 1530 break;
1421 case 0x01: 1531 case 0x01:
1422 /* SUBS */ 1532 /* SUBS */
1423 - gen_farith3(&helper_subs, ra, rb, rc); 1533 + gen_fsubs(ra, rb, rc);
1424 break; 1534 break;
1425 case 0x02: 1535 case 0x02:
1426 /* MULS */ 1536 /* MULS */
1427 - gen_farith3(&helper_muls, ra, rb, rc); 1537 + gen_fmuls(ra, rb, rc);
1428 break; 1538 break;
1429 case 0x03: 1539 case 0x03:
1430 /* DIVS */ 1540 /* DIVS */
1431 - gen_farith3(&helper_divs, ra, rb, rc); 1541 + gen_fdivs(ra, rb, rc);
1432 break; 1542 break;
1433 case 0x20: 1543 case 0x20:
1434 /* ADDT */ 1544 /* ADDT */
1435 - gen_farith3(&helper_addt, ra, rb, rc); 1545 + gen_faddt(ra, rb, rc);
1436 break; 1546 break;
1437 case 0x21: 1547 case 0x21:
1438 /* SUBT */ 1548 /* SUBT */
1439 - gen_farith3(&helper_subt, ra, rb, rc); 1549 + gen_fsubt(ra, rb, rc);
1440 break; 1550 break;
1441 case 0x22: 1551 case 0x22:
1442 /* MULT */ 1552 /* MULT */
1443 - gen_farith3(&helper_mult, ra, rb, rc); 1553 + gen_fmult(ra, rb, rc);
1444 break; 1554 break;
1445 case 0x23: 1555 case 0x23:
1446 /* DIVT */ 1556 /* DIVT */
1447 - gen_farith3(&helper_divt, ra, rb, rc); 1557 + gen_fdivt(ra, rb, rc);
1448 break; 1558 break;
1449 case 0x24: 1559 case 0x24:
1450 /* CMPTUN */ 1560 /* CMPTUN */
1451 - gen_farith3(&helper_cmptun, ra, rb, rc); 1561 + gen_fcmptun(ra, rb, rc);
1452 break; 1562 break;
1453 case 0x25: 1563 case 0x25:
1454 /* CMPTEQ */ 1564 /* CMPTEQ */
1455 - gen_farith3(&helper_cmpteq, ra, rb, rc); 1565 + gen_fcmpteq(ra, rb, rc);
1456 break; 1566 break;
1457 case 0x26: 1567 case 0x26:
1458 /* CMPTLT */ 1568 /* CMPTLT */
1459 - gen_farith3(&helper_cmptlt, ra, rb, rc); 1569 + gen_fcmptlt(ra, rb, rc);
1460 break; 1570 break;
1461 case 0x27: 1571 case 0x27:
1462 /* CMPTLE */ 1572 /* CMPTLE */
1463 - gen_farith3(&helper_cmptle, ra, rb, rc); 1573 + gen_fcmptle(ra, rb, rc);
1464 break; 1574 break;
1465 case 0x2C: 1575 case 0x2C:
1466 /* XXX: incorrect */ 1576 /* XXX: incorrect */
1467 if (fn11 == 0x2AC || fn11 == 0x6AC) { 1577 if (fn11 == 0x2AC || fn11 == 0x6AC) {
1468 /* CVTST */ 1578 /* CVTST */
1469 - gen_farith2(&helper_cvtst, rb, rc); 1579 + gen_fcvtst(rb, rc);
1470 } else { 1580 } else {
1471 /* CVTTS */ 1581 /* CVTTS */
1472 - gen_farith2(&helper_cvtts, rb, rc); 1582 + gen_fcvtts(rb, rc);
1473 } 1583 }
1474 break; 1584 break;
1475 case 0x2F: 1585 case 0x2F:
1476 /* CVTTQ */ 1586 /* CVTTQ */
1477 - gen_farith2(&helper_cvttq, rb, rc); 1587 + gen_fcvttq(rb, rc);
1478 break; 1588 break;
1479 case 0x3C: 1589 case 0x3C:
1480 /* CVTQS */ 1590 /* CVTQS */
1481 - gen_farith2(&helper_cvtqs, rb, rc); 1591 + gen_fcvtqs(rb, rc);
1482 break; 1592 break;
1483 case 0x3E: 1593 case 0x3E:
1484 /* CVTQT */ 1594 /* CVTQT */
1485 - gen_farith2(&helper_cvtqt, rb, rc); 1595 + gen_fcvtqt(rb, rc);
1486 break; 1596 break;
1487 default: 1597 default:
1488 goto invalid_opc; 1598 goto invalid_opc;
@@ -1492,7 +1602,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1492,7 +1602,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1492 switch (fn11) { 1602 switch (fn11) {
1493 case 0x010: 1603 case 0x010:
1494 /* CVTLQ */ 1604 /* CVTLQ */
1495 - gen_farith2(&helper_cvtlq, rb, rc); 1605 + gen_fcvtlq(rb, rc);
1496 break; 1606 break;
1497 case 0x020: 1607 case 0x020:
1498 if (likely(rc != 31)) { 1608 if (likely(rc != 31)) {
@@ -1501,67 +1611,67 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1501,67 +1611,67 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1501 tcg_gen_mov_i64(cpu_fir[rc], cpu_fir[ra]); 1611 tcg_gen_mov_i64(cpu_fir[rc], cpu_fir[ra]);
1502 else 1612 else
1503 /* CPYS */ 1613 /* CPYS */
1504 - gen_farith3(&helper_cpys, ra, rb, rc); 1614 + gen_fcpys(ra, rb, rc);
1505 } 1615 }
1506 break; 1616 break;
1507 case 0x021: 1617 case 0x021:
1508 /* CPYSN */ 1618 /* CPYSN */
1509 - gen_farith3(&helper_cpysn, ra, rb, rc); 1619 + gen_fcpysn(ra, rb, rc);
1510 break; 1620 break;
1511 case 0x022: 1621 case 0x022:
1512 /* CPYSE */ 1622 /* CPYSE */
1513 - gen_farith3(&helper_cpyse, ra, rb, rc); 1623 + gen_fcpyse(ra, rb, rc);
1514 break; 1624 break;
1515 case 0x024: 1625 case 0x024:
1516 /* MT_FPCR */ 1626 /* MT_FPCR */
1517 if (likely(ra != 31)) 1627 if (likely(ra != 31))
1518 - tcg_gen_helper_0_1(helper_store_fpcr, cpu_fir[ra]); 1628 + gen_helper_store_fpcr(cpu_fir[ra]);
1519 else { 1629 else {
1520 TCGv tmp = tcg_const_i64(0); 1630 TCGv tmp = tcg_const_i64(0);
1521 - tcg_gen_helper_0_1(helper_store_fpcr, tmp); 1631 + gen_helper_store_fpcr(tmp);
1522 tcg_temp_free(tmp); 1632 tcg_temp_free(tmp);
1523 } 1633 }
1524 break; 1634 break;
1525 case 0x025: 1635 case 0x025:
1526 /* MF_FPCR */ 1636 /* MF_FPCR */
1527 if (likely(ra != 31)) 1637 if (likely(ra != 31))
1528 - tcg_gen_helper_1_0(helper_load_fpcr, cpu_fir[ra]); 1638 + gen_helper_load_fpcr(cpu_fir[ra]);
1529 break; 1639 break;
1530 case 0x02A: 1640 case 0x02A:
1531 /* FCMOVEQ */ 1641 /* FCMOVEQ */
1532 - gen_fcmov(&helper_cmpfeq, ra, rb, rc); 1642 + gen_fcmpfeq(ra, rb, rc);
1533 break; 1643 break;
1534 case 0x02B: 1644 case 0x02B:
1535 /* FCMOVNE */ 1645 /* FCMOVNE */
1536 - gen_fcmov(&helper_cmpfne, ra, rb, rc); 1646 + gen_fcmpfne(ra, rb, rc);
1537 break; 1647 break;
1538 case 0x02C: 1648 case 0x02C:
1539 /* FCMOVLT */ 1649 /* FCMOVLT */
1540 - gen_fcmov(&helper_cmpflt, ra, rb, rc); 1650 + gen_fcmpflt(ra, rb, rc);
1541 break; 1651 break;
1542 case 0x02D: 1652 case 0x02D:
1543 /* FCMOVGE */ 1653 /* FCMOVGE */
1544 - gen_fcmov(&helper_cmpfge, ra, rb, rc); 1654 + gen_fcmpfge(ra, rb, rc);
1545 break; 1655 break;
1546 case 0x02E: 1656 case 0x02E:
1547 /* FCMOVLE */ 1657 /* FCMOVLE */
1548 - gen_fcmov(&helper_cmpfle, ra, rb, rc); 1658 + gen_fcmpfle(ra, rb, rc);
1549 break; 1659 break;
1550 case 0x02F: 1660 case 0x02F:
1551 /* FCMOVGT */ 1661 /* FCMOVGT */
1552 - gen_fcmov(&helper_cmpfgt, ra, rb, rc); 1662 + gen_fcmpfgt(ra, rb, rc);
1553 break; 1663 break;
1554 case 0x030: 1664 case 0x030:
1555 /* CVTQL */ 1665 /* CVTQL */
1556 - gen_farith2(&helper_cvtql, rb, rc); 1666 + gen_fcvtql(rb, rc);
1557 break; 1667 break;
1558 case 0x130: 1668 case 0x130:
1559 /* CVTQL/V */ 1669 /* CVTQL/V */
1560 - gen_farith2(&helper_cvtqlv, rb, rc); 1670 + gen_fcvtqlv(rb, rc);
1561 break; 1671 break;
1562 case 0x530: 1672 case 0x530:
1563 /* CVTQL/SV */ 1673 /* CVTQL/SV */
1564 - gen_farith2(&helper_cvtqlsv, rb, rc); 1674 + gen_fcvtqlsv(rb, rc);
1565 break; 1675 break;
1566 default: 1676 default:
1567 goto invalid_opc; 1677 goto invalid_opc;
@@ -1598,12 +1708,12 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1598,12 +1708,12 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1598 case 0xC000: 1708 case 0xC000:
1599 /* RPCC */ 1709 /* RPCC */
1600 if (ra != 31) 1710 if (ra != 31)
1601 - tcg_gen_helper_1_0(helper_load_pcc, cpu_ir[ra]); 1711 + gen_helper_load_pcc(cpu_ir[ra]);
1602 break; 1712 break;
1603 case 0xE000: 1713 case 0xE000:
1604 /* RC */ 1714 /* RC */
1605 if (ra != 31) 1715 if (ra != 31)
1606 - tcg_gen_helper_1_0(helper_rc, cpu_ir[ra]); 1716 + gen_helper_rc(cpu_ir[ra]);
1607 break; 1717 break;
1608 case 0xE800: 1718 case 0xE800:
1609 /* ECB */ 1719 /* ECB */
@@ -1617,7 +1727,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1617,7 +1727,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1617 case 0xF000: 1727 case 0xF000:
1618 /* RS */ 1728 /* RS */
1619 if (ra != 31) 1729 if (ra != 31)
1620 - tcg_gen_helper_1_0(helper_rs, cpu_ir[ra]); 1730 + gen_helper_rs(cpu_ir[ra]);
1621 break; 1731 break;
1622 case 0xF800: 1732 case 0xF800:
1623 /* WH64 */ 1733 /* WH64 */
@@ -1636,7 +1746,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1636,7 +1746,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1636 goto invalid_opc; 1746 goto invalid_opc;
1637 if (ra != 31) { 1747 if (ra != 31) {
1638 TCGv tmp = tcg_const_i32(insn & 0xFF); 1748 TCGv tmp = tcg_const_i32(insn & 0xFF);
1639 - tcg_gen_helper_1_2(helper_mfpr, cpu_ir[ra], tmp, cpu_ir[ra]); 1749 + gen_helper_mfpr(cpu_ir[ra], tmp, cpu_ir[ra]);
1640 tcg_temp_free(tmp); 1750 tcg_temp_free(tmp);
1641 } 1751 }
1642 break; 1752 break;
@@ -1673,7 +1783,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1673,7 +1783,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1673 if (!ctx->pal_mode) 1783 if (!ctx->pal_mode)
1674 goto invalid_opc; 1784 goto invalid_opc;
1675 if (ra != 31) { 1785 if (ra != 31) {
1676 - TCGv addr = tcg_temp_new(TCG_TYPE_I64); 1786 + TCGv addr = tcg_temp_new();
1677 if (rb != 31) 1787 if (rb != 31)
1678 tcg_gen_addi_i64(addr, cpu_ir[rb], disp12); 1788 tcg_gen_addi_i64(addr, cpu_ir[rb], disp12);
1679 else 1789 else
@@ -1681,27 +1791,27 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1681,27 +1791,27 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1681 switch ((insn >> 12) & 0xF) { 1791 switch ((insn >> 12) & 0xF) {
1682 case 0x0: 1792 case 0x0:
1683 /* Longword physical access */ 1793 /* Longword physical access */
1684 - tcg_gen_helper_0_2(helper_ldl_raw, cpu_ir[ra], addr); 1794 + gen_helper_ldl_raw(cpu_ir[ra], addr);
1685 break; 1795 break;
1686 case 0x1: 1796 case 0x1:
1687 /* Quadword physical access */ 1797 /* Quadword physical access */
1688 - tcg_gen_helper_0_2(helper_ldq_raw, cpu_ir[ra], addr); 1798 + gen_helper_ldq_raw(cpu_ir[ra], addr);
1689 break; 1799 break;
1690 case 0x2: 1800 case 0x2:
1691 /* Longword physical access with lock */ 1801 /* Longword physical access with lock */
1692 - tcg_gen_helper_0_2(helper_ldl_l_raw, cpu_ir[ra], addr); 1802 + gen_helper_ldl_l_raw(cpu_ir[ra], addr);
1693 break; 1803 break;
1694 case 0x3: 1804 case 0x3:
1695 /* Quadword physical access with lock */ 1805 /* Quadword physical access with lock */
1696 - tcg_gen_helper_0_2(helper_ldq_l_raw, cpu_ir[ra], addr); 1806 + gen_helper_ldq_l_raw(cpu_ir[ra], addr);
1697 break; 1807 break;
1698 case 0x4: 1808 case 0x4:
1699 /* Longword virtual PTE fetch */ 1809 /* Longword virtual PTE fetch */
1700 - tcg_gen_helper_0_2(helper_ldl_kernel, cpu_ir[ra], addr); 1810 + gen_helper_ldl_kernel(cpu_ir[ra], addr);
1701 break; 1811 break;
1702 case 0x5: 1812 case 0x5:
1703 /* Quadword virtual PTE fetch */ 1813 /* Quadword virtual PTE fetch */
1704 - tcg_gen_helper_0_2(helper_ldq_kernel, cpu_ir[ra], addr); 1814 + gen_helper_ldq_kernel(cpu_ir[ra], addr);
1705 break; 1815 break;
1706 case 0x6: 1816 case 0x6:
1707 /* Incpu_ir[ra]id */ 1817 /* Incpu_ir[ra]id */
@@ -1711,13 +1821,13 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1711,13 +1821,13 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1711 goto incpu_ir[ra]id_opc; 1821 goto incpu_ir[ra]id_opc;
1712 case 0x8: 1822 case 0x8:
1713 /* Longword virtual access */ 1823 /* Longword virtual access */
1714 - tcg_gen_helper_1_1(helper_st_virt_to_phys, addr, addr);  
1715 - tcg_gen_helper_0_2(helper_ldl_raw, cpu_ir[ra], addr); 1824 + gen_helper_st_virt_to_phys(addr, addr);
  1825 + gen_helper_ldl_raw(cpu_ir[ra], addr);
1716 break; 1826 break;
1717 case 0x9: 1827 case 0x9:
1718 /* Quadword virtual access */ 1828 /* Quadword virtual access */
1719 - tcg_gen_helper_1_1(helper_st_virt_to_phys, addr, addr);  
1720 - tcg_gen_helper_0_2(helper_ldq_raw, cpu_ir[ra], addr); 1829 + gen_helper_st_virt_to_phys(addr, addr);
  1830 + gen_helper_ldq_raw(cpu_ir[ra], addr);
1721 break; 1831 break;
1722 case 0xA: 1832 case 0xA:
1723 /* Longword virtual access with protection check */ 1833 /* Longword virtual access with protection check */
@@ -1729,33 +1839,33 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1729,33 +1839,33 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1729 break; 1839 break;
1730 case 0xC: 1840 case 0xC:
1731 /* Longword virtual access with altenate access mode */ 1841 /* Longword virtual access with altenate access mode */
1732 - tcg_gen_helper_0_0(helper_set_alt_mode);  
1733 - tcg_gen_helper_1_1(helper_st_virt_to_phys, addr, addr);  
1734 - tcg_gen_helper_0_2(helper_ldl_raw, cpu_ir[ra], addr);  
1735 - tcg_gen_helper_0_0(helper_restore_mode); 1842 + gen_helper_set_alt_mode();
  1843 + gen_helper_st_virt_to_phys(addr, addr);
  1844 + gen_helper_ldl_raw(cpu_ir[ra], addr);
  1845 + gen_helper_restore_mode();
1736 break; 1846 break;
1737 case 0xD: 1847 case 0xD:
1738 /* Quadword virtual access with altenate access mode */ 1848 /* Quadword virtual access with altenate access mode */
1739 - tcg_gen_helper_0_0(helper_set_alt_mode);  
1740 - tcg_gen_helper_1_1(helper_st_virt_to_phys, addr, addr);  
1741 - tcg_gen_helper_0_2(helper_ldq_raw, cpu_ir[ra], addr);  
1742 - tcg_gen_helper_0_0(helper_restore_mode); 1849 + gen_helper_set_alt_mode();
  1850 + gen_helper_st_virt_to_phys(addr, addr);
  1851 + gen_helper_ldq_raw(cpu_ir[ra], addr);
  1852 + gen_helper_restore_mode();
1743 break; 1853 break;
1744 case 0xE: 1854 case 0xE:
1745 /* Longword virtual access with alternate access mode and 1855 /* Longword virtual access with alternate access mode and
1746 * protection checks 1856 * protection checks
1747 */ 1857 */
1748 - tcg_gen_helper_0_0(helper_set_alt_mode);  
1749 - tcg_gen_helper_0_2(helper_ldl_data, cpu_ir[ra], addr);  
1750 - tcg_gen_helper_0_0(helper_restore_mode); 1858 + gen_helper_set_alt_mode();
  1859 + gen_helper_ldl_data(cpu_ir[ra], addr);
  1860 + gen_helper_restore_mode();
1751 break; 1861 break;
1752 case 0xF: 1862 case 0xF:
1753 /* Quadword virtual access with alternate access mode and 1863 /* Quadword virtual access with alternate access mode and
1754 * protection checks 1864 * protection checks
1755 */ 1865 */
1756 - tcg_gen_helper_0_0(helper_set_alt_mode);  
1757 - tcg_gen_helper_0_2(helper_ldq_data, cpu_ir[ra], addr);  
1758 - tcg_gen_helper_0_0(helper_restore_mode); 1866 + gen_helper_set_alt_mode();
  1867 + gen_helper_ldq_data(cpu_ir[ra], addr);
  1868 + gen_helper_restore_mode();
1759 break; 1869 break;
1760 } 1870 }
1761 tcg_temp_free(addr); 1871 tcg_temp_free(addr);
@@ -1794,7 +1904,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1794,7 +1904,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1794 if (islit) 1904 if (islit)
1795 tcg_gen_movi_i64(cpu_ir[rc], ctpop64(lit)); 1905 tcg_gen_movi_i64(cpu_ir[rc], ctpop64(lit));
1796 else 1906 else
1797 - tcg_gen_helper_1_1(helper_ctpop, cpu_ir[rc], cpu_ir[rb]); 1907 + gen_helper_ctpop(cpu_ir[rc], cpu_ir[rb]);
1798 } 1908 }
1799 break; 1909 break;
1800 case 0x31: 1910 case 0x31:
@@ -1812,7 +1922,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1812,7 +1922,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1812 if (islit) 1922 if (islit)
1813 tcg_gen_movi_i64(cpu_ir[rc], clz64(lit)); 1923 tcg_gen_movi_i64(cpu_ir[rc], clz64(lit));
1814 else 1924 else
1815 - tcg_gen_helper_1_1(helper_ctlz, cpu_ir[rc], cpu_ir[rb]); 1925 + gen_helper_ctlz(cpu_ir[rc], cpu_ir[rb]);
1816 } 1926 }
1817 break; 1927 break;
1818 case 0x33: 1928 case 0x33:
@@ -1823,7 +1933,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1823,7 +1933,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1823 if (islit) 1933 if (islit)
1824 tcg_gen_movi_i64(cpu_ir[rc], ctz64(lit)); 1934 tcg_gen_movi_i64(cpu_ir[rc], ctz64(lit));
1825 else 1935 else
1826 - tcg_gen_helper_1_1(helper_cttz, cpu_ir[rc], cpu_ir[rb]); 1936 + gen_helper_cttz(cpu_ir[rc], cpu_ir[rb]);
1827 } 1937 }
1828 break; 1938 break;
1829 case 0x34: 1939 case 0x34:
@@ -1926,16 +2036,16 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1926,16 +2036,16 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1926 if (!(ctx->amask & AMASK_FIX)) 2036 if (!(ctx->amask & AMASK_FIX))
1927 goto invalid_opc; 2037 goto invalid_opc;
1928 if (rc != 31) { 2038 if (rc != 31) {
1929 - TCGv tmp1 = tcg_temp_new(TCG_TYPE_I32); 2039 + TCGv_i32 tmp1 = tcg_temp_new_i32();
1930 if (ra != 31) 2040 if (ra != 31)
1931 - tcg_gen_helper_1_1(helper_s_to_memory, tmp1, cpu_fir[ra]); 2041 + gen_helper_s_to_memory(tmp1, cpu_fir[ra]);
1932 else { 2042 else {
1933 TCGv tmp2 = tcg_const_i64(0); 2043 TCGv tmp2 = tcg_const_i64(0);
1934 - tcg_gen_helper_1_1(helper_s_to_memory, tmp1, tmp2); 2044 + gen_helper_s_to_memory(tmp1, tmp2);
1935 tcg_temp_free(tmp2); 2045 tcg_temp_free(tmp2);
1936 } 2046 }
1937 tcg_gen_ext_i32_i64(cpu_ir[rc], tmp1); 2047 tcg_gen_ext_i32_i64(cpu_ir[rc], tmp1);
1938 - tcg_temp_free(tmp1); 2048 + tcg_temp_free_i32(tmp1);
1939 } 2049 }
1940 break; 2050 break;
1941 default: 2051 default:
@@ -1952,10 +2062,10 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1952,10 +2062,10 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1952 else { 2062 else {
1953 TCGv tmp1 = tcg_const_i32(insn & 0xFF); 2063 TCGv tmp1 = tcg_const_i32(insn & 0xFF);
1954 if (ra != 31) 2064 if (ra != 31)
1955 - tcg_gen_helper(helper_mtpr, tmp1, cpu_ir[ra]); 2065 + gen_helper_mtpr(tmp1, cpu_ir[ra]);
1956 else { 2066 else {
1957 TCGv tmp2 = tcg_const_i64(0); 2067 TCGv tmp2 = tcg_const_i64(0);
1958 - tcg_gen_helper(helper_mtpr, tmp1, tmp2); 2068 + gen_helper_mtpr(tmp1, tmp2);
1959 tcg_temp_free(tmp2); 2069 tcg_temp_free(tmp2);
1960 } 2070 }
1961 tcg_temp_free(tmp1); 2071 tcg_temp_free(tmp1);
@@ -1972,16 +2082,16 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1972,16 +2082,16 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1972 goto invalid_opc; 2082 goto invalid_opc;
1973 if (rb == 31) { 2083 if (rb == 31) {
1974 /* "Old" alpha */ 2084 /* "Old" alpha */
1975 - tcg_gen_helper_0_0(helper_hw_rei); 2085 + gen_helper_hw_rei();
1976 } else { 2086 } else {
1977 TCGv tmp; 2087 TCGv tmp;
1978 2088
1979 if (ra != 31) { 2089 if (ra != 31) {
1980 - tmp = tcg_temp_new(TCG_TYPE_I64); 2090 + tmp = tcg_temp_new();
1981 tcg_gen_addi_i64(tmp, cpu_ir[rb], (((int64_t)insn << 51) >> 51)); 2091 tcg_gen_addi_i64(tmp, cpu_ir[rb], (((int64_t)insn << 51) >> 51));
1982 } else 2092 } else
1983 tmp = tcg_const_i64(((int64_t)insn << 51) >> 51); 2093 tmp = tcg_const_i64(((int64_t)insn << 51) >> 51);
1984 - tcg_gen_helper_0_1(helper_hw_ret, tmp); 2094 + gen_helper_hw_ret(tmp);
1985 tcg_temp_free(tmp); 2095 tcg_temp_free(tmp);
1986 } 2096 }
1987 ret = 2; 2097 ret = 2;
@@ -1996,7 +2106,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -1996,7 +2106,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
1996 goto invalid_opc; 2106 goto invalid_opc;
1997 else { 2107 else {
1998 TCGv addr, val; 2108 TCGv addr, val;
1999 - addr = tcg_temp_new(TCG_TYPE_I64); 2109 + addr = tcg_temp_new();
2000 if (rb != 31) 2110 if (rb != 31)
2001 tcg_gen_addi_i64(addr, cpu_ir[rb], disp12); 2111 tcg_gen_addi_i64(addr, cpu_ir[rb], disp12);
2002 else 2112 else
@@ -2004,35 +2114,35 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -2004,35 +2114,35 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
2004 if (ra != 31) 2114 if (ra != 31)
2005 val = cpu_ir[ra]; 2115 val = cpu_ir[ra];
2006 else { 2116 else {
2007 - val = tcg_temp_new(TCG_TYPE_I64); 2117 + val = tcg_temp_new();
2008 tcg_gen_movi_i64(val, 0); 2118 tcg_gen_movi_i64(val, 0);
2009 } 2119 }
2010 switch ((insn >> 12) & 0xF) { 2120 switch ((insn >> 12) & 0xF) {
2011 case 0x0: 2121 case 0x0:
2012 /* Longword physical access */ 2122 /* Longword physical access */
2013 - tcg_gen_helper_0_2(helper_stl_raw, val, addr); 2123 + gen_helper_stl_raw(val, addr);
2014 break; 2124 break;
2015 case 0x1: 2125 case 0x1:
2016 /* Quadword physical access */ 2126 /* Quadword physical access */
2017 - tcg_gen_helper_0_2(helper_stq_raw, val, addr); 2127 + gen_helper_stq_raw(val, addr);
2018 break; 2128 break;
2019 case 0x2: 2129 case 0x2:
2020 /* Longword physical access with lock */ 2130 /* Longword physical access with lock */
2021 - tcg_gen_helper_1_2(helper_stl_c_raw, val, val, addr); 2131 + gen_helper_stl_c_raw(val, val, addr);
2022 break; 2132 break;
2023 case 0x3: 2133 case 0x3:
2024 /* Quadword physical access with lock */ 2134 /* Quadword physical access with lock */
2025 - tcg_gen_helper_1_2(helper_stq_c_raw, val, val, addr); 2135 + gen_helper_stq_c_raw(val, val, addr);
2026 break; 2136 break;
2027 case 0x4: 2137 case 0x4:
2028 /* Longword virtual access */ 2138 /* Longword virtual access */
2029 - tcg_gen_helper_1_1(helper_st_virt_to_phys, addr, addr);  
2030 - tcg_gen_helper_0_2(helper_stl_raw, val, addr); 2139 + gen_helper_st_virt_to_phys(addr, addr);
  2140 + gen_helper_stl_raw(val, addr);
2031 break; 2141 break;
2032 case 0x5: 2142 case 0x5:
2033 /* Quadword virtual access */ 2143 /* Quadword virtual access */
2034 - tcg_gen_helper_1_1(helper_st_virt_to_phys, addr, addr);  
2035 - tcg_gen_helper_0_2(helper_stq_raw, val, addr); 2144 + gen_helper_st_virt_to_phys(addr, addr);
  2145 + gen_helper_stq_raw(val, addr);
2036 break; 2146 break;
2037 case 0x6: 2147 case 0x6:
2038 /* Invalid */ 2148 /* Invalid */
@@ -2054,17 +2164,17 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -2054,17 +2164,17 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
2054 goto invalid_opc; 2164 goto invalid_opc;
2055 case 0xC: 2165 case 0xC:
2056 /* Longword virtual access with alternate access mode */ 2166 /* Longword virtual access with alternate access mode */
2057 - tcg_gen_helper_0_0(helper_set_alt_mode);  
2058 - tcg_gen_helper_1_1(helper_st_virt_to_phys, addr, addr);  
2059 - tcg_gen_helper_0_2(helper_stl_raw, val, addr);  
2060 - tcg_gen_helper_0_0(helper_restore_mode); 2167 + gen_helper_set_alt_mode();
  2168 + gen_helper_st_virt_to_phys(addr, addr);
  2169 + gen_helper_stl_raw(val, addr);
  2170 + gen_helper_restore_mode();
2061 break; 2171 break;
2062 case 0xD: 2172 case 0xD:
2063 /* Quadword virtual access with alternate access mode */ 2173 /* Quadword virtual access with alternate access mode */
2064 - tcg_gen_helper_0_0(helper_set_alt_mode);  
2065 - tcg_gen_helper_1_1(helper_st_virt_to_phys, addr, addr);  
2066 - tcg_gen_helper_0_2(helper_stl_raw, val, addr);  
2067 - tcg_gen_helper_0_0(helper_restore_mode); 2174 + gen_helper_set_alt_mode();
  2175 + gen_helper_st_virt_to_phys(addr, addr);
  2176 + gen_helper_stl_raw(val, addr);
  2177 + gen_helper_restore_mode();
2068 break; 2178 break;
2069 case 0xE: 2179 case 0xE:
2070 /* Invalid */ 2180 /* Invalid */
@@ -2151,19 +2261,10 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -2151,19 +2261,10 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
2151 tcg_gen_movi_i64(cpu_pc, ctx->pc + (int64_t)(disp21 << 2)); 2261 tcg_gen_movi_i64(cpu_pc, ctx->pc + (int64_t)(disp21 << 2));
2152 ret = 1; 2262 ret = 1;
2153 break; 2263 break;
2154 - case 0x31:  
2155 - /* FBEQ */  
2156 - gen_fbcond(ctx, &helper_cmpfeq, ra, disp16);  
2157 - ret = 1;  
2158 - break;  
2159 - case 0x32:  
2160 - /* FBLT */  
2161 - gen_fbcond(ctx, &helper_cmpflt, ra, disp16);  
2162 - ret = 1;  
2163 - break;  
2164 - case 0x33:  
2165 - /* FBLE */  
2166 - gen_fbcond(ctx, &helper_cmpfle, ra, disp16); 2264 + case 0x31: /* FBEQ */
  2265 + case 0x32: /* FBLT */
  2266 + case 0x33: /* FBLE */
  2267 + gen_fbcond(ctx, opc, ra, disp16);
2167 ret = 1; 2268 ret = 1;
2168 break; 2269 break;
2169 case 0x34: 2270 case 0x34:
@@ -2173,19 +2274,10 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) @@ -2173,19 +2274,10 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
2173 tcg_gen_movi_i64(cpu_pc, ctx->pc + (int64_t)(disp21 << 2)); 2274 tcg_gen_movi_i64(cpu_pc, ctx->pc + (int64_t)(disp21 << 2));
2174 ret = 1; 2275 ret = 1;
2175 break; 2276 break;
2176 - case 0x35:  
2177 - /* FBNE */  
2178 - gen_fbcond(ctx, &helper_cmpfne, ra, disp16);  
2179 - ret = 1;  
2180 - break;  
2181 - case 0x36:  
2182 - /* FBGE */  
2183 - gen_fbcond(ctx, &helper_cmpfge, ra, disp16);  
2184 - ret = 1;  
2185 - break;  
2186 - case 0x37:  
2187 - /* FBGT */  
2188 - gen_fbcond(ctx, &helper_cmpfgt, ra, disp16); 2277 + case 0x35: /* FBNE */
  2278 + case 0x36: /* FBGE */
  2279 + case 0x37: /* FBGT */
  2280 + gen_fbcond(ctx, opc, ra, disp16);
2189 ret = 1; 2281 ret = 1;
2190 break; 2282 break;
2191 case 0x38: 2283 case 0x38:
@@ -2326,7 +2418,7 @@ static always_inline void gen_intermediate_code_internal (CPUState *env, @@ -2326,7 +2418,7 @@ static always_inline void gen_intermediate_code_internal (CPUState *env,
2326 tcg_gen_movi_i64(cpu_pc, ctx.pc); 2418 tcg_gen_movi_i64(cpu_pc, ctx.pc);
2327 } 2419 }
2328 #if defined (DO_TB_FLUSH) 2420 #if defined (DO_TB_FLUSH)
2329 - tcg_gen_helper_0_0(helper_tb_flush); 2421 + gen_helper_tb_flush();
2330 #endif 2422 #endif
2331 if (tb->cflags & CF_LAST_IO) 2423 if (tb->cflags & CF_LAST_IO)
2332 gen_io_end(); 2424 gen_io_end();
target-arm/helpers.h
1 -#define DEF_HELPER(name, ret, args) ret glue(helper_,name) args;  
2 -  
3 -#ifdef GEN_HELPER  
4 -#define DEF_HELPER_0_0(name, ret, args) \  
5 -DEF_HELPER(name, ret, args) \  
6 -static inline void gen_helper_##name(void) \  
7 -{ \  
8 - tcg_gen_helper_0_0(helper_##name); \  
9 -}  
10 -#define DEF_HELPER_0_1(name, ret, args) \  
11 -DEF_HELPER(name, ret, args) \  
12 -static inline void gen_helper_##name(TCGv arg1) \  
13 -{ \  
14 - tcg_gen_helper_0_1(helper_##name, arg1); \  
15 -}  
16 -#define DEF_HELPER_0_2(name, ret, args) \  
17 -DEF_HELPER(name, ret, args) \  
18 -static inline void gen_helper_##name(TCGv arg1, TCGv arg2) \  
19 -{ \  
20 - tcg_gen_helper_0_2(helper_##name, arg1, arg2); \  
21 -}  
22 -#define DEF_HELPER_0_3(name, ret, args) \  
23 -DEF_HELPER(name, ret, args) \  
24 -static inline void gen_helper_##name( \  
25 - TCGv arg1, TCGv arg2, TCGv arg3) \  
26 -{ \  
27 - tcg_gen_helper_0_3(helper_##name, arg1, arg2, arg3); \  
28 -}  
29 -#define DEF_HELPER_1_0(name, ret, args) \  
30 -DEF_HELPER(name, ret, args) \  
31 -static inline void gen_helper_##name(TCGv ret) \  
32 -{ \  
33 - tcg_gen_helper_1_0(helper_##name, ret); \  
34 -}  
35 -#define DEF_HELPER_1_1(name, ret, args) \  
36 -DEF_HELPER(name, ret, args) \  
37 -static inline void gen_helper_##name(TCGv ret, TCGv arg1) \  
38 -{ \  
39 - tcg_gen_helper_1_1(helper_##name, ret, arg1); \  
40 -}  
41 -#define DEF_HELPER_1_2(name, ret, args) \  
42 -DEF_HELPER(name, ret, args) \  
43 -static inline void gen_helper_##name(TCGv ret, TCGv arg1, TCGv arg2) \  
44 -{ \  
45 - tcg_gen_helper_1_2(helper_##name, ret, arg1, arg2); \  
46 -}  
47 -#define DEF_HELPER_1_3(name, ret, args) \  
48 -DEF_HELPER(name, ret, args) \  
49 -static inline void gen_helper_##name(TCGv ret, \  
50 - TCGv arg1, TCGv arg2, TCGv arg3) \  
51 -{ \  
52 - tcg_gen_helper_1_3(helper_##name, ret, arg1, arg2, arg3); \  
53 -}  
54 -#define DEF_HELPER_1_4(name, ret, args) \  
55 -DEF_HELPER(name, ret, args) \  
56 -static inline void gen_helper_##name(TCGv ret, \  
57 - TCGv arg1, TCGv arg2, TCGv arg3, TCGv arg4) \  
58 -{ \  
59 - tcg_gen_helper_1_4(helper_##name, ret, arg1, arg2, arg3, arg4); \  
60 -}  
61 -#else /* !GEN_HELPER */  
62 -#define DEF_HELPER_0_0 DEF_HELPER  
63 -#define DEF_HELPER_0_1 DEF_HELPER  
64 -#define DEF_HELPER_0_2 DEF_HELPER  
65 -#define DEF_HELPER_0_3 DEF_HELPER  
66 -#define DEF_HELPER_1_0 DEF_HELPER  
67 -#define DEF_HELPER_1_1 DEF_HELPER  
68 -#define DEF_HELPER_1_2 DEF_HELPER  
69 -#define DEF_HELPER_1_3 DEF_HELPER  
70 -#define DEF_HELPER_1_4 DEF_HELPER  
71 -#define HELPER(x) glue(helper_,x)  
72 -#endif  
73 -  
74 -DEF_HELPER_1_1(clz, uint32_t, (uint32_t))  
75 -DEF_HELPER_1_1(sxtb16, uint32_t, (uint32_t))  
76 -DEF_HELPER_1_1(uxtb16, uint32_t, (uint32_t))  
77 -  
78 -DEF_HELPER_1_2(add_setq, uint32_t, (uint32_t, uint32_t))  
79 -DEF_HELPER_1_2(add_saturate, uint32_t, (uint32_t, uint32_t))  
80 -DEF_HELPER_1_2(sub_saturate, uint32_t, (uint32_t, uint32_t))  
81 -DEF_HELPER_1_2(add_usaturate, uint32_t, (uint32_t, uint32_t))  
82 -DEF_HELPER_1_2(sub_usaturate, uint32_t, (uint32_t, uint32_t))  
83 -DEF_HELPER_1_1(double_saturate, uint32_t, (int32_t))  
84 -DEF_HELPER_1_2(sdiv, int32_t, (int32_t, int32_t))  
85 -DEF_HELPER_1_2(udiv, uint32_t, (uint32_t, uint32_t))  
86 -DEF_HELPER_1_1(rbit, uint32_t, (uint32_t))  
87 -DEF_HELPER_1_1(abs, uint32_t, (uint32_t)) 1 +#include "def-helper.h"
  2 +
  3 +DEF_HELPER_1(clz, i32, i32)
  4 +DEF_HELPER_1(sxtb16, i32, i32)
  5 +DEF_HELPER_1(uxtb16, i32, i32)
  6 +
  7 +DEF_HELPER_2(add_setq, i32, i32, i32)
  8 +DEF_HELPER_2(add_saturate, i32, i32, i32)
  9 +DEF_HELPER_2(sub_saturate, i32, i32, i32)
  10 +DEF_HELPER_2(add_usaturate, i32, i32, i32)
  11 +DEF_HELPER_2(sub_usaturate, i32, i32, i32)
  12 +DEF_HELPER_1(double_saturate, i32, s32)
  13 +DEF_HELPER_2(sdiv, s32, s32, s32)
  14 +DEF_HELPER_2(udiv, i32, i32, i32)
  15 +DEF_HELPER_1(rbit, i32, i32)
  16 +DEF_HELPER_1(abs, i32, i32)
88 17
89 #define PAS_OP(pfx) \ 18 #define PAS_OP(pfx) \
90 - DEF_HELPER_1_3(pfx ## add8, uint32_t, (uint32_t, uint32_t, uint32_t *)) \  
91 - DEF_HELPER_1_3(pfx ## sub8, uint32_t, (uint32_t, uint32_t, uint32_t *)) \  
92 - DEF_HELPER_1_3(pfx ## sub16, uint32_t, (uint32_t, uint32_t, uint32_t *)) \  
93 - DEF_HELPER_1_3(pfx ## add16, uint32_t, (uint32_t, uint32_t, uint32_t *)) \  
94 - DEF_HELPER_1_3(pfx ## addsubx, uint32_t, (uint32_t, uint32_t, uint32_t *)) \  
95 - DEF_HELPER_1_3(pfx ## subaddx, uint32_t, (uint32_t, uint32_t, uint32_t *)) 19 + DEF_HELPER_3(pfx ## add8, i32, i32, i32, ptr) \
  20 + DEF_HELPER_3(pfx ## sub8, i32, i32, i32, ptr) \
  21 + DEF_HELPER_3(pfx ## sub16, i32, i32, i32, ptr) \
  22 + DEF_HELPER_3(pfx ## add16, i32, i32, i32, ptr) \
  23 + DEF_HELPER_3(pfx ## addsubx, i32, i32, i32, ptr) \
  24 + DEF_HELPER_3(pfx ## subaddx, i32, i32, i32, ptr)
96 25
97 PAS_OP(s) 26 PAS_OP(s)
98 PAS_OP(u) 27 PAS_OP(u)
99 #undef PAS_OP 28 #undef PAS_OP
100 29
101 #define PAS_OP(pfx) \ 30 #define PAS_OP(pfx) \
102 - DEF_HELPER_1_2(pfx ## add8, uint32_t, (uint32_t, uint32_t)) \  
103 - DEF_HELPER_1_2(pfx ## sub8, uint32_t, (uint32_t, uint32_t)) \  
104 - DEF_HELPER_1_2(pfx ## sub16, uint32_t, (uint32_t, uint32_t)) \  
105 - DEF_HELPER_1_2(pfx ## add16, uint32_t, (uint32_t, uint32_t)) \  
106 - DEF_HELPER_1_2(pfx ## addsubx, uint32_t, (uint32_t, uint32_t)) \  
107 - DEF_HELPER_1_2(pfx ## subaddx, uint32_t, (uint32_t, uint32_t)) 31 + DEF_HELPER_2(pfx ## add8, i32, i32, i32) \
  32 + DEF_HELPER_2(pfx ## sub8, i32, i32, i32) \
  33 + DEF_HELPER_2(pfx ## sub16, i32, i32, i32) \
  34 + DEF_HELPER_2(pfx ## add16, i32, i32, i32) \
  35 + DEF_HELPER_2(pfx ## addsubx, i32, i32, i32) \
  36 + DEF_HELPER_2(pfx ## subaddx, i32, i32, i32)
108 PAS_OP(q) 37 PAS_OP(q)
109 PAS_OP(sh) 38 PAS_OP(sh)
110 PAS_OP(uq) 39 PAS_OP(uq)
111 PAS_OP(uh) 40 PAS_OP(uh)
112 #undef PAS_OP 41 #undef PAS_OP
113 42
114 -DEF_HELPER_1_2(ssat, uint32_t, (uint32_t, uint32_t))  
115 -DEF_HELPER_1_2(usat, uint32_t, (uint32_t, uint32_t))  
116 -DEF_HELPER_1_2(ssat16, uint32_t, (uint32_t, uint32_t))  
117 -DEF_HELPER_1_2(usat16, uint32_t, (uint32_t, uint32_t))  
118 -  
119 -DEF_HELPER_1_2(usad8, uint32_t, (uint32_t, uint32_t))  
120 -  
121 -DEF_HELPER_1_1(logicq_cc, uint32_t, (uint64_t))  
122 -  
123 -DEF_HELPER_1_3(sel_flags, uint32_t, (uint32_t, uint32_t, uint32_t))  
124 -DEF_HELPER_0_1(exception, void, (uint32_t))  
125 -DEF_HELPER_0_0(wfi, void, (void))  
126 -  
127 -DEF_HELPER_0_2(cpsr_write, void, (uint32_t, uint32_t))  
128 -DEF_HELPER_1_0(cpsr_read, uint32_t, (void))  
129 -  
130 -DEF_HELPER_0_3(v7m_msr, void, (CPUState *, uint32_t, uint32_t))  
131 -DEF_HELPER_1_2(v7m_mrs, uint32_t, (CPUState *, uint32_t))  
132 -  
133 -DEF_HELPER_0_3(set_cp15, void, (CPUState *, uint32_t, uint32_t))  
134 -DEF_HELPER_1_2(get_cp15, uint32_t, (CPUState *, uint32_t))  
135 -  
136 -DEF_HELPER_0_3(set_cp, void, (CPUState *, uint32_t, uint32_t))  
137 -DEF_HELPER_1_2(get_cp, uint32_t, (CPUState *, uint32_t))  
138 -  
139 -DEF_HELPER_1_2(get_r13_banked, uint32_t, (CPUState *, uint32_t))  
140 -DEF_HELPER_0_3(set_r13_banked, void, (CPUState *, uint32_t, uint32_t))  
141 -  
142 -DEF_HELPER_0_2(mark_exclusive, void, (CPUState *, uint32_t))  
143 -DEF_HELPER_1_2(test_exclusive, uint32_t, (CPUState *, uint32_t))  
144 -DEF_HELPER_0_1(clrex, void, (CPUState *))  
145 -  
146 -DEF_HELPER_1_1(get_user_reg, uint32_t, (uint32_t))  
147 -DEF_HELPER_0_2(set_user_reg, void, (uint32_t, uint32_t))  
148 -  
149 -DEF_HELPER_1_1(vfp_get_fpscr, uint32_t, (CPUState *))  
150 -DEF_HELPER_0_2(vfp_set_fpscr, void, (CPUState *, uint32_t))  
151 -  
152 -DEF_HELPER_1_3(vfp_adds, float32, (float32, float32, CPUState *))  
153 -DEF_HELPER_1_3(vfp_addd, float64, (float64, float64, CPUState *))  
154 -DEF_HELPER_1_3(vfp_subs, float32, (float32, float32, CPUState *))  
155 -DEF_HELPER_1_3(vfp_subd, float64, (float64, float64, CPUState *))  
156 -DEF_HELPER_1_3(vfp_muls, float32, (float32, float32, CPUState *))  
157 -DEF_HELPER_1_3(vfp_muld, float64, (float64, float64, CPUState *))  
158 -DEF_HELPER_1_3(vfp_divs, float32, (float32, float32, CPUState *))  
159 -DEF_HELPER_1_3(vfp_divd, float64, (float64, float64, CPUState *))  
160 -DEF_HELPER_1_1(vfp_negs, float32, (float32))  
161 -DEF_HELPER_1_1(vfp_negd, float64, (float64))  
162 -DEF_HELPER_1_1(vfp_abss, float32, (float32))  
163 -DEF_HELPER_1_1(vfp_absd, float64, (float64))  
164 -DEF_HELPER_1_2(vfp_sqrts, float32, (float32, CPUState *))  
165 -DEF_HELPER_1_2(vfp_sqrtd, float64, (float64, CPUState *))  
166 -DEF_HELPER_0_3(vfp_cmps, void, (float32, float32, CPUState *))  
167 -DEF_HELPER_0_3(vfp_cmpd, void, (float64, float64, CPUState *))  
168 -DEF_HELPER_0_3(vfp_cmpes, void, (float32, float32, CPUState *))  
169 -DEF_HELPER_0_3(vfp_cmped, void, (float64, float64, CPUState *))  
170 -  
171 -DEF_HELPER_1_2(vfp_fcvtds, float64, (float32, CPUState *))  
172 -DEF_HELPER_1_2(vfp_fcvtsd, float32, (float64, CPUState *))  
173 -  
174 -DEF_HELPER_1_2(vfp_uitos, float32, (float32, CPUState *))  
175 -DEF_HELPER_1_2(vfp_uitod, float64, (float32, CPUState *))  
176 -DEF_HELPER_1_2(vfp_sitos, float32, (float32, CPUState *))  
177 -DEF_HELPER_1_2(vfp_sitod, float64, (float32, CPUState *))  
178 -  
179 -DEF_HELPER_1_2(vfp_touis, float32, (float32, CPUState *))  
180 -DEF_HELPER_1_2(vfp_touid, float32, (float64, CPUState *))  
181 -DEF_HELPER_1_2(vfp_touizs, float32, (float32, CPUState *))  
182 -DEF_HELPER_1_2(vfp_touizd, float32, (float64, CPUState *))  
183 -DEF_HELPER_1_2(vfp_tosis, float32, (float32, CPUState *))  
184 -DEF_HELPER_1_2(vfp_tosid, float32, (float64, CPUState *))  
185 -DEF_HELPER_1_2(vfp_tosizs, float32, (float32, CPUState *))  
186 -DEF_HELPER_1_2(vfp_tosizd, float32, (float64, CPUState *))  
187 -  
188 -DEF_HELPER_1_3(vfp_toshs, float32, (float32, uint32_t, CPUState *))  
189 -DEF_HELPER_1_3(vfp_tosls, float32, (float32, uint32_t, CPUState *))  
190 -DEF_HELPER_1_3(vfp_touhs, float32, (float32, uint32_t, CPUState *))  
191 -DEF_HELPER_1_3(vfp_touls, float32, (float32, uint32_t, CPUState *))  
192 -DEF_HELPER_1_3(vfp_toshd, float64, (float64, uint32_t, CPUState *))  
193 -DEF_HELPER_1_3(vfp_tosld, float64, (float64, uint32_t, CPUState *))  
194 -DEF_HELPER_1_3(vfp_touhd, float64, (float64, uint32_t, CPUState *))  
195 -DEF_HELPER_1_3(vfp_tould, float64, (float64, uint32_t, CPUState *))  
196 -DEF_HELPER_1_3(vfp_shtos, float32, (float32, uint32_t, CPUState *))  
197 -DEF_HELPER_1_3(vfp_sltos, float32, (float32, uint32_t, CPUState *))  
198 -DEF_HELPER_1_3(vfp_uhtos, float32, (float32, uint32_t, CPUState *))  
199 -DEF_HELPER_1_3(vfp_ultos, float32, (float32, uint32_t, CPUState *))  
200 -DEF_HELPER_1_3(vfp_shtod, float64, (float64, uint32_t, CPUState *))  
201 -DEF_HELPER_1_3(vfp_sltod, float64, (float64, uint32_t, CPUState *))  
202 -DEF_HELPER_1_3(vfp_uhtod, float64, (float64, uint32_t, CPUState *))  
203 -DEF_HELPER_1_3(vfp_ultod, float64, (float64, uint32_t, CPUState *))  
204 -  
205 -DEF_HELPER_1_3(recps_f32, float32, (float32, float32, CPUState *))  
206 -DEF_HELPER_1_3(rsqrts_f32, float32, (float32, float32, CPUState *))  
207 -DEF_HELPER_1_2(recpe_f32, float32, (float32, CPUState *))  
208 -DEF_HELPER_1_2(rsqrte_f32, float32, (float32, CPUState *))  
209 -DEF_HELPER_1_2(recpe_u32, uint32_t, (uint32_t, CPUState *))  
210 -DEF_HELPER_1_2(rsqrte_u32, uint32_t, (uint32_t, CPUState *))  
211 -DEF_HELPER_1_4(neon_tbl, uint32_t, (uint32_t, uint32_t, uint32_t, uint32_t))  
212 -DEF_HELPER_1_2(neon_add_saturate_u64, uint64_t, (uint64_t, uint64_t))  
213 -DEF_HELPER_1_2(neon_add_saturate_s64, uint64_t, (uint64_t, uint64_t))  
214 -DEF_HELPER_1_2(neon_sub_saturate_u64, uint64_t, (uint64_t, uint64_t))  
215 -DEF_HELPER_1_2(neon_sub_saturate_s64, uint64_t, (uint64_t, uint64_t))  
216 -  
217 -DEF_HELPER_1_2(add_cc, uint32_t, (uint32_t, uint32_t))  
218 -DEF_HELPER_1_2(adc_cc, uint32_t, (uint32_t, uint32_t))  
219 -DEF_HELPER_1_2(sub_cc, uint32_t, (uint32_t, uint32_t))  
220 -DEF_HELPER_1_2(sbc_cc, uint32_t, (uint32_t, uint32_t))  
221 -  
222 -DEF_HELPER_1_2(shl, uint32_t, (uint32_t, uint32_t))  
223 -DEF_HELPER_1_2(shr, uint32_t, (uint32_t, uint32_t))  
224 -DEF_HELPER_1_2(sar, uint32_t, (uint32_t, uint32_t))  
225 -DEF_HELPER_1_2(ror, uint32_t, (uint32_t, uint32_t))  
226 -DEF_HELPER_1_2(shl_cc, uint32_t, (uint32_t, uint32_t))  
227 -DEF_HELPER_1_2(shr_cc, uint32_t, (uint32_t, uint32_t))  
228 -DEF_HELPER_1_2(sar_cc, uint32_t, (uint32_t, uint32_t))  
229 -DEF_HELPER_1_2(ror_cc, uint32_t, (uint32_t, uint32_t)) 43 +DEF_HELPER_2(ssat, i32, i32, i32)
  44 +DEF_HELPER_2(usat, i32, i32, i32)
  45 +DEF_HELPER_2(ssat16, i32, i32, i32)
  46 +DEF_HELPER_2(usat16, i32, i32, i32)
  47 +
  48 +DEF_HELPER_2(usad8, i32, i32, i32)
  49 +
  50 +DEF_HELPER_1(logicq_cc, i32, i64)
  51 +
  52 +DEF_HELPER_3(sel_flags, i32, i32, i32, i32)
  53 +DEF_HELPER_1(exception, void, i32)
  54 +DEF_HELPER_0(wfi, void)
  55 +
  56 +DEF_HELPER_2(cpsr_write, void, i32, i32)
  57 +DEF_HELPER_0(cpsr_read, i32)
  58 +
  59 +DEF_HELPER_3(v7m_msr, void, env, i32, i32)
  60 +DEF_HELPER_2(v7m_mrs, i32, env, i32)
  61 +
  62 +DEF_HELPER_3(set_cp15, void, env, i32, i32)
  63 +DEF_HELPER_2(get_cp15, i32, env, i32)
  64 +
  65 +DEF_HELPER_3(set_cp, void, env, i32, i32)
  66 +DEF_HELPER_2(get_cp, i32, env, i32)
  67 +
  68 +DEF_HELPER_2(get_r13_banked, i32, env, i32)
  69 +DEF_HELPER_3(set_r13_banked, void, env, i32, i32)
  70 +
  71 +DEF_HELPER_2(mark_exclusive, void, env, i32)
  72 +DEF_HELPER_2(test_exclusive, i32, env, i32)
  73 +DEF_HELPER_1(clrex, void, env)
  74 +
  75 +DEF_HELPER_1(get_user_reg, i32, i32)
  76 +DEF_HELPER_2(set_user_reg, void, i32, i32)
  77 +
  78 +DEF_HELPER_1(vfp_get_fpscr, i32, env)
  79 +DEF_HELPER_2(vfp_set_fpscr, void, env, i32)
  80 +
  81 +DEF_HELPER_3(vfp_adds, f32, f32, f32, env)
  82 +DEF_HELPER_3(vfp_addd, f64, f64, f64, env)
  83 +DEF_HELPER_3(vfp_subs, f32, f32, f32, env)
  84 +DEF_HELPER_3(vfp_subd, f64, f64, f64, env)
  85 +DEF_HELPER_3(vfp_muls, f32, f32, f32, env)
  86 +DEF_HELPER_3(vfp_muld, f64, f64, f64, env)
  87 +DEF_HELPER_3(vfp_divs, f32, f32, f32, env)
  88 +DEF_HELPER_3(vfp_divd, f64, f64, f64, env)
  89 +DEF_HELPER_1(vfp_negs, f32, f32)
  90 +DEF_HELPER_1(vfp_negd, f64, f64)
  91 +DEF_HELPER_1(vfp_abss, f32, f32)
  92 +DEF_HELPER_1(vfp_absd, f64, f64)
  93 +DEF_HELPER_2(vfp_sqrts, f32, f32, env)
  94 +DEF_HELPER_2(vfp_sqrtd, f64, f64, env)
  95 +DEF_HELPER_3(vfp_cmps, void, f32, f32, env)
  96 +DEF_HELPER_3(vfp_cmpd, void, f64, f64, env)
  97 +DEF_HELPER_3(vfp_cmpes, void, f32, f32, env)
  98 +DEF_HELPER_3(vfp_cmped, void, f64, f64, env)
  99 +
  100 +DEF_HELPER_2(vfp_fcvtds, f64, f32, env)
  101 +DEF_HELPER_2(vfp_fcvtsd, f32, f64, env)
  102 +
  103 +DEF_HELPER_2(vfp_uitos, f32, f32, env)
  104 +DEF_HELPER_2(vfp_uitod, f64, f32, env)
  105 +DEF_HELPER_2(vfp_sitos, f32, f32, env)
  106 +DEF_HELPER_2(vfp_sitod, f64, f32, env)
  107 +
  108 +DEF_HELPER_2(vfp_touis, f32, f32, env)
  109 +DEF_HELPER_2(vfp_touid, f32, f64, env)
  110 +DEF_HELPER_2(vfp_touizs, f32, f32, env)
  111 +DEF_HELPER_2(vfp_touizd, f32, f64, env)
  112 +DEF_HELPER_2(vfp_tosis, f32, f32, env)
  113 +DEF_HELPER_2(vfp_tosid, f32, f64, env)
  114 +DEF_HELPER_2(vfp_tosizs, f32, f32, env)
  115 +DEF_HELPER_2(vfp_tosizd, f32, f64, env)
  116 +
  117 +DEF_HELPER_3(vfp_toshs, f32, f32, i32, env)
  118 +DEF_HELPER_3(vfp_tosls, f32, f32, i32, env)
  119 +DEF_HELPER_3(vfp_touhs, f32, f32, i32, env)
  120 +DEF_HELPER_3(vfp_touls, f32, f32, i32, env)
  121 +DEF_HELPER_3(vfp_toshd, f64, f64, i32, env)
  122 +DEF_HELPER_3(vfp_tosld, f64, f64, i32, env)
  123 +DEF_HELPER_3(vfp_touhd, f64, f64, i32, env)
  124 +DEF_HELPER_3(vfp_tould, f64, f64, i32, env)
  125 +DEF_HELPER_3(vfp_shtos, f32, f32, i32, env)
  126 +DEF_HELPER_3(vfp_sltos, f32, f32, i32, env)
  127 +DEF_HELPER_3(vfp_uhtos, f32, f32, i32, env)
  128 +DEF_HELPER_3(vfp_ultos, f32, f32, i32, env)
  129 +DEF_HELPER_3(vfp_shtod, f64, f64, i32, env)
  130 +DEF_HELPER_3(vfp_sltod, f64, f64, i32, env)
  131 +DEF_HELPER_3(vfp_uhtod, f64, f64, i32, env)
  132 +DEF_HELPER_3(vfp_ultod, f64, f64, i32, env)
  133 +
  134 +DEF_HELPER_3(recps_f32, f32, f32, f32, env)
  135 +DEF_HELPER_3(rsqrts_f32, f32, f32, f32, env)
  136 +DEF_HELPER_2(recpe_f32, f32, f32, env)
  137 +DEF_HELPER_2(rsqrte_f32, f32, f32, env)
  138 +DEF_HELPER_2(recpe_u32, i32, i32, env)
  139 +DEF_HELPER_2(rsqrte_u32, i32, i32, env)
  140 +DEF_HELPER_4(neon_tbl, i32, i32, i32, i32, i32)
  141 +DEF_HELPER_2(neon_add_saturate_u64, i64, i64, i64)
  142 +DEF_HELPER_2(neon_add_saturate_s64, i64, i64, i64)
  143 +DEF_HELPER_2(neon_sub_saturate_u64, i64, i64, i64)
  144 +DEF_HELPER_2(neon_sub_saturate_s64, i64, i64, i64)
  145 +
  146 +DEF_HELPER_2(add_cc, i32, i32, i32)
  147 +DEF_HELPER_2(adc_cc, i32, i32, i32)
  148 +DEF_HELPER_2(sub_cc, i32, i32, i32)
  149 +DEF_HELPER_2(sbc_cc, i32, i32, i32)
  150 +
  151 +DEF_HELPER_2(shl, i32, i32, i32)
  152 +DEF_HELPER_2(shr, i32, i32, i32)
  153 +DEF_HELPER_2(sar, i32, i32, i32)
  154 +DEF_HELPER_2(ror, i32, i32, i32)
  155 +DEF_HELPER_2(shl_cc, i32, i32, i32)
  156 +DEF_HELPER_2(shr_cc, i32, i32, i32)
  157 +DEF_HELPER_2(sar_cc, i32, i32, i32)
  158 +DEF_HELPER_2(ror_cc, i32, i32, i32)
230 159
231 /* neon_helper.c */ 160 /* neon_helper.c */
232 -DEF_HELPER_1_3(neon_qadd_u8, uint32_t, (CPUState *, uint32_t, uint32_t))  
233 -DEF_HELPER_1_3(neon_qadd_s8, uint32_t, (CPUState *, uint32_t, uint32_t))  
234 -DEF_HELPER_1_3(neon_qadd_u16, uint32_t, (CPUState *, uint32_t, uint32_t))  
235 -DEF_HELPER_1_3(neon_qadd_s16, uint32_t, (CPUState *, uint32_t, uint32_t))  
236 -DEF_HELPER_1_3(neon_qsub_u8, uint32_t, (CPUState *, uint32_t, uint32_t))  
237 -DEF_HELPER_1_3(neon_qsub_s8, uint32_t, (CPUState *, uint32_t, uint32_t))  
238 -DEF_HELPER_1_3(neon_qsub_u16, uint32_t, (CPUState *, uint32_t, uint32_t))  
239 -DEF_HELPER_1_3(neon_qsub_s16, uint32_t, (CPUState *, uint32_t, uint32_t))  
240 -  
241 -DEF_HELPER_1_2(neon_hadd_s8, uint32_t, (uint32_t, uint32_t))  
242 -DEF_HELPER_1_2(neon_hadd_u8, uint32_t, (uint32_t, uint32_t))  
243 -DEF_HELPER_1_2(neon_hadd_s16, uint32_t, (uint32_t, uint32_t))  
244 -DEF_HELPER_1_2(neon_hadd_u16, uint32_t, (uint32_t, uint32_t))  
245 -DEF_HELPER_1_2(neon_hadd_s32, int32_t, (int32_t, int32_t))  
246 -DEF_HELPER_1_2(neon_hadd_u32, uint32_t, (uint32_t, uint32_t))  
247 -DEF_HELPER_1_2(neon_rhadd_s8, uint32_t, (uint32_t, uint32_t))  
248 -DEF_HELPER_1_2(neon_rhadd_u8, uint32_t, (uint32_t, uint32_t))  
249 -DEF_HELPER_1_2(neon_rhadd_s16, uint32_t, (uint32_t, uint32_t))  
250 -DEF_HELPER_1_2(neon_rhadd_u16, uint32_t, (uint32_t, uint32_t))  
251 -DEF_HELPER_1_2(neon_rhadd_s32, int32_t, (int32_t, int32_t))  
252 -DEF_HELPER_1_2(neon_rhadd_u32, uint32_t, (uint32_t, uint32_t))  
253 -DEF_HELPER_1_2(neon_hsub_s8, uint32_t, (uint32_t, uint32_t))  
254 -DEF_HELPER_1_2(neon_hsub_u8, uint32_t, (uint32_t, uint32_t))  
255 -DEF_HELPER_1_2(neon_hsub_s16, uint32_t, (uint32_t, uint32_t))  
256 -DEF_HELPER_1_2(neon_hsub_u16, uint32_t, (uint32_t, uint32_t))  
257 -DEF_HELPER_1_2(neon_hsub_s32, int32_t, (int32_t, int32_t))  
258 -DEF_HELPER_1_2(neon_hsub_u32, uint32_t, (uint32_t, uint32_t))  
259 -  
260 -DEF_HELPER_1_2(neon_cgt_u8, uint32_t, (uint32_t, uint32_t))  
261 -DEF_HELPER_1_2(neon_cgt_s8, uint32_t, (uint32_t, uint32_t))  
262 -DEF_HELPER_1_2(neon_cgt_u16, uint32_t, (uint32_t, uint32_t))  
263 -DEF_HELPER_1_2(neon_cgt_s16, uint32_t, (uint32_t, uint32_t))  
264 -DEF_HELPER_1_2(neon_cgt_u32, uint32_t, (uint32_t, uint32_t))  
265 -DEF_HELPER_1_2(neon_cgt_s32, uint32_t, (uint32_t, uint32_t))  
266 -DEF_HELPER_1_2(neon_cge_u8, uint32_t, (uint32_t, uint32_t))  
267 -DEF_HELPER_1_2(neon_cge_s8, uint32_t, (uint32_t, uint32_t))  
268 -DEF_HELPER_1_2(neon_cge_u16, uint32_t, (uint32_t, uint32_t))  
269 -DEF_HELPER_1_2(neon_cge_s16, uint32_t, (uint32_t, uint32_t))  
270 -DEF_HELPER_1_2(neon_cge_u32, uint32_t, (uint32_t, uint32_t))  
271 -DEF_HELPER_1_2(neon_cge_s32, uint32_t, (uint32_t, uint32_t))  
272 -  
273 -DEF_HELPER_1_2(neon_min_u8, uint32_t, (uint32_t, uint32_t))  
274 -DEF_HELPER_1_2(neon_min_s8, uint32_t, (uint32_t, uint32_t))  
275 -DEF_HELPER_1_2(neon_min_u16, uint32_t, (uint32_t, uint32_t))  
276 -DEF_HELPER_1_2(neon_min_s16, uint32_t, (uint32_t, uint32_t))  
277 -DEF_HELPER_1_2(neon_min_u32, uint32_t, (uint32_t, uint32_t))  
278 -DEF_HELPER_1_2(neon_min_s32, uint32_t, (uint32_t, uint32_t))  
279 -DEF_HELPER_1_2(neon_max_u8, uint32_t, (uint32_t, uint32_t))  
280 -DEF_HELPER_1_2(neon_max_s8, uint32_t, (uint32_t, uint32_t))  
281 -DEF_HELPER_1_2(neon_max_u16, uint32_t, (uint32_t, uint32_t))  
282 -DEF_HELPER_1_2(neon_max_s16, uint32_t, (uint32_t, uint32_t))  
283 -DEF_HELPER_1_2(neon_max_u32, uint32_t, (uint32_t, uint32_t))  
284 -DEF_HELPER_1_2(neon_max_s32, uint32_t, (uint32_t, uint32_t))  
285 -DEF_HELPER_1_2(neon_pmin_u8, uint32_t, (uint32_t, uint32_t))  
286 -DEF_HELPER_1_2(neon_pmin_s8, uint32_t, (uint32_t, uint32_t))  
287 -DEF_HELPER_1_2(neon_pmin_u16, uint32_t, (uint32_t, uint32_t))  
288 -DEF_HELPER_1_2(neon_pmin_s16, uint32_t, (uint32_t, uint32_t))  
289 -DEF_HELPER_1_2(neon_pmin_u32, uint32_t, (uint32_t, uint32_t))  
290 -DEF_HELPER_1_2(neon_pmin_s32, uint32_t, (uint32_t, uint32_t))  
291 -DEF_HELPER_1_2(neon_pmax_u8, uint32_t, (uint32_t, uint32_t))  
292 -DEF_HELPER_1_2(neon_pmax_s8, uint32_t, (uint32_t, uint32_t))  
293 -DEF_HELPER_1_2(neon_pmax_u16, uint32_t, (uint32_t, uint32_t))  
294 -DEF_HELPER_1_2(neon_pmax_s16, uint32_t, (uint32_t, uint32_t))  
295 -DEF_HELPER_1_2(neon_pmax_u32, uint32_t, (uint32_t, uint32_t))  
296 -DEF_HELPER_1_2(neon_pmax_s32, uint32_t, (uint32_t, uint32_t))  
297 -  
298 -DEF_HELPER_1_2(neon_abd_u8, uint32_t, (uint32_t, uint32_t))  
299 -DEF_HELPER_1_2(neon_abd_s8, uint32_t, (uint32_t, uint32_t))  
300 -DEF_HELPER_1_2(neon_abd_u16, uint32_t, (uint32_t, uint32_t))  
301 -DEF_HELPER_1_2(neon_abd_s16, uint32_t, (uint32_t, uint32_t))  
302 -DEF_HELPER_1_2(neon_abd_u32, uint32_t, (uint32_t, uint32_t))  
303 -DEF_HELPER_1_2(neon_abd_s32, uint32_t, (uint32_t, uint32_t))  
304 -  
305 -DEF_HELPER_1_2(neon_shl_u8, uint32_t, (uint32_t, uint32_t))  
306 -DEF_HELPER_1_2(neon_shl_s8, uint32_t, (uint32_t, uint32_t))  
307 -DEF_HELPER_1_2(neon_shl_u16, uint32_t, (uint32_t, uint32_t))  
308 -DEF_HELPER_1_2(neon_shl_s16, uint32_t, (uint32_t, uint32_t))  
309 -DEF_HELPER_1_2(neon_shl_u32, uint32_t, (uint32_t, uint32_t))  
310 -DEF_HELPER_1_2(neon_shl_s32, uint32_t, (uint32_t, uint32_t))  
311 -DEF_HELPER_1_2(neon_shl_u64, uint64_t, (uint64_t, uint64_t))  
312 -DEF_HELPER_1_2(neon_shl_s64, uint64_t, (uint64_t, uint64_t))  
313 -DEF_HELPER_1_2(neon_rshl_u8, uint32_t, (uint32_t, uint32_t))  
314 -DEF_HELPER_1_2(neon_rshl_s8, uint32_t, (uint32_t, uint32_t))  
315 -DEF_HELPER_1_2(neon_rshl_u16, uint32_t, (uint32_t, uint32_t))  
316 -DEF_HELPER_1_2(neon_rshl_s16, uint32_t, (uint32_t, uint32_t))  
317 -DEF_HELPER_1_2(neon_rshl_u32, uint32_t, (uint32_t, uint32_t))  
318 -DEF_HELPER_1_2(neon_rshl_s32, uint32_t, (uint32_t, uint32_t))  
319 -DEF_HELPER_1_2(neon_rshl_u64, uint64_t, (uint64_t, uint64_t))  
320 -DEF_HELPER_1_2(neon_rshl_s64, uint64_t, (uint64_t, uint64_t))  
321 -DEF_HELPER_1_3(neon_qshl_u8, uint32_t, (CPUState *, uint32_t, uint32_t))  
322 -DEF_HELPER_1_3(neon_qshl_s8, uint32_t, (CPUState *, uint32_t, uint32_t))  
323 -DEF_HELPER_1_3(neon_qshl_u16, uint32_t, (CPUState *, uint32_t, uint32_t))  
324 -DEF_HELPER_1_3(neon_qshl_s16, uint32_t, (CPUState *, uint32_t, uint32_t))  
325 -DEF_HELPER_1_3(neon_qshl_u32, uint32_t, (CPUState *, uint32_t, uint32_t))  
326 -DEF_HELPER_1_3(neon_qshl_s32, uint32_t, (CPUState *, uint32_t, uint32_t))  
327 -DEF_HELPER_1_3(neon_qshl_u64, uint64_t, (CPUState *, uint64_t, uint64_t))  
328 -DEF_HELPER_1_3(neon_qshl_s64, uint64_t, (CPUState *, uint64_t, uint64_t))  
329 -DEF_HELPER_1_3(neon_qrshl_u8, uint32_t, (CPUState *, uint32_t, uint32_t))  
330 -DEF_HELPER_1_3(neon_qrshl_s8, uint32_t, (CPUState *, uint32_t, uint32_t))  
331 -DEF_HELPER_1_3(neon_qrshl_u16, uint32_t, (CPUState *, uint32_t, uint32_t))  
332 -DEF_HELPER_1_3(neon_qrshl_s16, uint32_t, (CPUState *, uint32_t, uint32_t))  
333 -DEF_HELPER_1_3(neon_qrshl_u32, uint32_t, (CPUState *, uint32_t, uint32_t))  
334 -DEF_HELPER_1_3(neon_qrshl_s32, uint32_t, (CPUState *, uint32_t, uint32_t))  
335 -DEF_HELPER_1_3(neon_qrshl_u64, uint64_t, (CPUState *, uint64_t, uint64_t))  
336 -DEF_HELPER_1_3(neon_qrshl_s64, uint64_t, (CPUState *, uint64_t, uint64_t))  
337 -  
338 -DEF_HELPER_1_2(neon_add_u8, uint32_t, (uint32_t, uint32_t))  
339 -DEF_HELPER_1_2(neon_add_u16, uint32_t, (uint32_t, uint32_t))  
340 -DEF_HELPER_1_2(neon_padd_u8, uint32_t, (uint32_t, uint32_t))  
341 -DEF_HELPER_1_2(neon_padd_u16, uint32_t, (uint32_t, uint32_t))  
342 -DEF_HELPER_1_2(neon_sub_u8, uint32_t, (uint32_t, uint32_t))  
343 -DEF_HELPER_1_2(neon_sub_u16, uint32_t, (uint32_t, uint32_t))  
344 -DEF_HELPER_1_2(neon_mul_u8, uint32_t, (uint32_t, uint32_t))  
345 -DEF_HELPER_1_2(neon_mul_u16, uint32_t, (uint32_t, uint32_t))  
346 -DEF_HELPER_1_2(neon_mul_p8, uint32_t, (uint32_t, uint32_t))  
347 -  
348 -DEF_HELPER_1_2(neon_tst_u8, uint32_t, (uint32_t, uint32_t))  
349 -DEF_HELPER_1_2(neon_tst_u16, uint32_t, (uint32_t, uint32_t))  
350 -DEF_HELPER_1_2(neon_tst_u32, uint32_t, (uint32_t, uint32_t))  
351 -DEF_HELPER_1_2(neon_ceq_u8, uint32_t, (uint32_t, uint32_t))  
352 -DEF_HELPER_1_2(neon_ceq_u16, uint32_t, (uint32_t, uint32_t))  
353 -DEF_HELPER_1_2(neon_ceq_u32, uint32_t, (uint32_t, uint32_t))  
354 -  
355 -DEF_HELPER_1_1(neon_abs_s8, uint32_t, (uint32_t))  
356 -DEF_HELPER_1_1(neon_abs_s16, uint32_t, (uint32_t))  
357 -DEF_HELPER_1_1(neon_clz_u8, uint32_t, (uint32_t))  
358 -DEF_HELPER_1_1(neon_clz_u16, uint32_t, (uint32_t))  
359 -DEF_HELPER_1_1(neon_cls_s8, uint32_t, (uint32_t))  
360 -DEF_HELPER_1_1(neon_cls_s16, uint32_t, (uint32_t))  
361 -DEF_HELPER_1_1(neon_cls_s32, uint32_t, (uint32_t))  
362 -DEF_HELPER_1_1(neon_cnt_u8, uint32_t, (uint32_t))  
363 -  
364 -DEF_HELPER_1_3(neon_qdmulh_s16, uint32_t, (CPUState *, uint32_t, uint32_t))  
365 -DEF_HELPER_1_3(neon_qrdmulh_s16, uint32_t, (CPUState *, uint32_t, uint32_t))  
366 -DEF_HELPER_1_3(neon_qdmulh_s32, uint32_t, (CPUState *, uint32_t, uint32_t))  
367 -DEF_HELPER_1_3(neon_qrdmulh_s32, uint32_t, (CPUState *, uint32_t, uint32_t))  
368 -  
369 -DEF_HELPER_1_1(neon_narrow_u8, uint32_t, (uint64_t))  
370 -DEF_HELPER_1_1(neon_narrow_u16, uint32_t, (uint64_t))  
371 -DEF_HELPER_1_2(neon_narrow_sat_u8, uint32_t, (CPUState *, uint64_t))  
372 -DEF_HELPER_1_2(neon_narrow_sat_s8, uint32_t, (CPUState *, uint64_t))  
373 -DEF_HELPER_1_2(neon_narrow_sat_u16, uint32_t, (CPUState *, uint64_t))  
374 -DEF_HELPER_1_2(neon_narrow_sat_s16, uint32_t, (CPUState *, uint64_t))  
375 -DEF_HELPER_1_2(neon_narrow_sat_u32, uint32_t, (CPUState *, uint64_t))  
376 -DEF_HELPER_1_2(neon_narrow_sat_s32, uint32_t, (CPUState *, uint64_t))  
377 -DEF_HELPER_1_1(neon_narrow_high_u8, uint32_t, (uint64_t))  
378 -DEF_HELPER_1_1(neon_narrow_high_u16, uint32_t, (uint64_t))  
379 -DEF_HELPER_1_1(neon_narrow_round_high_u8, uint32_t, (uint64_t))  
380 -DEF_HELPER_1_1(neon_narrow_round_high_u16, uint32_t, (uint64_t))  
381 -DEF_HELPER_1_1(neon_widen_u8, uint64_t, (uint32_t))  
382 -DEF_HELPER_1_1(neon_widen_s8, uint64_t, (uint32_t))  
383 -DEF_HELPER_1_1(neon_widen_u16, uint64_t, (uint32_t))  
384 -DEF_HELPER_1_1(neon_widen_s16, uint64_t, (uint32_t))  
385 -  
386 -DEF_HELPER_1_2(neon_addl_u16, uint64_t, (uint64_t, uint64_t))  
387 -DEF_HELPER_1_2(neon_addl_u32, uint64_t, (uint64_t, uint64_t))  
388 -DEF_HELPER_1_2(neon_paddl_u16, uint64_t, (uint64_t, uint64_t))  
389 -DEF_HELPER_1_2(neon_paddl_u32, uint64_t, (uint64_t, uint64_t))  
390 -DEF_HELPER_1_2(neon_subl_u16, uint64_t, (uint64_t, uint64_t))  
391 -DEF_HELPER_1_2(neon_subl_u32, uint64_t, (uint64_t, uint64_t))  
392 -DEF_HELPER_1_3(neon_addl_saturate_s32, uint64_t, (CPUState *, uint64_t, uint64_t))  
393 -DEF_HELPER_1_3(neon_addl_saturate_s64, uint64_t, (CPUState *, uint64_t, uint64_t))  
394 -DEF_HELPER_1_2(neon_abdl_u16, uint64_t, (uint32_t, uint32_t))  
395 -DEF_HELPER_1_2(neon_abdl_s16, uint64_t, (uint32_t, uint32_t))  
396 -DEF_HELPER_1_2(neon_abdl_u32, uint64_t, (uint32_t, uint32_t))  
397 -DEF_HELPER_1_2(neon_abdl_s32, uint64_t, (uint32_t, uint32_t))  
398 -DEF_HELPER_1_2(neon_abdl_u64, uint64_t, (uint32_t, uint32_t))  
399 -DEF_HELPER_1_2(neon_abdl_s64, uint64_t, (uint32_t, uint32_t))  
400 -DEF_HELPER_1_2(neon_mull_u8, uint64_t, (uint32_t, uint32_t))  
401 -DEF_HELPER_1_2(neon_mull_s8, uint64_t, (uint32_t, uint32_t))  
402 -DEF_HELPER_1_2(neon_mull_u16, uint64_t, (uint32_t, uint32_t))  
403 -DEF_HELPER_1_2(neon_mull_s16, uint64_t, (uint32_t, uint32_t))  
404 -  
405 -DEF_HELPER_1_1(neon_negl_u16, uint64_t, (uint64_t))  
406 -DEF_HELPER_1_1(neon_negl_u32, uint64_t, (uint64_t))  
407 -DEF_HELPER_1_1(neon_negl_u64, uint64_t, (uint64_t))  
408 -  
409 -DEF_HELPER_1_2(neon_qabs_s8, uint32_t, (CPUState *, uint32_t))  
410 -DEF_HELPER_1_2(neon_qabs_s16, uint32_t, (CPUState *, uint32_t))  
411 -DEF_HELPER_1_2(neon_qabs_s32, uint32_t, (CPUState *, uint32_t))  
412 -DEF_HELPER_1_2(neon_qneg_s8, uint32_t, (CPUState *, uint32_t))  
413 -DEF_HELPER_1_2(neon_qneg_s16, uint32_t, (CPUState *, uint32_t))  
414 -DEF_HELPER_1_2(neon_qneg_s32, uint32_t, (CPUState *, uint32_t))  
415 -  
416 -DEF_HELPER_0_0(neon_trn_u8, void, (void))  
417 -DEF_HELPER_0_0(neon_trn_u16, void, (void))  
418 -DEF_HELPER_0_0(neon_unzip_u8, void, (void))  
419 -DEF_HELPER_0_0(neon_zip_u8, void, (void))  
420 -DEF_HELPER_0_0(neon_zip_u16, void, (void))  
421 -  
422 -DEF_HELPER_1_2(neon_min_f32, uint32_t, (uint32_t, uint32_t))  
423 -DEF_HELPER_1_2(neon_max_f32, uint32_t, (uint32_t, uint32_t))  
424 -DEF_HELPER_1_2(neon_abd_f32, uint32_t, (uint32_t, uint32_t))  
425 -DEF_HELPER_1_2(neon_add_f32, uint32_t, (uint32_t, uint32_t))  
426 -DEF_HELPER_1_2(neon_sub_f32, uint32_t, (uint32_t, uint32_t))  
427 -DEF_HELPER_1_2(neon_mul_f32, uint32_t, (uint32_t, uint32_t))  
428 -DEF_HELPER_1_2(neon_ceq_f32, uint32_t, (uint32_t, uint32_t))  
429 -DEF_HELPER_1_2(neon_cge_f32, uint32_t, (uint32_t, uint32_t))  
430 -DEF_HELPER_1_2(neon_cgt_f32, uint32_t, (uint32_t, uint32_t))  
431 -DEF_HELPER_1_2(neon_acge_f32, uint32_t, (uint32_t, uint32_t))  
432 -DEF_HELPER_1_2(neon_acgt_f32, uint32_t, (uint32_t, uint32_t)) 161 +DEF_HELPER_3(neon_qadd_u8, i32, env, i32, i32)
  162 +DEF_HELPER_3(neon_qadd_s8, i32, env, i32, i32)
  163 +DEF_HELPER_3(neon_qadd_u16, i32, env, i32, i32)
  164 +DEF_HELPER_3(neon_qadd_s16, i32, env, i32, i32)
  165 +DEF_HELPER_3(neon_qsub_u8, i32, env, i32, i32)
  166 +DEF_HELPER_3(neon_qsub_s8, i32, env, i32, i32)
  167 +DEF_HELPER_3(neon_qsub_u16, i32, env, i32, i32)
  168 +DEF_HELPER_3(neon_qsub_s16, i32, env, i32, i32)
  169 +
  170 +DEF_HELPER_2(neon_hadd_s8, i32, i32, i32)
  171 +DEF_HELPER_2(neon_hadd_u8, i32, i32, i32)
  172 +DEF_HELPER_2(neon_hadd_s16, i32, i32, i32)
  173 +DEF_HELPER_2(neon_hadd_u16, i32, i32, i32)
  174 +DEF_HELPER_2(neon_hadd_s32, s32, s32, s32)
  175 +DEF_HELPER_2(neon_hadd_u32, i32, i32, i32)
  176 +DEF_HELPER_2(neon_rhadd_s8, i32, i32, i32)
  177 +DEF_HELPER_2(neon_rhadd_u8, i32, i32, i32)
  178 +DEF_HELPER_2(neon_rhadd_s16, i32, i32, i32)
  179 +DEF_HELPER_2(neon_rhadd_u16, i32, i32, i32)
  180 +DEF_HELPER_2(neon_rhadd_s32, s32, s32, s32)
  181 +DEF_HELPER_2(neon_rhadd_u32, i32, i32, i32)
  182 +DEF_HELPER_2(neon_hsub_s8, i32, i32, i32)
  183 +DEF_HELPER_2(neon_hsub_u8, i32, i32, i32)
  184 +DEF_HELPER_2(neon_hsub_s16, i32, i32, i32)
  185 +DEF_HELPER_2(neon_hsub_u16, i32, i32, i32)
  186 +DEF_HELPER_2(neon_hsub_s32, s32, s32, s32)
  187 +DEF_HELPER_2(neon_hsub_u32, i32, i32, i32)
  188 +
  189 +DEF_HELPER_2(neon_cgt_u8, i32, i32, i32)
  190 +DEF_HELPER_2(neon_cgt_s8, i32, i32, i32)
  191 +DEF_HELPER_2(neon_cgt_u16, i32, i32, i32)
  192 +DEF_HELPER_2(neon_cgt_s16, i32, i32, i32)
  193 +DEF_HELPER_2(neon_cgt_u32, i32, i32, i32)
  194 +DEF_HELPER_2(neon_cgt_s32, i32, i32, i32)
  195 +DEF_HELPER_2(neon_cge_u8, i32, i32, i32)
  196 +DEF_HELPER_2(neon_cge_s8, i32, i32, i32)
  197 +DEF_HELPER_2(neon_cge_u16, i32, i32, i32)
  198 +DEF_HELPER_2(neon_cge_s16, i32, i32, i32)
  199 +DEF_HELPER_2(neon_cge_u32, i32, i32, i32)
  200 +DEF_HELPER_2(neon_cge_s32, i32, i32, i32)
  201 +
  202 +DEF_HELPER_2(neon_min_u8, i32, i32, i32)
  203 +DEF_HELPER_2(neon_min_s8, i32, i32, i32)
  204 +DEF_HELPER_2(neon_min_u16, i32, i32, i32)
  205 +DEF_HELPER_2(neon_min_s16, i32, i32, i32)
  206 +DEF_HELPER_2(neon_min_u32, i32, i32, i32)
  207 +DEF_HELPER_2(neon_min_s32, i32, i32, i32)
  208 +DEF_HELPER_2(neon_max_u8, i32, i32, i32)
  209 +DEF_HELPER_2(neon_max_s8, i32, i32, i32)
  210 +DEF_HELPER_2(neon_max_u16, i32, i32, i32)
  211 +DEF_HELPER_2(neon_max_s16, i32, i32, i32)
  212 +DEF_HELPER_2(neon_max_u32, i32, i32, i32)
  213 +DEF_HELPER_2(neon_max_s32, i32, i32, i32)
  214 +DEF_HELPER_2(neon_pmin_u8, i32, i32, i32)
  215 +DEF_HELPER_2(neon_pmin_s8, i32, i32, i32)
  216 +DEF_HELPER_2(neon_pmin_u16, i32, i32, i32)
  217 +DEF_HELPER_2(neon_pmin_s16, i32, i32, i32)
  218 +DEF_HELPER_2(neon_pmax_u8, i32, i32, i32)
  219 +DEF_HELPER_2(neon_pmax_s8, i32, i32, i32)
  220 +DEF_HELPER_2(neon_pmax_u16, i32, i32, i32)
  221 +DEF_HELPER_2(neon_pmax_s16, i32, i32, i32)
  222 +
  223 +DEF_HELPER_2(neon_abd_u8, i32, i32, i32)
  224 +DEF_HELPER_2(neon_abd_s8, i32, i32, i32)
  225 +DEF_HELPER_2(neon_abd_u16, i32, i32, i32)
  226 +DEF_HELPER_2(neon_abd_s16, i32, i32, i32)
  227 +DEF_HELPER_2(neon_abd_u32, i32, i32, i32)
  228 +DEF_HELPER_2(neon_abd_s32, i32, i32, i32)
  229 +
  230 +DEF_HELPER_2(neon_shl_u8, i32, i32, i32)
  231 +DEF_HELPER_2(neon_shl_s8, i32, i32, i32)
  232 +DEF_HELPER_2(neon_shl_u16, i32, i32, i32)
  233 +DEF_HELPER_2(neon_shl_s16, i32, i32, i32)
  234 +DEF_HELPER_2(neon_shl_u32, i32, i32, i32)
  235 +DEF_HELPER_2(neon_shl_s32, i32, i32, i32)
  236 +DEF_HELPER_2(neon_shl_u64, i64, i64, i64)
  237 +DEF_HELPER_2(neon_shl_s64, i64, i64, i64)
  238 +DEF_HELPER_2(neon_rshl_u8, i32, i32, i32)
  239 +DEF_HELPER_2(neon_rshl_s8, i32, i32, i32)
  240 +DEF_HELPER_2(neon_rshl_u16, i32, i32, i32)
  241 +DEF_HELPER_2(neon_rshl_s16, i32, i32, i32)
  242 +DEF_HELPER_2(neon_rshl_u32, i32, i32, i32)
  243 +DEF_HELPER_2(neon_rshl_s32, i32, i32, i32)
  244 +DEF_HELPER_2(neon_rshl_u64, i64, i64, i64)
  245 +DEF_HELPER_2(neon_rshl_s64, i64, i64, i64)
  246 +DEF_HELPER_3(neon_qshl_u8, i32, env, i32, i32)
  247 +DEF_HELPER_3(neon_qshl_s8, i32, env, i32, i32)
  248 +DEF_HELPER_3(neon_qshl_u16, i32, env, i32, i32)
  249 +DEF_HELPER_3(neon_qshl_s16, i32, env, i32, i32)
  250 +DEF_HELPER_3(neon_qshl_u32, i32, env, i32, i32)
  251 +DEF_HELPER_3(neon_qshl_s32, i32, env, i32, i32)
  252 +DEF_HELPER_3(neon_qshl_u64, i64, env, i64, i64)
  253 +DEF_HELPER_3(neon_qshl_s64, i64, env, i64, i64)
  254 +DEF_HELPER_3(neon_qrshl_u8, i32, env, i32, i32)
  255 +DEF_HELPER_3(neon_qrshl_s8, i32, env, i32, i32)
  256 +DEF_HELPER_3(neon_qrshl_u16, i32, env, i32, i32)
  257 +DEF_HELPER_3(neon_qrshl_s16, i32, env, i32, i32)
  258 +DEF_HELPER_3(neon_qrshl_u32, i32, env, i32, i32)
  259 +DEF_HELPER_3(neon_qrshl_s32, i32, env, i32, i32)
  260 +DEF_HELPER_3(neon_qrshl_u64, i64, env, i64, i64)
  261 +DEF_HELPER_3(neon_qrshl_s64, i64, env, i64, i64)
  262 +
  263 +DEF_HELPER_2(neon_add_u8, i32, i32, i32)
  264 +DEF_HELPER_2(neon_add_u16, i32, i32, i32)
  265 +DEF_HELPER_2(neon_padd_u8, i32, i32, i32)
  266 +DEF_HELPER_2(neon_padd_u16, i32, i32, i32)
  267 +DEF_HELPER_2(neon_sub_u8, i32, i32, i32)
  268 +DEF_HELPER_2(neon_sub_u16, i32, i32, i32)
  269 +DEF_HELPER_2(neon_mul_u8, i32, i32, i32)
  270 +DEF_HELPER_2(neon_mul_u16, i32, i32, i32)
  271 +DEF_HELPER_2(neon_mul_p8, i32, i32, i32)
  272 +
  273 +DEF_HELPER_2(neon_tst_u8, i32, i32, i32)
  274 +DEF_HELPER_2(neon_tst_u16, i32, i32, i32)
  275 +DEF_HELPER_2(neon_tst_u32, i32, i32, i32)
  276 +DEF_HELPER_2(neon_ceq_u8, i32, i32, i32)
  277 +DEF_HELPER_2(neon_ceq_u16, i32, i32, i32)
  278 +DEF_HELPER_2(neon_ceq_u32, i32, i32, i32)
  279 +
  280 +DEF_HELPER_1(neon_abs_s8, i32, i32)
  281 +DEF_HELPER_1(neon_abs_s16, i32, i32)
  282 +DEF_HELPER_1(neon_clz_u8, i32, i32)
  283 +DEF_HELPER_1(neon_clz_u16, i32, i32)
  284 +DEF_HELPER_1(neon_cls_s8, i32, i32)
  285 +DEF_HELPER_1(neon_cls_s16, i32, i32)
  286 +DEF_HELPER_1(neon_cls_s32, i32, i32)
  287 +DEF_HELPER_1(neon_cnt_u8, i32, i32)
  288 +
  289 +DEF_HELPER_3(neon_qdmulh_s16, i32, env, i32, i32)
  290 +DEF_HELPER_3(neon_qrdmulh_s16, i32, env, i32, i32)
  291 +DEF_HELPER_3(neon_qdmulh_s32, i32, env, i32, i32)
  292 +DEF_HELPER_3(neon_qrdmulh_s32, i32, env, i32, i32)
  293 +
  294 +DEF_HELPER_1(neon_narrow_u8, i32, i64)
  295 +DEF_HELPER_1(neon_narrow_u16, i32, i64)
  296 +DEF_HELPER_2(neon_narrow_sat_u8, i32, env, i64)
  297 +DEF_HELPER_2(neon_narrow_sat_s8, i32, env, i64)
  298 +DEF_HELPER_2(neon_narrow_sat_u16, i32, env, i64)
  299 +DEF_HELPER_2(neon_narrow_sat_s16, i32, env, i64)
  300 +DEF_HELPER_2(neon_narrow_sat_u32, i32, env, i64)
  301 +DEF_HELPER_2(neon_narrow_sat_s32, i32, env, i64)
  302 +DEF_HELPER_1(neon_narrow_high_u8, i32, i64)
  303 +DEF_HELPER_1(neon_narrow_high_u16, i32, i64)
  304 +DEF_HELPER_1(neon_narrow_round_high_u8, i32, i64)
  305 +DEF_HELPER_1(neon_narrow_round_high_u16, i32, i64)
  306 +DEF_HELPER_1(neon_widen_u8, i64, i32)
  307 +DEF_HELPER_1(neon_widen_s8, i64, i32)
  308 +DEF_HELPER_1(neon_widen_u16, i64, i32)
  309 +DEF_HELPER_1(neon_widen_s16, i64, i32)
  310 +
  311 +DEF_HELPER_2(neon_addl_u16, i64, i64, i64)
  312 +DEF_HELPER_2(neon_addl_u32, i64, i64, i64)
  313 +DEF_HELPER_2(neon_paddl_u16, i64, i64, i64)
  314 +DEF_HELPER_2(neon_paddl_u32, i64, i64, i64)
  315 +DEF_HELPER_2(neon_subl_u16, i64, i64, i64)
  316 +DEF_HELPER_2(neon_subl_u32, i64, i64, i64)
  317 +DEF_HELPER_3(neon_addl_saturate_s32, i64, env, i64, i64)
  318 +DEF_HELPER_3(neon_addl_saturate_s64, i64, env, i64, i64)
  319 +DEF_HELPER_2(neon_abdl_u16, i64, i32, i32)
  320 +DEF_HELPER_2(neon_abdl_s16, i64, i32, i32)
  321 +DEF_HELPER_2(neon_abdl_u32, i64, i32, i32)
  322 +DEF_HELPER_2(neon_abdl_s32, i64, i32, i32)
  323 +DEF_HELPER_2(neon_abdl_u64, i64, i32, i32)
  324 +DEF_HELPER_2(neon_abdl_s64, i64, i32, i32)
  325 +DEF_HELPER_2(neon_mull_u8, i64, i32, i32)
  326 +DEF_HELPER_2(neon_mull_s8, i64, i32, i32)
  327 +DEF_HELPER_2(neon_mull_u16, i64, i32, i32)
  328 +DEF_HELPER_2(neon_mull_s16, i64, i32, i32)
  329 +
  330 +DEF_HELPER_1(neon_negl_u16, i64, i64)
  331 +DEF_HELPER_1(neon_negl_u32, i64, i64)
  332 +DEF_HELPER_1(neon_negl_u64, i64, i64)
  333 +
  334 +DEF_HELPER_2(neon_qabs_s8, i32, env, i32)
  335 +DEF_HELPER_2(neon_qabs_s16, i32, env, i32)
  336 +DEF_HELPER_2(neon_qabs_s32, i32, env, i32)
  337 +DEF_HELPER_2(neon_qneg_s8, i32, env, i32)
  338 +DEF_HELPER_2(neon_qneg_s16, i32, env, i32)
  339 +DEF_HELPER_2(neon_qneg_s32, i32, env, i32)
  340 +
  341 +DEF_HELPER_0(neon_trn_u8, void)
  342 +DEF_HELPER_0(neon_trn_u16, void)
  343 +DEF_HELPER_0(neon_unzip_u8, void)
  344 +DEF_HELPER_0(neon_zip_u8, void)
  345 +DEF_HELPER_0(neon_zip_u16, void)
  346 +
  347 +DEF_HELPER_2(neon_min_f32, i32, i32, i32)
  348 +DEF_HELPER_2(neon_max_f32, i32, i32, i32)
  349 +DEF_HELPER_2(neon_abd_f32, i32, i32, i32)
  350 +DEF_HELPER_2(neon_add_f32, i32, i32, i32)
  351 +DEF_HELPER_2(neon_sub_f32, i32, i32, i32)
  352 +DEF_HELPER_2(neon_mul_f32, i32, i32, i32)
  353 +DEF_HELPER_2(neon_ceq_f32, i32, i32, i32)
  354 +DEF_HELPER_2(neon_cge_f32, i32, i32, i32)
  355 +DEF_HELPER_2(neon_cgt_f32, i32, i32, i32)
  356 +DEF_HELPER_2(neon_acge_f32, i32, i32, i32)
  357 +DEF_HELPER_2(neon_acgt_f32, i32, i32, i32)
433 358
434 /* iwmmxt_helper.c */ 359 /* iwmmxt_helper.c */
435 -DEF_HELPER_1_2(iwmmxt_maddsq, uint64_t, (uint64_t, uint64_t))  
436 -DEF_HELPER_1_2(iwmmxt_madduq, uint64_t, (uint64_t, uint64_t))  
437 -DEF_HELPER_1_2(iwmmxt_sadb, uint64_t, (uint64_t, uint64_t))  
438 -DEF_HELPER_1_2(iwmmxt_sadw, uint64_t, (uint64_t, uint64_t))  
439 -DEF_HELPER_1_2(iwmmxt_mulslw, uint64_t, (uint64_t, uint64_t))  
440 -DEF_HELPER_1_2(iwmmxt_mulshw, uint64_t, (uint64_t, uint64_t))  
441 -DEF_HELPER_1_2(iwmmxt_mululw, uint64_t, (uint64_t, uint64_t))  
442 -DEF_HELPER_1_2(iwmmxt_muluhw, uint64_t, (uint64_t, uint64_t))  
443 -DEF_HELPER_1_2(iwmmxt_macsw, uint64_t, (uint64_t, uint64_t))  
444 -DEF_HELPER_1_2(iwmmxt_macuw, uint64_t, (uint64_t, uint64_t))  
445 -DEF_HELPER_1_1(iwmmxt_setpsr_nz, uint32_t, (uint64_t)) 360 +DEF_HELPER_2(iwmmxt_maddsq, i64, i64, i64)
  361 +DEF_HELPER_2(iwmmxt_madduq, i64, i64, i64)
  362 +DEF_HELPER_2(iwmmxt_sadb, i64, i64, i64)
  363 +DEF_HELPER_2(iwmmxt_sadw, i64, i64, i64)
  364 +DEF_HELPER_2(iwmmxt_mulslw, i64, i64, i64)
  365 +DEF_HELPER_2(iwmmxt_mulshw, i64, i64, i64)
  366 +DEF_HELPER_2(iwmmxt_mululw, i64, i64, i64)
  367 +DEF_HELPER_2(iwmmxt_muluhw, i64, i64, i64)
  368 +DEF_HELPER_2(iwmmxt_macsw, i64, i64, i64)
  369 +DEF_HELPER_2(iwmmxt_macuw, i64, i64, i64)
  370 +DEF_HELPER_1(iwmmxt_setpsr_nz, i32, i64)
446 371
447 #define DEF_IWMMXT_HELPER_SIZE_ENV(name) \ 372 #define DEF_IWMMXT_HELPER_SIZE_ENV(name) \
448 -DEF_HELPER_1_3(iwmmxt_##name##b, uint64_t, (CPUState *, uint64_t, uint64_t)) \  
449 -DEF_HELPER_1_3(iwmmxt_##name##w, uint64_t, (CPUState *, uint64_t, uint64_t)) \  
450 -DEF_HELPER_1_3(iwmmxt_##name##l, uint64_t, (CPUState *, uint64_t, uint64_t)) \ 373 +DEF_HELPER_3(iwmmxt_##name##b, i64, env, i64, i64) \
  374 +DEF_HELPER_3(iwmmxt_##name##w, i64, env, i64, i64) \
  375 +DEF_HELPER_3(iwmmxt_##name##l, i64, env, i64, i64) \
451 376
452 DEF_IWMMXT_HELPER_SIZE_ENV(unpackl) 377 DEF_IWMMXT_HELPER_SIZE_ENV(unpackl)
453 DEF_IWMMXT_HELPER_SIZE_ENV(unpackh) 378 DEF_IWMMXT_HELPER_SIZE_ENV(unpackh)
454 379
455 -DEF_HELPER_1_2(iwmmxt_unpacklub, uint64_t, (CPUState *, uint64_t))  
456 -DEF_HELPER_1_2(iwmmxt_unpackluw, uint64_t, (CPUState *, uint64_t))  
457 -DEF_HELPER_1_2(iwmmxt_unpacklul, uint64_t, (CPUState *, uint64_t))  
458 -DEF_HELPER_1_2(iwmmxt_unpackhub, uint64_t, (CPUState *, uint64_t))  
459 -DEF_HELPER_1_2(iwmmxt_unpackhuw, uint64_t, (CPUState *, uint64_t))  
460 -DEF_HELPER_1_2(iwmmxt_unpackhul, uint64_t, (CPUState *, uint64_t))  
461 -DEF_HELPER_1_2(iwmmxt_unpacklsb, uint64_t, (CPUState *, uint64_t))  
462 -DEF_HELPER_1_2(iwmmxt_unpacklsw, uint64_t, (CPUState *, uint64_t))  
463 -DEF_HELPER_1_2(iwmmxt_unpacklsl, uint64_t, (CPUState *, uint64_t))  
464 -DEF_HELPER_1_2(iwmmxt_unpackhsb, uint64_t, (CPUState *, uint64_t))  
465 -DEF_HELPER_1_2(iwmmxt_unpackhsw, uint64_t, (CPUState *, uint64_t))  
466 -DEF_HELPER_1_2(iwmmxt_unpackhsl, uint64_t, (CPUState *, uint64_t)) 380 +DEF_HELPER_2(iwmmxt_unpacklub, i64, env, i64)
  381 +DEF_HELPER_2(iwmmxt_unpackluw, i64, env, i64)
  382 +DEF_HELPER_2(iwmmxt_unpacklul, i64, env, i64)
  383 +DEF_HELPER_2(iwmmxt_unpackhub, i64, env, i64)
  384 +DEF_HELPER_2(iwmmxt_unpackhuw, i64, env, i64)
  385 +DEF_HELPER_2(iwmmxt_unpackhul, i64, env, i64)
  386 +DEF_HELPER_2(iwmmxt_unpacklsb, i64, env, i64)
  387 +DEF_HELPER_2(iwmmxt_unpacklsw, i64, env, i64)
  388 +DEF_HELPER_2(iwmmxt_unpacklsl, i64, env, i64)
  389 +DEF_HELPER_2(iwmmxt_unpackhsb, i64, env, i64)
  390 +DEF_HELPER_2(iwmmxt_unpackhsw, i64, env, i64)
  391 +DEF_HELPER_2(iwmmxt_unpackhsl, i64, env, i64)
467 392
468 DEF_IWMMXT_HELPER_SIZE_ENV(cmpeq) 393 DEF_IWMMXT_HELPER_SIZE_ENV(cmpeq)
469 DEF_IWMMXT_HELPER_SIZE_ENV(cmpgtu) 394 DEF_IWMMXT_HELPER_SIZE_ENV(cmpgtu)
@@ -481,59 +406,51 @@ DEF_IWMMXT_HELPER_SIZE_ENV(addu) @@ -481,59 +406,51 @@ DEF_IWMMXT_HELPER_SIZE_ENV(addu)
481 DEF_IWMMXT_HELPER_SIZE_ENV(subs) 406 DEF_IWMMXT_HELPER_SIZE_ENV(subs)
482 DEF_IWMMXT_HELPER_SIZE_ENV(adds) 407 DEF_IWMMXT_HELPER_SIZE_ENV(adds)
483 408
484 -DEF_HELPER_1_3(iwmmxt_avgb0, uint64_t, (CPUState *, uint64_t, uint64_t))  
485 -DEF_HELPER_1_3(iwmmxt_avgb1, uint64_t, (CPUState *, uint64_t, uint64_t))  
486 -DEF_HELPER_1_3(iwmmxt_avgw0, uint64_t, (CPUState *, uint64_t, uint64_t))  
487 -DEF_HELPER_1_3(iwmmxt_avgw1, uint64_t, (CPUState *, uint64_t, uint64_t))  
488 -  
489 -DEF_HELPER_1_2(iwmmxt_msadb, uint64_t, (uint64_t, uint64_t))  
490 -  
491 -DEF_HELPER_1_3(iwmmxt_align, uint64_t, (uint64_t, uint64_t, uint32_t))  
492 -DEF_HELPER_1_4(iwmmxt_insr, uint64_t, (uint64_t, uint32_t, uint32_t, uint32_t))  
493 -  
494 -DEF_HELPER_1_1(iwmmxt_bcstb, uint64_t, (uint32_t))  
495 -DEF_HELPER_1_1(iwmmxt_bcstw, uint64_t, (uint32_t))  
496 -DEF_HELPER_1_1(iwmmxt_bcstl, uint64_t, (uint32_t))  
497 -  
498 -DEF_HELPER_1_1(iwmmxt_addcb, uint64_t, (uint64_t))  
499 -DEF_HELPER_1_1(iwmmxt_addcw, uint64_t, (uint64_t))  
500 -DEF_HELPER_1_1(iwmmxt_addcl, uint64_t, (uint64_t))  
501 -  
502 -DEF_HELPER_1_1(iwmmxt_msbb, uint32_t, (uint64_t))  
503 -DEF_HELPER_1_1(iwmmxt_msbw, uint32_t, (uint64_t))  
504 -DEF_HELPER_1_1(iwmmxt_msbl, uint32_t, (uint64_t))  
505 -  
506 -DEF_HELPER_1_3(iwmmxt_srlw, uint64_t, (CPUState *, uint64_t, uint32_t))  
507 -DEF_HELPER_1_3(iwmmxt_srll, uint64_t, (CPUState *, uint64_t, uint32_t))  
508 -DEF_HELPER_1_3(iwmmxt_srlq, uint64_t, (CPUState *, uint64_t, uint32_t))  
509 -DEF_HELPER_1_3(iwmmxt_sllw, uint64_t, (CPUState *, uint64_t, uint32_t))  
510 -DEF_HELPER_1_3(iwmmxt_slll, uint64_t, (CPUState *, uint64_t, uint32_t))  
511 -DEF_HELPER_1_3(iwmmxt_sllq, uint64_t, (CPUState *, uint64_t, uint32_t))  
512 -DEF_HELPER_1_3(iwmmxt_sraw, uint64_t, (CPUState *, uint64_t, uint32_t))  
513 -DEF_HELPER_1_3(iwmmxt_sral, uint64_t, (CPUState *, uint64_t, uint32_t))  
514 -DEF_HELPER_1_3(iwmmxt_sraq, uint64_t, (CPUState *, uint64_t, uint32_t))  
515 -DEF_HELPER_1_3(iwmmxt_rorw, uint64_t, (CPUState *, uint64_t, uint32_t))  
516 -DEF_HELPER_1_3(iwmmxt_rorl, uint64_t, (CPUState *, uint64_t, uint32_t))  
517 -DEF_HELPER_1_3(iwmmxt_rorq, uint64_t, (CPUState *, uint64_t, uint32_t))  
518 -DEF_HELPER_1_3(iwmmxt_shufh, uint64_t, (CPUState *, uint64_t, uint32_t))  
519 -  
520 -DEF_HELPER_1_3(iwmmxt_packuw, uint64_t, (CPUState *, uint64_t, uint64_t))  
521 -DEF_HELPER_1_3(iwmmxt_packul, uint64_t, (CPUState *, uint64_t, uint64_t))  
522 -DEF_HELPER_1_3(iwmmxt_packuq, uint64_t, (CPUState *, uint64_t, uint64_t))  
523 -DEF_HELPER_1_3(iwmmxt_packsw, uint64_t, (CPUState *, uint64_t, uint64_t))  
524 -DEF_HELPER_1_3(iwmmxt_packsl, uint64_t, (CPUState *, uint64_t, uint64_t))  
525 -DEF_HELPER_1_3(iwmmxt_packsq, uint64_t, (CPUState *, uint64_t, uint64_t))  
526 -  
527 -DEF_HELPER_1_3(iwmmxt_muladdsl, uint64_t, (uint64_t, uint32_t, uint32_t))  
528 -DEF_HELPER_1_3(iwmmxt_muladdsw, uint64_t, (uint64_t, uint32_t, uint32_t))  
529 -DEF_HELPER_1_3(iwmmxt_muladdswl, uint64_t, (uint64_t, uint32_t, uint32_t))  
530 -  
531 -#undef DEF_HELPER  
532 -#undef DEF_HELPER_0_0  
533 -#undef DEF_HELPER_0_1  
534 -#undef DEF_HELPER_0_2  
535 -#undef DEF_HELPER_1_0  
536 -#undef DEF_HELPER_1_1  
537 -#undef DEF_HELPER_1_2  
538 -#undef DEF_HELPER_1_3  
539 -#undef GEN_HELPER 409 +DEF_HELPER_3(iwmmxt_avgb0, i64, env, i64, i64)
  410 +DEF_HELPER_3(iwmmxt_avgb1, i64, env, i64, i64)
  411 +DEF_HELPER_3(iwmmxt_avgw0, i64, env, i64, i64)
  412 +DEF_HELPER_3(iwmmxt_avgw1, i64, env, i64, i64)
  413 +
  414 +DEF_HELPER_2(iwmmxt_msadb, i64, i64, i64)
  415 +
  416 +DEF_HELPER_3(iwmmxt_align, i64, i64, i64, i32)
  417 +DEF_HELPER_4(iwmmxt_insr, i64, i64, i32, i32, i32)
  418 +
  419 +DEF_HELPER_1(iwmmxt_bcstb, i64, i32)
  420 +DEF_HELPER_1(iwmmxt_bcstw, i64, i32)
  421 +DEF_HELPER_1(iwmmxt_bcstl, i64, i32)
  422 +
  423 +DEF_HELPER_1(iwmmxt_addcb, i64, i64)
  424 +DEF_HELPER_1(iwmmxt_addcw, i64, i64)
  425 +DEF_HELPER_1(iwmmxt_addcl, i64, i64)
  426 +
  427 +DEF_HELPER_1(iwmmxt_msbb, i32, i64)
  428 +DEF_HELPER_1(iwmmxt_msbw, i32, i64)
  429 +DEF_HELPER_1(iwmmxt_msbl, i32, i64)
  430 +
  431 +DEF_HELPER_3(iwmmxt_srlw, i64, env, i64, i32)
  432 +DEF_HELPER_3(iwmmxt_srll, i64, env, i64, i32)
  433 +DEF_HELPER_3(iwmmxt_srlq, i64, env, i64, i32)
  434 +DEF_HELPER_3(iwmmxt_sllw, i64, env, i64, i32)
  435 +DEF_HELPER_3(iwmmxt_slll, i64, env, i64, i32)
  436 +DEF_HELPER_3(iwmmxt_sllq, i64, env, i64, i32)
  437 +DEF_HELPER_3(iwmmxt_sraw, i64, env, i64, i32)
  438 +DEF_HELPER_3(iwmmxt_sral, i64, env, i64, i32)
  439 +DEF_HELPER_3(iwmmxt_sraq, i64, env, i64, i32)
  440 +DEF_HELPER_3(iwmmxt_rorw, i64, env, i64, i32)
  441 +DEF_HELPER_3(iwmmxt_rorl, i64, env, i64, i32)
  442 +DEF_HELPER_3(iwmmxt_rorq, i64, env, i64, i32)
  443 +DEF_HELPER_3(iwmmxt_shufh, i64, env, i64, i32)
  444 +
  445 +DEF_HELPER_3(iwmmxt_packuw, i64, env, i64, i64)
  446 +DEF_HELPER_3(iwmmxt_packul, i64, env, i64, i64)
  447 +DEF_HELPER_3(iwmmxt_packuq, i64, env, i64, i64)
  448 +DEF_HELPER_3(iwmmxt_packsw, i64, env, i64, i64)
  449 +DEF_HELPER_3(iwmmxt_packsl, i64, env, i64, i64)
  450 +DEF_HELPER_3(iwmmxt_packsq, i64, env, i64, i64)
  451 +
  452 +DEF_HELPER_3(iwmmxt_muladdsl, i64, i64, i32, i32)
  453 +DEF_HELPER_3(iwmmxt_muladdsw, i64, i64, i32, i32)
  454 +DEF_HELPER_3(iwmmxt_muladdswl, i64, i64, i32, i32)
  455 +
  456 +#include "def-helper.h"
target-arm/op_addsub.h
@@ -8,9 +8,9 @@ @@ -8,9 +8,9 @@
8 */ 8 */
9 9
10 #ifdef ARITH_GE 10 #ifdef ARITH_GE
11 -#define GE_ARG , uint32_t *gep 11 +#define GE_ARG , void *gep
12 #define DECLARE_GE uint32_t ge = 0 12 #define DECLARE_GE uint32_t ge = 0
13 -#define SET_GE *gep = ge 13 +#define SET_GE *(uint32_t *)gep = ge
14 #else 14 #else
15 #define GE_ARG 15 #define GE_ARG
16 #define DECLARE_GE do{}while(0) 16 #define DECLARE_GE do{}while(0)
target-arm/translate.c
@@ -31,6 +31,7 @@ @@ -31,6 +31,7 @@
31 #include "tcg-op.h" 31 #include "tcg-op.h"
32 #include "qemu-log.h" 32 #include "qemu-log.h"
33 33
  34 +#include "helpers.h"
34 #define GEN_HELPER 1 35 #define GEN_HELPER 1
35 #include "helpers.h" 36 #include "helpers.h"
36 37
@@ -73,13 +74,14 @@ typedef struct DisasContext { @@ -73,13 +74,14 @@ typedef struct DisasContext {
73 #define DISAS_WFI 4 74 #define DISAS_WFI 4
74 #define DISAS_SWI 5 75 #define DISAS_SWI 5
75 76
76 -static TCGv cpu_env; 77 +static TCGv_ptr cpu_env;
77 /* We reuse the same 64-bit temporaries for efficiency. */ 78 /* We reuse the same 64-bit temporaries for efficiency. */
78 -static TCGv cpu_V0, cpu_V1, cpu_M0; 79 +static TCGv_i64 cpu_V0, cpu_V1, cpu_M0;
79 80
80 /* FIXME: These should be removed. */ 81 /* FIXME: These should be removed. */
81 static TCGv cpu_T[2]; 82 static TCGv cpu_T[2];
82 -static TCGv cpu_F0s, cpu_F1s, cpu_F0d, cpu_F1d; 83 +static TCGv cpu_F0s, cpu_F1s;
  84 +static TCGv_i64 cpu_F0d, cpu_F1d;
83 85
84 #define ICOUNT_TEMP cpu_T[0] 86 #define ICOUNT_TEMP cpu_T[0]
85 #include "gen-icount.h" 87 #include "gen-icount.h"
@@ -87,10 +89,13 @@ static TCGv cpu_F0s, cpu_F1s, cpu_F0d, cpu_F1d; @@ -87,10 +89,13 @@ static TCGv cpu_F0s, cpu_F1s, cpu_F0d, cpu_F1d;
87 /* initialize TCG globals. */ 89 /* initialize TCG globals. */
88 void arm_translate_init(void) 90 void arm_translate_init(void)
89 { 91 {
90 - cpu_env = tcg_global_reg_new(TCG_TYPE_PTR, TCG_AREG0, "env"); 92 + cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
  93 +
  94 + cpu_T[0] = tcg_global_reg_new_i32(TCG_AREG1, "T0");
  95 + cpu_T[1] = tcg_global_reg_new_i32(TCG_AREG2, "T1");
91 96
92 - cpu_T[0] = tcg_global_reg_new(TCG_TYPE_I32, TCG_AREG1, "T0");  
93 - cpu_T[1] = tcg_global_reg_new(TCG_TYPE_I32, TCG_AREG2, "T1"); 97 +#define GEN_HELPER 2
  98 +#include "helpers.h"
94 } 99 }
95 100
96 /* The code generator doesn't like lots of temporaries, so maintain our own 101 /* The code generator doesn't like lots of temporaries, so maintain our own
@@ -100,16 +105,16 @@ static int num_temps; @@ -100,16 +105,16 @@ static int num_temps;
100 static TCGv temps[MAX_TEMPS]; 105 static TCGv temps[MAX_TEMPS];
101 106
102 /* Allocate a temporary variable. */ 107 /* Allocate a temporary variable. */
103 -static TCGv new_tmp(void) 108 +static TCGv_i32 new_tmp(void)
104 { 109 {
105 TCGv tmp; 110 TCGv tmp;
106 if (num_temps == MAX_TEMPS) 111 if (num_temps == MAX_TEMPS)
107 abort(); 112 abort();
108 113
109 - if (GET_TCGV(temps[num_temps])) 114 + if (GET_TCGV_I32(temps[num_temps]))
110 return temps[num_temps++]; 115 return temps[num_temps++];
111 116
112 - tmp = tcg_temp_new(TCG_TYPE_I32); 117 + tmp = tcg_temp_new_i32();
113 temps[num_temps++] = tmp; 118 temps[num_temps++] = tmp;
114 return tmp; 119 return tmp;
115 } 120 }
@@ -120,11 +125,11 @@ static void dead_tmp(TCGv tmp) @@ -120,11 +125,11 @@ static void dead_tmp(TCGv tmp)
120 int i; 125 int i;
121 num_temps--; 126 num_temps--;
122 i = num_temps; 127 i = num_temps;
123 - if (GET_TCGV(temps[i]) == GET_TCGV(tmp)) 128 + if (TCGV_EQUAL(temps[i], tmp))
124 return; 129 return;
125 130
126 /* Shuffle this temp to the last slot. */ 131 /* Shuffle this temp to the last slot. */
127 - while (GET_TCGV(temps[i]) != GET_TCGV(tmp)) 132 + while (!TCGV_EQUAL(temps[i], tmp))
128 i--; 133 i--;
129 while (i < num_temps) { 134 while (i < num_temps) {
130 temps[i] = temps[i + 1]; 135 temps[i] = temps[i + 1];
@@ -324,10 +329,10 @@ static void gen_roundqd(TCGv a, TCGv b) @@ -324,10 +329,10 @@ static void gen_roundqd(TCGv a, TCGv b)
324 /* FIXME: Most targets have native widening multiplication. 329 /* FIXME: Most targets have native widening multiplication.
325 It would be good to use that instead of a full wide multiply. */ 330 It would be good to use that instead of a full wide multiply. */
326 /* 32x32->64 multiply. Marks inputs as dead. */ 331 /* 32x32->64 multiply. Marks inputs as dead. */
327 -static TCGv gen_mulu_i64_i32(TCGv a, TCGv b) 332 +static TCGv_i64 gen_mulu_i64_i32(TCGv a, TCGv b)
328 { 333 {
329 - TCGv tmp1 = tcg_temp_new(TCG_TYPE_I64);  
330 - TCGv tmp2 = tcg_temp_new(TCG_TYPE_I64); 334 + TCGv_i64 tmp1 = tcg_temp_new_i64();
  335 + TCGv_i64 tmp2 = tcg_temp_new_i64();
331 336
332 tcg_gen_extu_i32_i64(tmp1, a); 337 tcg_gen_extu_i32_i64(tmp1, a);
333 dead_tmp(a); 338 dead_tmp(a);
@@ -337,10 +342,10 @@ static TCGv gen_mulu_i64_i32(TCGv a, TCGv b) @@ -337,10 +342,10 @@ static TCGv gen_mulu_i64_i32(TCGv a, TCGv b)
337 return tmp1; 342 return tmp1;
338 } 343 }
339 344
340 -static TCGv gen_muls_i64_i32(TCGv a, TCGv b) 345 +static TCGv_i64 gen_muls_i64_i32(TCGv a, TCGv b)
341 { 346 {
342 - TCGv tmp1 = tcg_temp_new(TCG_TYPE_I64);  
343 - TCGv tmp2 = tcg_temp_new(TCG_TYPE_I64); 347 + TCGv_i64 tmp1 = tcg_temp_new_i64();
  348 + TCGv_i64 tmp2 = tcg_temp_new_i64();
344 349
345 tcg_gen_ext_i32_i64(tmp1, a); 350 tcg_gen_ext_i32_i64(tmp1, a);
346 dead_tmp(a); 351 dead_tmp(a);
@@ -353,8 +358,8 @@ static TCGv gen_muls_i64_i32(TCGv a, TCGv b) @@ -353,8 +358,8 @@ static TCGv gen_muls_i64_i32(TCGv a, TCGv b)
353 /* Unsigned 32x32->64 multiply. */ 358 /* Unsigned 32x32->64 multiply. */
354 static void gen_op_mull_T0_T1(void) 359 static void gen_op_mull_T0_T1(void)
355 { 360 {
356 - TCGv tmp1 = tcg_temp_new(TCG_TYPE_I64);  
357 - TCGv tmp2 = tcg_temp_new(TCG_TYPE_I64); 361 + TCGv_i64 tmp1 = tcg_temp_new_i64();
  362 + TCGv_i64 tmp2 = tcg_temp_new_i64();
358 363
359 tcg_gen_extu_i32_i64(tmp1, cpu_T[0]); 364 tcg_gen_extu_i32_i64(tmp1, cpu_T[0]);
360 tcg_gen_extu_i32_i64(tmp2, cpu_T[1]); 365 tcg_gen_extu_i32_i64(tmp2, cpu_T[1]);
@@ -367,8 +372,8 @@ static void gen_op_mull_T0_T1(void) @@ -367,8 +372,8 @@ static void gen_op_mull_T0_T1(void)
367 /* Signed 32x32->64 multiply. */ 372 /* Signed 32x32->64 multiply. */
368 static void gen_imull(TCGv a, TCGv b) 373 static void gen_imull(TCGv a, TCGv b)
369 { 374 {
370 - TCGv tmp1 = tcg_temp_new(TCG_TYPE_I64);  
371 - TCGv tmp2 = tcg_temp_new(TCG_TYPE_I64); 375 + TCGv_i64 tmp1 = tcg_temp_new_i64();
  376 + TCGv_i64 tmp2 = tcg_temp_new_i64();
372 377
373 tcg_gen_ext_i32_i64(tmp1, a); 378 tcg_gen_ext_i32_i64(tmp1, a);
374 tcg_gen_ext_i32_i64(tmp2, b); 379 tcg_gen_ext_i32_i64(tmp2, b);
@@ -580,17 +585,17 @@ static inline void gen_arm_shift_reg(TCGv var, int shiftop, @@ -580,17 +585,17 @@ static inline void gen_arm_shift_reg(TCGv var, int shiftop,
580 } 585 }
581 static void gen_arm_parallel_addsub(int op1, int op2, TCGv a, TCGv b) 586 static void gen_arm_parallel_addsub(int op1, int op2, TCGv a, TCGv b)
582 { 587 {
583 - TCGv tmp; 588 + TCGv_ptr tmp;
584 589
585 switch (op1) { 590 switch (op1) {
586 #define gen_pas_helper(name) glue(gen_helper_,name)(a, a, b, tmp) 591 #define gen_pas_helper(name) glue(gen_helper_,name)(a, a, b, tmp)
587 case 1: 592 case 1:
588 - tmp = tcg_temp_new(TCG_TYPE_PTR); 593 + tmp = tcg_temp_new_ptr();
589 tcg_gen_addi_ptr(tmp, cpu_env, offsetof(CPUState, GE)); 594 tcg_gen_addi_ptr(tmp, cpu_env, offsetof(CPUState, GE));
590 PAS_OP(s) 595 PAS_OP(s)
591 break; 596 break;
592 case 5: 597 case 5:
593 - tmp = tcg_temp_new(TCG_TYPE_PTR); 598 + tmp = tcg_temp_new_ptr();
594 tcg_gen_addi_ptr(tmp, cpu_env, offsetof(CPUState, GE)); 599 tcg_gen_addi_ptr(tmp, cpu_env, offsetof(CPUState, GE));
595 PAS_OP(u) 600 PAS_OP(u)
596 break; 601 break;
@@ -625,17 +630,17 @@ static void gen_arm_parallel_addsub(int op1, int op2, TCGv a, TCGv b) @@ -625,17 +630,17 @@ static void gen_arm_parallel_addsub(int op1, int op2, TCGv a, TCGv b)
625 } 630 }
626 static void gen_thumb2_parallel_addsub(int op1, int op2, TCGv a, TCGv b) 631 static void gen_thumb2_parallel_addsub(int op1, int op2, TCGv a, TCGv b)
627 { 632 {
628 - TCGv tmp; 633 + TCGv_ptr tmp;
629 634
630 switch (op1) { 635 switch (op1) {
631 #define gen_pas_helper(name) glue(gen_helper_,name)(a, a, b, tmp) 636 #define gen_pas_helper(name) glue(gen_helper_,name)(a, a, b, tmp)
632 case 0: 637 case 0:
633 - tmp = tcg_temp_new(TCG_TYPE_PTR); 638 + tmp = tcg_temp_new_ptr();
634 tcg_gen_addi_ptr(tmp, cpu_env, offsetof(CPUState, GE)); 639 tcg_gen_addi_ptr(tmp, cpu_env, offsetof(CPUState, GE));
635 PAS_OP(s) 640 PAS_OP(s)
636 break; 641 break;
637 case 4: 642 case 4:
638 - tmp = tcg_temp_new(TCG_TYPE_PTR); 643 + tmp = tcg_temp_new_ptr();
639 tcg_gen_addi_ptr(tmp, cpu_env, offsetof(CPUState, GE)); 644 tcg_gen_addi_ptr(tmp, cpu_env, offsetof(CPUState, GE));
640 PAS_OP(u) 645 PAS_OP(u)
641 break; 646 break;
@@ -1181,12 +1186,12 @@ static void neon_store_reg(int reg, int pass, TCGv var) @@ -1181,12 +1186,12 @@ static void neon_store_reg(int reg, int pass, TCGv var)
1181 dead_tmp(var); 1186 dead_tmp(var);
1182 } 1187 }
1183 1188
1184 -static inline void neon_load_reg64(TCGv var, int reg) 1189 +static inline void neon_load_reg64(TCGv_i64 var, int reg)
1185 { 1190 {
1186 tcg_gen_ld_i64(var, cpu_env, vfp_reg_offset(1, reg)); 1191 tcg_gen_ld_i64(var, cpu_env, vfp_reg_offset(1, reg));
1187 } 1192 }
1188 1193
1189 -static inline void neon_store_reg64(TCGv var, int reg) 1194 +static inline void neon_store_reg64(TCGv_i64 var, int reg)
1190 { 1195 {
1191 tcg_gen_st_i64(var, cpu_env, vfp_reg_offset(1, reg)); 1196 tcg_gen_st_i64(var, cpu_env, vfp_reg_offset(1, reg));
1192 } 1197 }
@@ -1222,12 +1227,12 @@ static inline void gen_mov_vreg_F0(int dp, int reg) @@ -1222,12 +1227,12 @@ static inline void gen_mov_vreg_F0(int dp, int reg)
1222 1227
1223 #define ARM_CP_RW_BIT (1 << 20) 1228 #define ARM_CP_RW_BIT (1 << 20)
1224 1229
1225 -static inline void iwmmxt_load_reg(TCGv var, int reg) 1230 +static inline void iwmmxt_load_reg(TCGv_i64 var, int reg)
1226 { 1231 {
1227 tcg_gen_ld_i64(var, cpu_env, offsetof(CPUState, iwmmxt.regs[reg])); 1232 tcg_gen_ld_i64(var, cpu_env, offsetof(CPUState, iwmmxt.regs[reg]));
1228 } 1233 }
1229 1234
1230 -static inline void iwmmxt_store_reg(TCGv var, int reg) 1235 +static inline void iwmmxt_store_reg(TCGv_i64 var, int reg)
1231 { 1236 {
1232 tcg_gen_st_i64(var, cpu_env, offsetof(CPUState, iwmmxt.regs[reg])); 1237 tcg_gen_st_i64(var, cpu_env, offsetof(CPUState, iwmmxt.regs[reg]));
1233 } 1238 }
@@ -3907,7 +3912,7 @@ static void gen_neon_bsl(TCGv dest, TCGv t, TCGv f, TCGv c) @@ -3907,7 +3912,7 @@ static void gen_neon_bsl(TCGv dest, TCGv t, TCGv f, TCGv c)
3907 tcg_gen_or_i32(dest, t, f); 3912 tcg_gen_or_i32(dest, t, f);
3908 } 3913 }
3909 3914
3910 -static inline void gen_neon_narrow(int size, TCGv dest, TCGv src) 3915 +static inline void gen_neon_narrow(int size, TCGv dest, TCGv_i64 src)
3911 { 3916 {
3912 switch (size) { 3917 switch (size) {
3913 case 0: gen_helper_neon_narrow_u8(dest, src); break; 3918 case 0: gen_helper_neon_narrow_u8(dest, src); break;
@@ -3917,7 +3922,7 @@ static inline void gen_neon_narrow(int size, TCGv dest, TCGv src) @@ -3917,7 +3922,7 @@ static inline void gen_neon_narrow(int size, TCGv dest, TCGv src)
3917 } 3922 }
3918 } 3923 }
3919 3924
3920 -static inline void gen_neon_narrow_sats(int size, TCGv dest, TCGv src) 3925 +static inline void gen_neon_narrow_sats(int size, TCGv dest, TCGv_i64 src)
3921 { 3926 {
3922 switch (size) { 3927 switch (size) {
3923 case 0: gen_helper_neon_narrow_sat_s8(dest, cpu_env, src); break; 3928 case 0: gen_helper_neon_narrow_sat_s8(dest, cpu_env, src); break;
@@ -3927,7 +3932,7 @@ static inline void gen_neon_narrow_sats(int size, TCGv dest, TCGv src) @@ -3927,7 +3932,7 @@ static inline void gen_neon_narrow_sats(int size, TCGv dest, TCGv src)
3927 } 3932 }
3928 } 3933 }
3929 3934
3930 -static inline void gen_neon_narrow_satu(int size, TCGv dest, TCGv src) 3935 +static inline void gen_neon_narrow_satu(int size, TCGv dest, TCGv_i64 src)
3931 { 3936 {
3932 switch (size) { 3937 switch (size) {
3933 case 0: gen_helper_neon_narrow_sat_u8(dest, cpu_env, src); break; 3938 case 0: gen_helper_neon_narrow_sat_u8(dest, cpu_env, src); break;
@@ -3971,7 +3976,7 @@ static inline void gen_neon_shift_narrow(int size, TCGv var, TCGv shift, @@ -3971,7 +3976,7 @@ static inline void gen_neon_shift_narrow(int size, TCGv var, TCGv shift,
3971 } 3976 }
3972 } 3977 }
3973 3978
3974 -static inline void gen_neon_widen(TCGv dest, TCGv src, int size, int u) 3979 +static inline void gen_neon_widen(TCGv_i64 dest, TCGv src, int size, int u)
3975 { 3980 {
3976 if (u) { 3981 if (u) {
3977 switch (size) { 3982 switch (size) {
@@ -4011,7 +4016,7 @@ static inline void gen_neon_subl(int size) @@ -4011,7 +4016,7 @@ static inline void gen_neon_subl(int size)
4011 } 4016 }
4012 } 4017 }
4013 4018
4014 -static inline void gen_neon_negl(TCGv var, int size) 4019 +static inline void gen_neon_negl(TCGv_i64 var, int size)
4015 { 4020 {
4016 switch (size) { 4021 switch (size) {
4017 case 0: gen_helper_neon_negl_u16(var, var); break; 4022 case 0: gen_helper_neon_negl_u16(var, var); break;
@@ -4021,7 +4026,7 @@ static inline void gen_neon_negl(TCGv var, int size) @@ -4021,7 +4026,7 @@ static inline void gen_neon_negl(TCGv var, int size)
4021 } 4026 }
4022 } 4027 }
4023 4028
4024 -static inline void gen_neon_addl_saturate(TCGv op0, TCGv op1, int size) 4029 +static inline void gen_neon_addl_saturate(TCGv_i64 op0, TCGv_i64 op1, int size)
4025 { 4030 {
4026 switch (size) { 4031 switch (size) {
4027 case 1: gen_helper_neon_addl_saturate_s32(op0, cpu_env, op0, op1); break; 4032 case 1: gen_helper_neon_addl_saturate_s32(op0, cpu_env, op0, op1); break;
@@ -4030,9 +4035,9 @@ static inline void gen_neon_addl_saturate(TCGv op0, TCGv op1, int size) @@ -4030,9 +4035,9 @@ static inline void gen_neon_addl_saturate(TCGv op0, TCGv op1, int size)
4030 } 4035 }
4031 } 4036 }
4032 4037
4033 -static inline void gen_neon_mull(TCGv dest, TCGv a, TCGv b, int size, int u) 4038 +static inline void gen_neon_mull(TCGv_i64 dest, TCGv a, TCGv b, int size, int u)
4034 { 4039 {
4035 - TCGv tmp; 4040 + TCGv_i64 tmp;
4036 4041
4037 switch ((size << 1) | u) { 4042 switch ((size << 1) | u) {
4038 case 0: gen_helper_neon_mull_s8(dest, a, b); break; 4043 case 0: gen_helper_neon_mull_s8(dest, a, b); break;
@@ -4076,6 +4081,7 @@ static int disas_neon_data_insn(CPUState * env, DisasContext *s, uint32_t insn) @@ -4076,6 +4081,7 @@ static int disas_neon_data_insn(CPUState * env, DisasContext *s, uint32_t insn)
4076 TCGv tmp; 4081 TCGv tmp;
4077 TCGv tmp2; 4082 TCGv tmp2;
4078 TCGv tmp3; 4083 TCGv tmp3;
  4084 + TCGv_i64 tmp64;
4079 4085
4080 if (!vfp_enabled(env)) 4086 if (!vfp_enabled(env))
4081 return 1; 4087 return 1;
@@ -4632,12 +4638,15 @@ static int disas_neon_data_insn(CPUState * env, DisasContext *s, uint32_t insn) @@ -4632,12 +4638,15 @@ static int disas_neon_data_insn(CPUState * env, DisasContext *s, uint32_t insn)
4632 imm = (uint16_t)shift; 4638 imm = (uint16_t)shift;
4633 imm |= imm << 16; 4639 imm |= imm << 16;
4634 tmp2 = tcg_const_i32(imm); 4640 tmp2 = tcg_const_i32(imm);
  4641 + TCGV_UNUSED_I64(tmp64);
4635 break; 4642 break;
4636 case 2: 4643 case 2:
4637 imm = (uint32_t)shift; 4644 imm = (uint32_t)shift;
4638 tmp2 = tcg_const_i32(imm); 4645 tmp2 = tcg_const_i32(imm);
  4646 + TCGV_UNUSED_I64(tmp64);
4639 case 3: 4647 case 3:
4640 - tmp2 = tcg_const_i64(shift); 4648 + tmp64 = tcg_const_i64(shift);
  4649 + TCGV_UNUSED(tmp2);
4641 break; 4650 break;
4642 default: 4651 default:
4643 abort(); 4652 abort();
@@ -4648,14 +4657,14 @@ static int disas_neon_data_insn(CPUState * env, DisasContext *s, uint32_t insn) @@ -4648,14 +4657,14 @@ static int disas_neon_data_insn(CPUState * env, DisasContext *s, uint32_t insn)
4648 neon_load_reg64(cpu_V0, rm + pass); 4657 neon_load_reg64(cpu_V0, rm + pass);
4649 if (q) { 4658 if (q) {
4650 if (u) 4659 if (u)
4651 - gen_helper_neon_rshl_u64(cpu_V0, cpu_V0, tmp2); 4660 + gen_helper_neon_rshl_u64(cpu_V0, cpu_V0, tmp64);
4652 else 4661 else
4653 - gen_helper_neon_rshl_s64(cpu_V0, cpu_V0, tmp2); 4662 + gen_helper_neon_rshl_s64(cpu_V0, cpu_V0, tmp64);
4654 } else { 4663 } else {
4655 if (u) 4664 if (u)
4656 - gen_helper_neon_shl_u64(cpu_V0, cpu_V0, tmp2); 4665 + gen_helper_neon_shl_u64(cpu_V0, cpu_V0, tmp64);
4657 else 4666 else
4658 - gen_helper_neon_shl_s64(cpu_V0, cpu_V0, tmp2); 4667 + gen_helper_neon_shl_s64(cpu_V0, cpu_V0, tmp64);
4659 } 4668 }
4660 } else { 4669 } else {
4661 tmp = neon_load_reg(rm + pass, 0); 4670 tmp = neon_load_reg(rm + pass, 0);
@@ -5130,16 +5139,16 @@ static int disas_neon_data_insn(CPUState * env, DisasContext *s, uint32_t insn) @@ -5130,16 +5139,16 @@ static int disas_neon_data_insn(CPUState * env, DisasContext *s, uint32_t insn)
5130 neon_load_reg64(cpu_V1, rm); 5139 neon_load_reg64(cpu_V1, rm);
5131 } 5140 }
5132 } else if (q) { 5141 } else if (q) {
5133 - tmp = tcg_temp_new(TCG_TYPE_I64); 5142 + tmp64 = tcg_temp_new_i64();
5134 if (imm < 8) { 5143 if (imm < 8) {
5135 neon_load_reg64(cpu_V0, rn); 5144 neon_load_reg64(cpu_V0, rn);
5136 - neon_load_reg64(tmp, rn + 1); 5145 + neon_load_reg64(tmp64, rn + 1);
5137 } else { 5146 } else {
5138 neon_load_reg64(cpu_V0, rn + 1); 5147 neon_load_reg64(cpu_V0, rn + 1);
5139 - neon_load_reg64(tmp, rm); 5148 + neon_load_reg64(tmp64, rm);
5140 } 5149 }
5141 tcg_gen_shri_i64(cpu_V0, cpu_V0, (imm & 7) * 8); 5150 tcg_gen_shri_i64(cpu_V0, cpu_V0, (imm & 7) * 8);
5142 - tcg_gen_shli_i64(cpu_V1, tmp, 64 - ((imm & 7) * 8)); 5151 + tcg_gen_shli_i64(cpu_V1, tmp64, 64 - ((imm & 7) * 8));
5143 tcg_gen_or_i64(cpu_V0, cpu_V0, cpu_V1); 5152 tcg_gen_or_i64(cpu_V0, cpu_V0, cpu_V1);
5144 if (imm < 8) { 5153 if (imm < 8) {
5145 neon_load_reg64(cpu_V1, rm); 5154 neon_load_reg64(cpu_V1, rm);
@@ -5148,13 +5157,14 @@ static int disas_neon_data_insn(CPUState * env, DisasContext *s, uint32_t insn) @@ -5148,13 +5157,14 @@ static int disas_neon_data_insn(CPUState * env, DisasContext *s, uint32_t insn)
5148 imm -= 8; 5157 imm -= 8;
5149 } 5158 }
5150 tcg_gen_shli_i64(cpu_V1, cpu_V1, 64 - (imm * 8)); 5159 tcg_gen_shli_i64(cpu_V1, cpu_V1, 64 - (imm * 8));
5151 - tcg_gen_shri_i64(tmp, tmp, imm * 8);  
5152 - tcg_gen_or_i64(cpu_V1, cpu_V1, tmp); 5160 + tcg_gen_shri_i64(tmp64, tmp64, imm * 8);
  5161 + tcg_gen_or_i64(cpu_V1, cpu_V1, tmp64);
5153 } else { 5162 } else {
  5163 + /* BUGFIX */
5154 neon_load_reg64(cpu_V0, rn); 5164 neon_load_reg64(cpu_V0, rn);
5155 - tcg_gen_shri_i32(cpu_V0, cpu_V0, imm * 8); 5165 + tcg_gen_shri_i64(cpu_V0, cpu_V0, imm * 8);
5156 neon_load_reg64(cpu_V1, rm); 5166 neon_load_reg64(cpu_V1, rm);
5157 - tcg_gen_shli_i32(cpu_V1, cpu_V1, 64 - (imm * 8)); 5167 + tcg_gen_shli_i64(cpu_V1, cpu_V1, 64 - (imm * 8));
5158 tcg_gen_or_i64(cpu_V0, cpu_V0, cpu_V1); 5168 tcg_gen_or_i64(cpu_V0, cpu_V0, cpu_V1);
5159 } 5169 }
5160 neon_store_reg64(cpu_V0, rd); 5170 neon_store_reg64(cpu_V0, rd);
@@ -5578,7 +5588,7 @@ static int disas_coproc_insn(CPUState * env, DisasContext *s, uint32_t insn) @@ -5578,7 +5588,7 @@ static int disas_coproc_insn(CPUState * env, DisasContext *s, uint32_t insn)
5578 5588
5579 5589
5580 /* Store a 64-bit value to a register pair. Clobbers val. */ 5590 /* Store a 64-bit value to a register pair. Clobbers val. */
5581 -static void gen_storeq_reg(DisasContext *s, int rlow, int rhigh, TCGv val) 5591 +static void gen_storeq_reg(DisasContext *s, int rlow, int rhigh, TCGv_i64 val)
5582 { 5592 {
5583 TCGv tmp; 5593 TCGv tmp;
5584 tmp = new_tmp(); 5594 tmp = new_tmp();
@@ -5591,13 +5601,13 @@ static void gen_storeq_reg(DisasContext *s, int rlow, int rhigh, TCGv val) @@ -5591,13 +5601,13 @@ static void gen_storeq_reg(DisasContext *s, int rlow, int rhigh, TCGv val)
5591 } 5601 }
5592 5602
5593 /* load a 32-bit value from a register and perform a 64-bit accumulate. */ 5603 /* load a 32-bit value from a register and perform a 64-bit accumulate. */
5594 -static void gen_addq_lo(DisasContext *s, TCGv val, int rlow) 5604 +static void gen_addq_lo(DisasContext *s, TCGv_i64 val, int rlow)
5595 { 5605 {
5596 - TCGv tmp; 5606 + TCGv_i64 tmp;
5597 TCGv tmp2; 5607 TCGv tmp2;
5598 5608
5599 /* Load value and extend to 64 bits. */ 5609 /* Load value and extend to 64 bits. */
5600 - tmp = tcg_temp_new(TCG_TYPE_I64); 5610 + tmp = tcg_temp_new_i64();
5601 tmp2 = load_reg(s, rlow); 5611 tmp2 = load_reg(s, rlow);
5602 tcg_gen_extu_i32_i64(tmp, tmp2); 5612 tcg_gen_extu_i32_i64(tmp, tmp2);
5603 dead_tmp(tmp2); 5613 dead_tmp(tmp2);
@@ -5605,16 +5615,16 @@ static void gen_addq_lo(DisasContext *s, TCGv val, int rlow) @@ -5605,16 +5615,16 @@ static void gen_addq_lo(DisasContext *s, TCGv val, int rlow)
5605 } 5615 }
5606 5616
5607 /* load and add a 64-bit value from a register pair. */ 5617 /* load and add a 64-bit value from a register pair. */
5608 -static void gen_addq(DisasContext *s, TCGv val, int rlow, int rhigh) 5618 +static void gen_addq(DisasContext *s, TCGv_i64 val, int rlow, int rhigh)
5609 { 5619 {
5610 - TCGv tmp; 5620 + TCGv_i64 tmp;
5611 TCGv tmpl; 5621 TCGv tmpl;
5612 TCGv tmph; 5622 TCGv tmph;
5613 5623
5614 /* Load 64-bit value rd:rn. */ 5624 /* Load 64-bit value rd:rn. */
5615 tmpl = load_reg(s, rlow); 5625 tmpl = load_reg(s, rlow);
5616 tmph = load_reg(s, rhigh); 5626 tmph = load_reg(s, rhigh);
5617 - tmp = tcg_temp_new(TCG_TYPE_I64); 5627 + tmp = tcg_temp_new_i64();
5618 tcg_gen_concat_i32_i64(tmp, tmpl, tmph); 5628 tcg_gen_concat_i32_i64(tmp, tmpl, tmph);
5619 dead_tmp(tmpl); 5629 dead_tmp(tmpl);
5620 dead_tmp(tmph); 5630 dead_tmp(tmph);
@@ -5622,7 +5632,7 @@ static void gen_addq(DisasContext *s, TCGv val, int rlow, int rhigh) @@ -5622,7 +5632,7 @@ static void gen_addq(DisasContext *s, TCGv val, int rlow, int rhigh)
5622 } 5632 }
5623 5633
5624 /* Set N and Z flags from a 64-bit value. */ 5634 /* Set N and Z flags from a 64-bit value. */
5625 -static void gen_logicq_cc(TCGv val) 5635 +static void gen_logicq_cc(TCGv_i64 val)
5626 { 5636 {
5627 TCGv tmp = new_tmp(); 5637 TCGv tmp = new_tmp();
5628 gen_helper_logicq_cc(tmp, val); 5638 gen_helper_logicq_cc(tmp, val);
@@ -5637,6 +5647,7 @@ static void disas_arm_insn(CPUState * env, DisasContext *s) @@ -5637,6 +5647,7 @@ static void disas_arm_insn(CPUState * env, DisasContext *s)
5637 TCGv tmp2; 5647 TCGv tmp2;
5638 TCGv tmp3; 5648 TCGv tmp3;
5639 TCGv addr; 5649 TCGv addr;
  5650 + TCGv_i64 tmp64;
5640 5651
5641 insn = ldl_code(s->pc); 5652 insn = ldl_code(s->pc);
5642 s->pc += 4; 5653 s->pc += 4;
@@ -5971,10 +5982,10 @@ static void disas_arm_insn(CPUState * env, DisasContext *s) @@ -5971,10 +5982,10 @@ static void disas_arm_insn(CPUState * env, DisasContext *s)
5971 tcg_gen_sari_i32(tmp2, tmp2, 16); 5982 tcg_gen_sari_i32(tmp2, tmp2, 16);
5972 else 5983 else
5973 gen_sxth(tmp2); 5984 gen_sxth(tmp2);
5974 - tmp2 = gen_muls_i64_i32(tmp, tmp2);  
5975 - tcg_gen_shri_i64(tmp2, tmp2, 16); 5985 + tmp64 = gen_muls_i64_i32(tmp, tmp2);
  5986 + tcg_gen_shri_i64(tmp64, tmp64, 16);
5976 tmp = new_tmp(); 5987 tmp = new_tmp();
5977 - tcg_gen_trunc_i64_i32(tmp, tmp2); 5988 + tcg_gen_trunc_i64_i32(tmp, tmp64);
5978 if ((sh & 2) == 0) { 5989 if ((sh & 2) == 0) {
5979 tmp2 = load_reg(s, rn); 5990 tmp2 = load_reg(s, rn);
5980 gen_helper_add_setq(tmp, tmp, tmp2); 5991 gen_helper_add_setq(tmp, tmp, tmp2);
@@ -5988,11 +5999,11 @@ static void disas_arm_insn(CPUState * env, DisasContext *s) @@ -5988,11 +5999,11 @@ static void disas_arm_insn(CPUState * env, DisasContext *s)
5988 gen_mulxy(tmp, tmp2, sh & 2, sh & 4); 5999 gen_mulxy(tmp, tmp2, sh & 2, sh & 4);
5989 dead_tmp(tmp2); 6000 dead_tmp(tmp2);
5990 if (op1 == 2) { 6001 if (op1 == 2) {
5991 - tmp2 = tcg_temp_new(TCG_TYPE_I64);  
5992 - tcg_gen_ext_i32_i64(tmp2, tmp); 6002 + tmp64 = tcg_temp_new_i64();
  6003 + tcg_gen_ext_i32_i64(tmp64, tmp);
5993 dead_tmp(tmp); 6004 dead_tmp(tmp);
5994 - gen_addq(s, tmp2, rn, rd);  
5995 - gen_storeq_reg(s, rn, rd, tmp2); 6005 + gen_addq(s, tmp64, rn, rd);
  6006 + gen_storeq_reg(s, rn, rd, tmp64);
5996 } else { 6007 } else {
5997 if (op1 == 0) { 6008 if (op1 == 0) {
5998 tmp2 = load_reg(s, rn); 6009 tmp2 = load_reg(s, rn);
@@ -6205,19 +6216,19 @@ static void disas_arm_insn(CPUState * env, DisasContext *s) @@ -6205,19 +6216,19 @@ static void disas_arm_insn(CPUState * env, DisasContext *s)
6205 tmp = load_reg(s, rs); 6216 tmp = load_reg(s, rs);
6206 tmp2 = load_reg(s, rm); 6217 tmp2 = load_reg(s, rm);
6207 if (insn & (1 << 22)) 6218 if (insn & (1 << 22))
6208 - tmp = gen_muls_i64_i32(tmp, tmp2); 6219 + tmp64 = gen_muls_i64_i32(tmp, tmp2);
6209 else 6220 else
6210 - tmp = gen_mulu_i64_i32(tmp, tmp2); 6221 + tmp64 = gen_mulu_i64_i32(tmp, tmp2);
6211 if (insn & (1 << 21)) /* mult accumulate */ 6222 if (insn & (1 << 21)) /* mult accumulate */
6212 - gen_addq(s, tmp, rn, rd); 6223 + gen_addq(s, tmp64, rn, rd);
6213 if (!(insn & (1 << 23))) { /* double accumulate */ 6224 if (!(insn & (1 << 23))) { /* double accumulate */
6214 ARCH(6); 6225 ARCH(6);
6215 - gen_addq_lo(s, tmp, rn);  
6216 - gen_addq_lo(s, tmp, rd); 6226 + gen_addq_lo(s, tmp64, rn);
  6227 + gen_addq_lo(s, tmp64, rd);
6217 } 6228 }
6218 if (insn & (1 << 20)) 6229 if (insn & (1 << 20))
6219 - gen_logicq_cc(tmp);  
6220 - gen_storeq_reg(s, rn, rd, tmp); 6230 + gen_logicq_cc(tmp64);
  6231 + gen_storeq_reg(s, rn, rd, tmp64);
6221 break; 6232 break;
6222 } 6233 }
6223 } else { 6234 } else {
@@ -6515,12 +6526,12 @@ static void disas_arm_insn(CPUState * env, DisasContext *s) @@ -6515,12 +6526,12 @@ static void disas_arm_insn(CPUState * env, DisasContext *s)
6515 tmp2 = load_reg(s, rs); 6526 tmp2 = load_reg(s, rs);
6516 if (insn & (1 << 20)) { 6527 if (insn & (1 << 20)) {
6517 /* Signed multiply most significant [accumulate]. */ 6528 /* Signed multiply most significant [accumulate]. */
6518 - tmp2 = gen_muls_i64_i32(tmp, tmp2); 6529 + tmp64 = gen_muls_i64_i32(tmp, tmp2);
6519 if (insn & (1 << 5)) 6530 if (insn & (1 << 5))
6520 - tcg_gen_addi_i64(tmp2, tmp2, 0x80000000u);  
6521 - tcg_gen_shri_i64(tmp2, tmp2, 32); 6531 + tcg_gen_addi_i64(tmp64, tmp64, 0x80000000u);
  6532 + tcg_gen_shri_i64(tmp64, tmp64, 32);
6522 tmp = new_tmp(); 6533 tmp = new_tmp();
6523 - tcg_gen_trunc_i64_i32(tmp, tmp2); 6534 + tcg_gen_trunc_i64_i32(tmp, tmp64);
6524 if (rn != 15) { 6535 if (rn != 15) {
6525 tmp2 = load_reg(s, rn); 6536 tmp2 = load_reg(s, rn);
6526 if (insn & (1 << 6)) { 6537 if (insn & (1 << 6)) {
@@ -6544,11 +6555,11 @@ static void disas_arm_insn(CPUState * env, DisasContext *s) @@ -6544,11 +6555,11 @@ static void disas_arm_insn(CPUState * env, DisasContext *s)
6544 dead_tmp(tmp2); 6555 dead_tmp(tmp2);
6545 if (insn & (1 << 22)) { 6556 if (insn & (1 << 22)) {
6546 /* smlald, smlsld */ 6557 /* smlald, smlsld */
6547 - tmp2 = tcg_temp_new(TCG_TYPE_I64);  
6548 - tcg_gen_ext_i32_i64(tmp2, tmp); 6558 + tmp64 = tcg_temp_new_i64();
  6559 + tcg_gen_ext_i32_i64(tmp64, tmp);
6549 dead_tmp(tmp); 6560 dead_tmp(tmp);
6550 - gen_addq(s, tmp2, rd, rn);  
6551 - gen_storeq_reg(s, rd, rn, tmp2); 6561 + gen_addq(s, tmp64, rd, rn);
  6562 + gen_storeq_reg(s, rd, rn, tmp64);
6552 } else { 6563 } else {
6553 /* smuad, smusd, smlad, smlsd */ 6564 /* smuad, smusd, smlad, smlsd */
6554 if (rd != 15) 6565 if (rd != 15)
@@ -6917,6 +6928,7 @@ static int disas_thumb2_insn(CPUState *env, DisasContext *s, uint16_t insn_hw1) @@ -6917,6 +6928,7 @@ static int disas_thumb2_insn(CPUState *env, DisasContext *s, uint16_t insn_hw1)
6917 TCGv tmp2; 6928 TCGv tmp2;
6918 TCGv tmp3; 6929 TCGv tmp3;
6919 TCGv addr; 6930 TCGv addr;
  6931 + TCGv_i64 tmp64;
6920 int op; 6932 int op;
6921 int shiftop; 6933 int shiftop;
6922 int conds; 6934 int conds;
@@ -7393,10 +7405,10 @@ static int disas_thumb2_insn(CPUState *env, DisasContext *s, uint16_t insn_hw1) @@ -7393,10 +7405,10 @@ static int disas_thumb2_insn(CPUState *env, DisasContext *s, uint16_t insn_hw1)
7393 tcg_gen_sari_i32(tmp2, tmp2, 16); 7405 tcg_gen_sari_i32(tmp2, tmp2, 16);
7394 else 7406 else
7395 gen_sxth(tmp2); 7407 gen_sxth(tmp2);
7396 - tmp2 = gen_muls_i64_i32(tmp, tmp2);  
7397 - tcg_gen_shri_i64(tmp2, tmp2, 16); 7408 + tmp64 = gen_muls_i64_i32(tmp, tmp2);
  7409 + tcg_gen_shri_i64(tmp64, tmp64, 16);
7398 tmp = new_tmp(); 7410 tmp = new_tmp();
7399 - tcg_gen_trunc_i64_i32(tmp, tmp2); 7411 + tcg_gen_trunc_i64_i32(tmp, tmp64);
7400 if (rs != 15) 7412 if (rs != 15)
7401 { 7413 {
7402 tmp2 = load_reg(s, rs); 7414 tmp2 = load_reg(s, rs);
@@ -7460,36 +7472,38 @@ static int disas_thumb2_insn(CPUState *env, DisasContext *s, uint16_t insn_hw1) @@ -7460,36 +7472,38 @@ static int disas_thumb2_insn(CPUState *env, DisasContext *s, uint16_t insn_hw1)
7460 tcg_gen_add_i32(tmp, tmp, tmp2); 7472 tcg_gen_add_i32(tmp, tmp, tmp2);
7461 } 7473 }
7462 dead_tmp(tmp2); 7474 dead_tmp(tmp2);
7463 - tmp2 = tcg_temp_new(TCG_TYPE_I64);  
7464 - gen_addq(s, tmp, rs, rd);  
7465 - gen_storeq_reg(s, rs, rd, tmp); 7475 + /* BUGFIX */
  7476 + tmp64 = tcg_temp_new_i64();
  7477 + tcg_gen_ext_i32_i64(tmp64, tmp);
  7478 + dead_tmp(tmp);
  7479 + gen_addq(s, tmp64, rs, rd);
  7480 + gen_storeq_reg(s, rs, rd, tmp64);
7466 } else { 7481 } else {
7467 if (op & 0x20) { 7482 if (op & 0x20) {
7468 /* Unsigned 64-bit multiply */ 7483 /* Unsigned 64-bit multiply */
7469 - tmp = gen_mulu_i64_i32(tmp, tmp2); 7484 + tmp64 = gen_mulu_i64_i32(tmp, tmp2);
7470 } else { 7485 } else {
7471 if (op & 8) { 7486 if (op & 8) {
7472 /* smlalxy */ 7487 /* smlalxy */
7473 gen_mulxy(tmp, tmp2, op & 2, op & 1); 7488 gen_mulxy(tmp, tmp2, op & 2, op & 1);
7474 dead_tmp(tmp2); 7489 dead_tmp(tmp2);
7475 - tmp2 = tcg_temp_new(TCG_TYPE_I64);  
7476 - tcg_gen_ext_i32_i64(tmp2, tmp); 7490 + tmp64 = tcg_temp_new_i64();
  7491 + tcg_gen_ext_i32_i64(tmp64, tmp);
7477 dead_tmp(tmp); 7492 dead_tmp(tmp);
7478 - tmp = tmp2;  
7479 } else { 7493 } else {
7480 /* Signed 64-bit multiply */ 7494 /* Signed 64-bit multiply */
7481 - tmp = gen_muls_i64_i32(tmp, tmp2); 7495 + tmp64 = gen_muls_i64_i32(tmp, tmp2);
7482 } 7496 }
7483 } 7497 }
7484 if (op & 4) { 7498 if (op & 4) {
7485 /* umaal */ 7499 /* umaal */
7486 - gen_addq_lo(s, tmp, rs);  
7487 - gen_addq_lo(s, tmp, rd); 7500 + gen_addq_lo(s, tmp64, rs);
  7501 + gen_addq_lo(s, tmp64, rd);
7488 } else if (op & 0x40) { 7502 } else if (op & 0x40) {
7489 /* 64-bit accumulate. */ 7503 /* 64-bit accumulate. */
7490 - gen_addq(s, tmp, rs, rd); 7504 + gen_addq(s, tmp64, rs, rd);
7491 } 7505 }
7492 - gen_storeq_reg(s, rs, rd, tmp); 7506 + gen_storeq_reg(s, rs, rd, tmp64);
7493 } 7507 }
7494 break; 7508 break;
7495 } 7509 }
@@ -8618,14 +8632,14 @@ static inline void gen_intermediate_code_internal(CPUState *env, @@ -8618,14 +8632,14 @@ static inline void gen_intermediate_code_internal(CPUState *env,
8618 dc->user = (env->uncached_cpsr & 0x1f) == ARM_CPU_MODE_USR; 8632 dc->user = (env->uncached_cpsr & 0x1f) == ARM_CPU_MODE_USR;
8619 } 8633 }
8620 #endif 8634 #endif
8621 - cpu_F0s = tcg_temp_new(TCG_TYPE_I32);  
8622 - cpu_F1s = tcg_temp_new(TCG_TYPE_I32);  
8623 - cpu_F0d = tcg_temp_new(TCG_TYPE_I64);  
8624 - cpu_F1d = tcg_temp_new(TCG_TYPE_I64); 8635 + cpu_F0s = tcg_temp_new_i32();
  8636 + cpu_F1s = tcg_temp_new_i32();
  8637 + cpu_F0d = tcg_temp_new_i64();
  8638 + cpu_F1d = tcg_temp_new_i64();
8625 cpu_V0 = cpu_F0d; 8639 cpu_V0 = cpu_F0d;
8626 cpu_V1 = cpu_F1d; 8640 cpu_V1 = cpu_F1d;
8627 /* FIXME: cpu_M0 can probably be the same as cpu_V0. */ 8641 /* FIXME: cpu_M0 can probably be the same as cpu_V0. */
8628 - cpu_M0 = tcg_temp_new(TCG_TYPE_I64); 8642 + cpu_M0 = tcg_temp_new_i64();
8629 next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE; 8643 next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE;
8630 lj = -1; 8644 lj = -1;
8631 num_insns = 0; 8645 num_insns = 0;
target-cris/helper.h
1 -#define TCG_HELPER_PROTO 1 +#include "def-helper.h"
2 2
3 -void TCG_HELPER_PROTO helper_raise_exception(uint32_t index);  
4 -void TCG_HELPER_PROTO helper_tlb_flush_pid(uint32_t pid);  
5 -void TCG_HELPER_PROTO helper_spc_write(uint32_t pid);  
6 -void TCG_HELPER_PROTO helper_dump(uint32_t a0, uint32_t a1, uint32_t a2);  
7 -void TCG_HELPER_PROTO helper_rfe(void);  
8 -void TCG_HELPER_PROTO helper_rfn(void); 3 +DEF_HELPER_1(raise_exception, void, i32)
  4 +DEF_HELPER_1(tlb_flush_pid, void, i32)
  5 +DEF_HELPER_1(spc_write, void, i32)
  6 +DEF_HELPER_3(dump, void, i32, i32, i32)
  7 +DEF_HELPER_0(rfe, void);
  8 +DEF_HELPER_0(rfn, void);
9 9
10 -void TCG_HELPER_PROTO helper_movl_sreg_reg (uint32_t sreg, uint32_t reg);  
11 -void TCG_HELPER_PROTO helper_movl_reg_sreg (uint32_t reg, uint32_t sreg); 10 +DEF_HELPER_2(movl_sreg_reg, void, i32, i32)
  11 +DEF_HELPER_2(movl_reg_sreg, void, i32, i32)
12 12
13 -void TCG_HELPER_PROTO helper_evaluate_flags_muls(void);  
14 -void TCG_HELPER_PROTO helper_evaluate_flags_mulu(void);  
15 -void TCG_HELPER_PROTO helper_evaluate_flags_mcp(void);  
16 -void TCG_HELPER_PROTO helper_evaluate_flags_alu_4(void);  
17 -void TCG_HELPER_PROTO helper_evaluate_flags_move_4 (void);  
18 -void TCG_HELPER_PROTO helper_evaluate_flags_move_2 (void);  
19 -void TCG_HELPER_PROTO helper_evaluate_flags (void);  
20 -void TCG_HELPER_PROTO helper_top_evaluate_flags(void); 13 +DEF_HELPER_0(evaluate_flags_muls, void)
  14 +DEF_HELPER_0(evaluate_flags_mulu, void)
  15 +DEF_HELPER_0(evaluate_flags_mcp, void)
  16 +DEF_HELPER_0(evaluate_flags_alu_4, void)
  17 +DEF_HELPER_0(evaluate_flags_move_4, void)
  18 +DEF_HELPER_0(evaluate_flags_move_2, void)
  19 +DEF_HELPER_0(evaluate_flags, void)
  20 +DEF_HELPER_0(top_evaluate_flags, void)
  21 +
  22 +#include "def-helper.h"
target-cris/translate.c
@@ -39,6 +39,9 @@ @@ -39,6 +39,9 @@
39 #include "crisv32-decode.h" 39 #include "crisv32-decode.h"
40 #include "qemu-common.h" 40 #include "qemu-common.h"
41 41
  42 +#define GEN_HELPER 1
  43 +#include "helper.h"
  44 +
42 #define DISAS_CRIS 0 45 #define DISAS_CRIS 0
43 #if DISAS_CRIS 46 #if DISAS_CRIS
44 #define DIS(x) if (loglevel & CPU_LOG_TB_IN_ASM) x 47 #define DIS(x) if (loglevel & CPU_LOG_TB_IN_ASM) x
@@ -61,7 +64,7 @@ @@ -61,7 +64,7 @@
61 #define CC_MASK_NZVC 0xf 64 #define CC_MASK_NZVC 0xf
62 #define CC_MASK_RNZV 0x10e 65 #define CC_MASK_RNZV 0x10e
63 66
64 -static TCGv cpu_env; 67 +static TCGv_ptr cpu_env;
65 static TCGv cpu_R[16]; 68 static TCGv cpu_R[16];
66 static TCGv cpu_PR[16]; 69 static TCGv cpu_PR[16];
67 static TCGv cc_x; 70 static TCGv cc_x;
@@ -212,9 +215,9 @@ static inline void t_gen_mov_preg_TN(DisasContext *dc, int r, TCGv tn) @@ -212,9 +215,9 @@ static inline void t_gen_mov_preg_TN(DisasContext *dc, int r, TCGv tn)
212 tcg_gen_andi_tl(cpu_PR[r], tn, 3); 215 tcg_gen_andi_tl(cpu_PR[r], tn, 3);
213 else { 216 else {
214 if (r == PR_PID) 217 if (r == PR_PID)
215 - tcg_gen_helper_0_1(helper_tlb_flush_pid, tn); 218 + gen_helper_tlb_flush_pid(tn);
216 if (dc->tb_flags & S_FLAG && r == PR_SPC) 219 if (dc->tb_flags & S_FLAG && r == PR_SPC)
217 - tcg_gen_helper_0_1(helper_spc_write, tn); 220 + gen_helper_spc_write(tn);
218 else if (r == PR_CCS) 221 else if (r == PR_CCS)
219 dc->cpustate_changed = 1; 222 dc->cpustate_changed = 1;
220 tcg_gen_mov_tl(cpu_PR[r], tn); 223 tcg_gen_mov_tl(cpu_PR[r], tn);
@@ -223,14 +226,16 @@ static inline void t_gen_mov_preg_TN(DisasContext *dc, int r, TCGv tn) @@ -223,14 +226,16 @@ static inline void t_gen_mov_preg_TN(DisasContext *dc, int r, TCGv tn)
223 226
224 static inline void t_gen_raise_exception(uint32_t index) 227 static inline void t_gen_raise_exception(uint32_t index)
225 { 228 {
226 - tcg_gen_helper_0_1(helper_raise_exception, tcg_const_tl(index)); 229 + TCGv_i32 tmp = tcg_const_i32(index);
  230 + gen_helper_raise_exception(tmp);
  231 + tcg_temp_free_i32(tmp);
227 } 232 }
228 233
229 static void t_gen_lsl(TCGv d, TCGv a, TCGv b) 234 static void t_gen_lsl(TCGv d, TCGv a, TCGv b)
230 { 235 {
231 TCGv t0, t_31; 236 TCGv t0, t_31;
232 237
233 - t0 = tcg_temp_new(TCG_TYPE_TL); 238 + t0 = tcg_temp_new();
234 t_31 = tcg_const_tl(31); 239 t_31 = tcg_const_tl(31);
235 tcg_gen_shl_tl(d, a, b); 240 tcg_gen_shl_tl(d, a, b);
236 241
@@ -246,8 +251,8 @@ static void t_gen_lsr(TCGv d, TCGv a, TCGv b) @@ -246,8 +251,8 @@ static void t_gen_lsr(TCGv d, TCGv a, TCGv b)
246 { 251 {
247 TCGv t0, t_31; 252 TCGv t0, t_31;
248 253
249 - t0 = tcg_temp_new(TCG_TYPE_TL);  
250 - t_31 = tcg_temp_new(TCG_TYPE_TL); 254 + t0 = tcg_temp_new();
  255 + t_31 = tcg_temp_new();
251 tcg_gen_shr_tl(d, a, b); 256 tcg_gen_shr_tl(d, a, b);
252 257
253 tcg_gen_movi_tl(t_31, 31); 258 tcg_gen_movi_tl(t_31, 31);
@@ -263,8 +268,8 @@ static void t_gen_asr(TCGv d, TCGv a, TCGv b) @@ -263,8 +268,8 @@ static void t_gen_asr(TCGv d, TCGv a, TCGv b)
263 { 268 {
264 TCGv t0, t_31; 269 TCGv t0, t_31;
265 270
266 - t0 = tcg_temp_new(TCG_TYPE_TL);  
267 - t_31 = tcg_temp_new(TCG_TYPE_TL); 271 + t0 = tcg_temp_new();
  272 + t_31 = tcg_temp_new();
268 tcg_gen_sar_tl(d, a, b); 273 tcg_gen_sar_tl(d, a, b);
269 274
270 tcg_gen_movi_tl(t_31, 31); 275 tcg_gen_movi_tl(t_31, 31);
@@ -278,30 +283,30 @@ static void t_gen_asr(TCGv d, TCGv a, TCGv b) @@ -278,30 +283,30 @@ static void t_gen_asr(TCGv d, TCGv a, TCGv b)
278 /* 64-bit signed mul, lower result in d and upper in d2. */ 283 /* 64-bit signed mul, lower result in d and upper in d2. */
279 static void t_gen_muls(TCGv d, TCGv d2, TCGv a, TCGv b) 284 static void t_gen_muls(TCGv d, TCGv d2, TCGv a, TCGv b)
280 { 285 {
281 - TCGv t0, t1; 286 + TCGv_i64 t0, t1;
282 287
283 - t0 = tcg_temp_new(TCG_TYPE_I64);  
284 - t1 = tcg_temp_new(TCG_TYPE_I64); 288 + t0 = tcg_temp_new_i64();
  289 + t1 = tcg_temp_new_i64();
285 290
286 - tcg_gen_ext32s_i64(t0, a);  
287 - tcg_gen_ext32s_i64(t1, b); 291 + tcg_gen_ext_i32_i64(t0, a);
  292 + tcg_gen_ext_i32_i64(t1, b);
288 tcg_gen_mul_i64(t0, t0, t1); 293 tcg_gen_mul_i64(t0, t0, t1);
289 294
290 tcg_gen_trunc_i64_i32(d, t0); 295 tcg_gen_trunc_i64_i32(d, t0);
291 tcg_gen_shri_i64(t0, t0, 32); 296 tcg_gen_shri_i64(t0, t0, 32);
292 tcg_gen_trunc_i64_i32(d2, t0); 297 tcg_gen_trunc_i64_i32(d2, t0);
293 298
294 - tcg_temp_free(t0);  
295 - tcg_temp_free(t1); 299 + tcg_temp_free_i64(t0);
  300 + tcg_temp_free_i64(t1);
296 } 301 }
297 302
298 /* 64-bit unsigned muls, lower result in d and upper in d2. */ 303 /* 64-bit unsigned muls, lower result in d and upper in d2. */
299 static void t_gen_mulu(TCGv d, TCGv d2, TCGv a, TCGv b) 304 static void t_gen_mulu(TCGv d, TCGv d2, TCGv a, TCGv b)
300 { 305 {
301 - TCGv t0, t1; 306 + TCGv_i64 t0, t1;
302 307
303 - t0 = tcg_temp_new(TCG_TYPE_I64);  
304 - t1 = tcg_temp_new(TCG_TYPE_I64); 308 + t0 = tcg_temp_new_i64();
  309 + t1 = tcg_temp_new_i64();
305 310
306 tcg_gen_extu_i32_i64(t0, a); 311 tcg_gen_extu_i32_i64(t0, a);
307 tcg_gen_extu_i32_i64(t1, b); 312 tcg_gen_extu_i32_i64(t1, b);
@@ -311,18 +316,18 @@ static void t_gen_mulu(TCGv d, TCGv d2, TCGv a, TCGv b) @@ -311,18 +316,18 @@ static void t_gen_mulu(TCGv d, TCGv d2, TCGv a, TCGv b)
311 tcg_gen_shri_i64(t0, t0, 32); 316 tcg_gen_shri_i64(t0, t0, 32);
312 tcg_gen_trunc_i64_i32(d2, t0); 317 tcg_gen_trunc_i64_i32(d2, t0);
313 318
314 - tcg_temp_free(t0);  
315 - tcg_temp_free(t1); 319 + tcg_temp_free_i64(t0);
  320 + tcg_temp_free_i64(t1);
316 } 321 }
317 322
318 /* 32bit branch-free binary search for counting leading zeros. */ 323 /* 32bit branch-free binary search for counting leading zeros. */
319 static void t_gen_lz_i32(TCGv d, TCGv x) 324 static void t_gen_lz_i32(TCGv d, TCGv x)
320 { 325 {
321 - TCGv y, m, n; 326 + TCGv_i32 y, m, n;
322 327
323 - y = tcg_temp_new(TCG_TYPE_I32);  
324 - m = tcg_temp_new(TCG_TYPE_I32);  
325 - n = tcg_temp_new(TCG_TYPE_I32); 328 + y = tcg_temp_new_i32();
  329 + m = tcg_temp_new_i32();
  330 + n = tcg_temp_new_i32();
326 331
327 /* y = -(x >> 16) */ 332 /* y = -(x >> 16) */
328 tcg_gen_shri_i32(y, x, 16); 333 tcg_gen_shri_i32(y, x, 16);
@@ -413,9 +418,9 @@ static void t_gen_btst(TCGv d, TCGv a, TCGv b) @@ -413,9 +418,9 @@ static void t_gen_btst(TCGv d, TCGv a, TCGv b)
413 */ 418 */
414 419
415 l1 = gen_new_label(); 420 l1 = gen_new_label();
416 - sbit = tcg_temp_new(TCG_TYPE_TL);  
417 - bset = tcg_temp_new(TCG_TYPE_TL);  
418 - t0 = tcg_temp_new(TCG_TYPE_TL); 421 + sbit = tcg_temp_new();
  422 + bset = tcg_temp_new();
  423 + t0 = tcg_temp_new();
419 424
420 /* Compute bset and sbit. */ 425 /* Compute bset and sbit. */
421 tcg_gen_andi_tl(sbit, b, 31); 426 tcg_gen_andi_tl(sbit, b, 31);
@@ -463,7 +468,7 @@ static inline void t_gen_add_flag(TCGv d, int flag) @@ -463,7 +468,7 @@ static inline void t_gen_add_flag(TCGv d, int flag)
463 { 468 {
464 TCGv c; 469 TCGv c;
465 470
466 - c = tcg_temp_new(TCG_TYPE_TL); 471 + c = tcg_temp_new();
467 t_gen_mov_TN_preg(c, PR_CCS); 472 t_gen_mov_TN_preg(c, PR_CCS);
468 /* Propagate carry into d. */ 473 /* Propagate carry into d. */
469 tcg_gen_andi_tl(c, c, 1 << flag); 474 tcg_gen_andi_tl(c, c, 1 << flag);
@@ -479,7 +484,7 @@ static inline void t_gen_addx_carry(DisasContext *dc, TCGv d) @@ -479,7 +484,7 @@ static inline void t_gen_addx_carry(DisasContext *dc, TCGv d)
479 if (dc->flags_x) { 484 if (dc->flags_x) {
480 TCGv c; 485 TCGv c;
481 486
482 - c = tcg_temp_new(TCG_TYPE_TL); 487 + c = tcg_temp_new();
483 t_gen_mov_TN_preg(c, PR_CCS); 488 t_gen_mov_TN_preg(c, PR_CCS);
484 /* C flag is already at bit 0. */ 489 /* C flag is already at bit 0. */
485 tcg_gen_andi_tl(c, c, C_FLAG); 490 tcg_gen_andi_tl(c, c, C_FLAG);
@@ -489,8 +494,8 @@ static inline void t_gen_addx_carry(DisasContext *dc, TCGv d) @@ -489,8 +494,8 @@ static inline void t_gen_addx_carry(DisasContext *dc, TCGv d)
489 } else { 494 } else {
490 TCGv x, c; 495 TCGv x, c;
491 496
492 - x = tcg_temp_new(TCG_TYPE_TL);  
493 - c = tcg_temp_new(TCG_TYPE_TL); 497 + x = tcg_temp_new();
  498 + c = tcg_temp_new();
494 t_gen_mov_TN_preg(x, PR_CCS); 499 t_gen_mov_TN_preg(x, PR_CCS);
495 tcg_gen_mov_tl(c, x); 500 tcg_gen_mov_tl(c, x);
496 501
@@ -512,7 +517,7 @@ static inline void t_gen_subx_carry(DisasContext *dc, TCGv d) @@ -512,7 +517,7 @@ static inline void t_gen_subx_carry(DisasContext *dc, TCGv d)
512 if (dc->flags_x) { 517 if (dc->flags_x) {
513 TCGv c; 518 TCGv c;
514 519
515 - c = tcg_temp_new(TCG_TYPE_TL); 520 + c = tcg_temp_new();
516 t_gen_mov_TN_preg(c, PR_CCS); 521 t_gen_mov_TN_preg(c, PR_CCS);
517 /* C flag is already at bit 0. */ 522 /* C flag is already at bit 0. */
518 tcg_gen_andi_tl(c, c, C_FLAG); 523 tcg_gen_andi_tl(c, c, C_FLAG);
@@ -522,8 +527,8 @@ static inline void t_gen_subx_carry(DisasContext *dc, TCGv d) @@ -522,8 +527,8 @@ static inline void t_gen_subx_carry(DisasContext *dc, TCGv d)
522 } else { 527 } else {
523 TCGv x, c; 528 TCGv x, c;
524 529
525 - x = tcg_temp_new(TCG_TYPE_TL);  
526 - c = tcg_temp_new(TCG_TYPE_TL); 530 + x = tcg_temp_new();
  531 + c = tcg_temp_new();
527 t_gen_mov_TN_preg(x, PR_CCS); 532 t_gen_mov_TN_preg(x, PR_CCS);
528 tcg_gen_mov_tl(c, x); 533 tcg_gen_mov_tl(c, x);
529 534
@@ -545,8 +550,8 @@ static inline void t_gen_swapb(TCGv d, TCGv s) @@ -545,8 +550,8 @@ static inline void t_gen_swapb(TCGv d, TCGv s)
545 { 550 {
546 TCGv t, org_s; 551 TCGv t, org_s;
547 552
548 - t = tcg_temp_new(TCG_TYPE_TL);  
549 - org_s = tcg_temp_new(TCG_TYPE_TL); 553 + t = tcg_temp_new();
  554 + org_s = tcg_temp_new();
550 555
551 /* d and s may refer to the same object. */ 556 /* d and s may refer to the same object. */
552 tcg_gen_mov_tl(org_s, s); 557 tcg_gen_mov_tl(org_s, s);
@@ -564,7 +569,7 @@ static inline void t_gen_swapw(TCGv d, TCGv s) @@ -564,7 +569,7 @@ static inline void t_gen_swapw(TCGv d, TCGv s)
564 { 569 {
565 TCGv t; 570 TCGv t;
566 /* d and s refer the same object. */ 571 /* d and s refer the same object. */
567 - t = tcg_temp_new(TCG_TYPE_TL); 572 + t = tcg_temp_new();
568 tcg_gen_mov_tl(t, s); 573 tcg_gen_mov_tl(t, s);
569 tcg_gen_shli_tl(d, t, 16); 574 tcg_gen_shli_tl(d, t, 16);
570 tcg_gen_shri_tl(t, t, 16); 575 tcg_gen_shri_tl(t, t, 16);
@@ -601,8 +606,8 @@ static inline void t_gen_swapr(TCGv d, TCGv s) @@ -601,8 +606,8 @@ static inline void t_gen_swapr(TCGv d, TCGv s)
601 TCGv t, org_s; 606 TCGv t, org_s;
602 607
603 /* d and s refer the same object. */ 608 /* d and s refer the same object. */
604 - t = tcg_temp_new(TCG_TYPE_TL);  
605 - org_s = tcg_temp_new(TCG_TYPE_TL); 609 + t = tcg_temp_new();
  610 + org_s = tcg_temp_new();
606 tcg_gen_mov_tl(org_s, s); 611 tcg_gen_mov_tl(org_s, s);
607 612
608 tcg_gen_shli_tl(t, org_s, bitrev[0].shift); 613 tcg_gen_shli_tl(t, org_s, bitrev[0].shift);
@@ -626,7 +631,7 @@ static void t_gen_cc_jmp(TCGv pc_true, TCGv pc_false) @@ -626,7 +631,7 @@ static void t_gen_cc_jmp(TCGv pc_true, TCGv pc_false)
626 int l1; 631 int l1;
627 632
628 l1 = gen_new_label(); 633 l1 = gen_new_label();
629 - btaken = tcg_temp_new(TCG_TYPE_TL); 634 + btaken = tcg_temp_new();
630 635
631 /* Conditional jmp. */ 636 /* Conditional jmp. */
632 tcg_gen_mov_tl(btaken, env_btaken); 637 tcg_gen_mov_tl(btaken, env_btaken);
@@ -692,13 +697,13 @@ static void cris_evaluate_flags(DisasContext *dc) @@ -692,13 +697,13 @@ static void cris_evaluate_flags(DisasContext *dc)
692 switch (dc->cc_op) 697 switch (dc->cc_op)
693 { 698 {
694 case CC_OP_MCP: 699 case CC_OP_MCP:
695 - tcg_gen_helper_0_0(helper_evaluate_flags_mcp); 700 + gen_helper_evaluate_flags_mcp();
696 break; 701 break;
697 case CC_OP_MULS: 702 case CC_OP_MULS:
698 - tcg_gen_helper_0_0(helper_evaluate_flags_muls); 703 + gen_helper_evaluate_flags_muls();
699 break; 704 break;
700 case CC_OP_MULU: 705 case CC_OP_MULU:
701 - tcg_gen_helper_0_0(helper_evaluate_flags_mulu); 706 + gen_helper_evaluate_flags_mulu();
702 break; 707 break;
703 case CC_OP_MOVE: 708 case CC_OP_MOVE:
704 case CC_OP_AND: 709 case CC_OP_AND:
@@ -710,13 +715,13 @@ static void cris_evaluate_flags(DisasContext *dc) @@ -710,13 +715,13 @@ static void cris_evaluate_flags(DisasContext *dc)
710 switch (dc->cc_size) 715 switch (dc->cc_size)
711 { 716 {
712 case 4: 717 case 4:
713 - tcg_gen_helper_0_0(helper_evaluate_flags_move_4); 718 + gen_helper_evaluate_flags_move_4();
714 break; 719 break;
715 case 2: 720 case 2:
716 - tcg_gen_helper_0_0(helper_evaluate_flags_move_2); 721 + gen_helper_evaluate_flags_move_2();
717 break; 722 break;
718 default: 723 default:
719 - tcg_gen_helper_0_0(helper_evaluate_flags); 724 + gen_helper_evaluate_flags();
720 break; 725 break;
721 } 726 }
722 break; 727 break;
@@ -728,10 +733,10 @@ static void cris_evaluate_flags(DisasContext *dc) @@ -728,10 +733,10 @@ static void cris_evaluate_flags(DisasContext *dc)
728 switch (dc->cc_size) 733 switch (dc->cc_size)
729 { 734 {
730 case 4: 735 case 4:
731 - tcg_gen_helper_0_0(helper_evaluate_flags_alu_4); 736 + gen_helper_evaluate_flags_alu_4();
732 break; 737 break;
733 default: 738 default:
734 - tcg_gen_helper_0_0(helper_evaluate_flags); 739 + gen_helper_evaluate_flags();
735 break; 740 break;
736 } 741 }
737 } 742 }
@@ -927,16 +932,16 @@ static void cris_alu(DisasContext *dc, int op, @@ -927,16 +932,16 @@ static void cris_alu(DisasContext *dc, int op,
927 writeback = 1; 932 writeback = 1;
928 933
929 if (op == CC_OP_BOUND || op == CC_OP_BTST) 934 if (op == CC_OP_BOUND || op == CC_OP_BTST)
930 - tmp = tcg_temp_local_new(TCG_TYPE_TL); 935 + tmp = tcg_temp_local_new();
931 936
932 if (op == CC_OP_CMP) { 937 if (op == CC_OP_CMP) {
933 - tmp = tcg_temp_new(TCG_TYPE_TL); 938 + tmp = tcg_temp_new();
934 writeback = 0; 939 writeback = 0;
935 } else if (size == 4) { 940 } else if (size == 4) {
936 tmp = d; 941 tmp = d;
937 writeback = 0; 942 writeback = 0;
938 } else 943 } else
939 - tmp = tcg_temp_new(TCG_TYPE_TL); 944 + tmp = tcg_temp_new();
940 945
941 946
942 cris_pre_alu_update_cc(dc, op, op_a, op_b, size); 947 cris_pre_alu_update_cc(dc, op, op_a, op_b, size);
@@ -951,7 +956,7 @@ static void cris_alu(DisasContext *dc, int op, @@ -951,7 +956,7 @@ static void cris_alu(DisasContext *dc, int op,
951 tcg_gen_andi_tl(d, d, ~0xffff); 956 tcg_gen_andi_tl(d, d, ~0xffff);
952 tcg_gen_or_tl(d, d, tmp); 957 tcg_gen_or_tl(d, d, tmp);
953 } 958 }
954 - if (GET_TCGV(tmp) != GET_TCGV(d)) 959 + if (!TCGV_EQUAL(tmp, d))
955 tcg_temp_free(tmp); 960 tcg_temp_free(tmp);
956 } 961 }
957 962
@@ -1088,7 +1093,7 @@ static void gen_tst_cc (DisasContext *dc, TCGv cc, int cond) @@ -1088,7 +1093,7 @@ static void gen_tst_cc (DisasContext *dc, TCGv cc, int cond)
1088 { 1093 {
1089 TCGv tmp; 1094 TCGv tmp;
1090 1095
1091 - tmp = tcg_temp_new(TCG_TYPE_TL); 1096 + tmp = tcg_temp_new();
1092 tcg_gen_xori_tl(tmp, cpu_PR[PR_CCS], 1097 tcg_gen_xori_tl(tmp, cpu_PR[PR_CCS],
1093 C_FLAG | Z_FLAG); 1098 C_FLAG | Z_FLAG);
1094 /* Overlay the C flag on top of the Z. */ 1099 /* Overlay the C flag on top of the Z. */
@@ -1121,8 +1126,8 @@ static void gen_tst_cc (DisasContext *dc, TCGv cc, int cond) @@ -1121,8 +1126,8 @@ static void gen_tst_cc (DisasContext *dc, TCGv cc, int cond)
1121 { 1126 {
1122 TCGv n, z; 1127 TCGv n, z;
1123 1128
1124 - n = tcg_temp_new(TCG_TYPE_TL);  
1125 - z = tcg_temp_new(TCG_TYPE_TL); 1129 + n = tcg_temp_new();
  1130 + z = tcg_temp_new();
1126 1131
1127 /* To avoid a shift we overlay everything on 1132 /* To avoid a shift we overlay everything on
1128 the V flag. */ 1133 the V flag. */
@@ -1145,8 +1150,8 @@ static void gen_tst_cc (DisasContext *dc, TCGv cc, int cond) @@ -1145,8 +1150,8 @@ static void gen_tst_cc (DisasContext *dc, TCGv cc, int cond)
1145 { 1150 {
1146 TCGv n, z; 1151 TCGv n, z;
1147 1152
1148 - n = tcg_temp_new(TCG_TYPE_TL);  
1149 - z = tcg_temp_new(TCG_TYPE_TL); 1153 + n = tcg_temp_new();
  1154 + z = tcg_temp_new();
1150 1155
1151 /* To avoid a shift we overlay everything on 1156 /* To avoid a shift we overlay everything on
1152 the V flag. */ 1157 the V flag. */
@@ -1215,6 +1220,18 @@ static inline void cris_prepare_jmp (DisasContext *dc, unsigned int type) @@ -1215,6 +1220,18 @@ static inline void cris_prepare_jmp (DisasContext *dc, unsigned int type)
1215 tcg_gen_movi_tl(env_btaken, 1); 1220 tcg_gen_movi_tl(env_btaken, 1);
1216 } 1221 }
1217 1222
  1223 +static void gen_load64(DisasContext *dc, TCGv_i64 dst, TCGv addr)
  1224 +{
  1225 + int mem_index = cpu_mmu_index(dc->env);
  1226 +
  1227 + /* If we get a fault on a delayslot we must keep the jmp state in
  1228 + the cpu-state to be able to re-execute the jmp. */
  1229 + if (dc->delayed_branch == 1)
  1230 + cris_store_direct_jmp(dc);
  1231 +
  1232 + tcg_gen_qemu_ld64(dst, addr, mem_index);
  1233 +}
  1234 +
1218 static void gen_load(DisasContext *dc, TCGv dst, TCGv addr, 1235 static void gen_load(DisasContext *dc, TCGv dst, TCGv addr,
1219 unsigned int size, int sign) 1236 unsigned int size, int sign)
1220 { 1237 {
@@ -1240,8 +1257,8 @@ static void gen_load(DisasContext *dc, TCGv dst, TCGv addr, @@ -1240,8 +1257,8 @@ static void gen_load(DisasContext *dc, TCGv dst, TCGv addr,
1240 else if (size == 4) { 1257 else if (size == 4) {
1241 tcg_gen_qemu_ld32u(dst, addr, mem_index); 1258 tcg_gen_qemu_ld32u(dst, addr, mem_index);
1242 } 1259 }
1243 - else if (size == 8) {  
1244 - tcg_gen_qemu_ld64(dst, addr, mem_index); 1260 + else {
  1261 + abort();
1245 } 1262 }
1246 } 1263 }
1247 1264
@@ -1284,7 +1301,7 @@ static inline void t_gen_sext(TCGv d, TCGv s, int size) @@ -1284,7 +1301,7 @@ static inline void t_gen_sext(TCGv d, TCGv s, int size)
1284 tcg_gen_ext8s_i32(d, s); 1301 tcg_gen_ext8s_i32(d, s);
1285 else if (size == 2) 1302 else if (size == 2)
1286 tcg_gen_ext16s_i32(d, s); 1303 tcg_gen_ext16s_i32(d, s);
1287 - else if(GET_TCGV(d) != GET_TCGV(s)) 1304 + else if(!TCGV_EQUAL(d, s))
1288 tcg_gen_mov_tl(d, s); 1305 tcg_gen_mov_tl(d, s);
1289 } 1306 }
1290 1307
@@ -1294,7 +1311,7 @@ static inline void t_gen_zext(TCGv d, TCGv s, int size) @@ -1294,7 +1311,7 @@ static inline void t_gen_zext(TCGv d, TCGv s, int size)
1294 tcg_gen_ext8u_i32(d, s); 1311 tcg_gen_ext8u_i32(d, s);
1295 else if (size == 2) 1312 else if (size == 2)
1296 tcg_gen_ext16u_i32(d, s); 1313 tcg_gen_ext16u_i32(d, s);
1297 - else if (GET_TCGV(d) != GET_TCGV(s)) 1314 + else if (!TCGV_EQUAL(d, s))
1298 tcg_gen_mov_tl(d, s); 1315 tcg_gen_mov_tl(d, s);
1299 } 1316 }
1300 1317
@@ -1546,7 +1563,7 @@ static unsigned int dec_btstq(DisasContext *dc) @@ -1546,7 +1563,7 @@ static unsigned int dec_btstq(DisasContext *dc)
1546 DIS(fprintf (logfile, "btstq %u, $r%d\n", dc->op1, dc->op2)); 1563 DIS(fprintf (logfile, "btstq %u, $r%d\n", dc->op1, dc->op2));
1547 1564
1548 cris_cc_mask(dc, CC_MASK_NZ); 1565 cris_cc_mask(dc, CC_MASK_NZ);
1549 - l0 = tcg_temp_local_new(TCG_TYPE_TL); 1566 + l0 = tcg_temp_local_new();
1550 cris_alu(dc, CC_OP_BTST, 1567 cris_alu(dc, CC_OP_BTST,
1551 l0, cpu_R[dc->op2], tcg_const_tl(dc->op1), 4); 1568 l0, cpu_R[dc->op2], tcg_const_tl(dc->op1), 4);
1552 cris_update_cc_op(dc, CC_OP_FLAGS, 4); 1569 cris_update_cc_op(dc, CC_OP_FLAGS, 4);
@@ -1613,7 +1630,7 @@ static unsigned int dec_move_r(DisasContext *dc) @@ -1613,7 +1630,7 @@ static unsigned int dec_move_r(DisasContext *dc)
1613 else { 1630 else {
1614 TCGv t0; 1631 TCGv t0;
1615 1632
1616 - t0 = tcg_temp_new(TCG_TYPE_TL); 1633 + t0 = tcg_temp_new();
1617 dec_prep_move_r(dc, dc->op1, dc->op2, size, 0, t0); 1634 dec_prep_move_r(dc, dc->op1, dc->op2, size, 0, t0);
1618 cris_alu(dc, CC_OP_MOVE, 1635 cris_alu(dc, CC_OP_MOVE,
1619 cpu_R[dc->op2], 1636 cpu_R[dc->op2],
@@ -1653,8 +1670,8 @@ static inline void cris_alu_alloc_temps(DisasContext *dc, int size, TCGv *t) @@ -1653,8 +1670,8 @@ static inline void cris_alu_alloc_temps(DisasContext *dc, int size, TCGv *t)
1653 t[0] = cpu_R[dc->op2]; 1670 t[0] = cpu_R[dc->op2];
1654 t[1] = cpu_R[dc->op1]; 1671 t[1] = cpu_R[dc->op1];
1655 } else { 1672 } else {
1656 - t[0] = tcg_temp_new(TCG_TYPE_TL);  
1657 - t[1] = tcg_temp_new(TCG_TYPE_TL); 1673 + t[0] = tcg_temp_new();
  1674 + t[1] = tcg_temp_new();
1658 } 1675 }
1659 } 1676 }
1660 1677
@@ -1689,7 +1706,7 @@ static unsigned int dec_lz_r(DisasContext *dc) @@ -1689,7 +1706,7 @@ static unsigned int dec_lz_r(DisasContext *dc)
1689 DIS(fprintf (logfile, "lz $r%u, $r%u\n", 1706 DIS(fprintf (logfile, "lz $r%u, $r%u\n",
1690 dc->op1, dc->op2)); 1707 dc->op1, dc->op2));
1691 cris_cc_mask(dc, CC_MASK_NZ); 1708 cris_cc_mask(dc, CC_MASK_NZ);
1692 - t0 = tcg_temp_new(TCG_TYPE_TL); 1709 + t0 = tcg_temp_new();
1693 dec_prep_alu_r(dc, dc->op1, dc->op2, 4, 0, cpu_R[dc->op2], t0); 1710 dec_prep_alu_r(dc, dc->op1, dc->op2, 4, 0, cpu_R[dc->op2], t0);
1694 cris_alu(dc, CC_OP_LZ, cpu_R[dc->op2], cpu_R[dc->op2], t0, 4); 1711 cris_alu(dc, CC_OP_LZ, cpu_R[dc->op2], cpu_R[dc->op2], t0, 4);
1695 tcg_temp_free(t0); 1712 tcg_temp_free(t0);
@@ -1812,7 +1829,7 @@ static unsigned int dec_bound_r(DisasContext *dc) @@ -1812,7 +1829,7 @@ static unsigned int dec_bound_r(DisasContext *dc)
1812 DIS(fprintf (logfile, "bound.%c $r%u, $r%u\n", 1829 DIS(fprintf (logfile, "bound.%c $r%u, $r%u\n",
1813 memsize_char(size), dc->op1, dc->op2)); 1830 memsize_char(size), dc->op1, dc->op2));
1814 cris_cc_mask(dc, CC_MASK_NZ); 1831 cris_cc_mask(dc, CC_MASK_NZ);
1815 - l0 = tcg_temp_local_new(TCG_TYPE_TL); 1832 + l0 = tcg_temp_local_new();
1816 dec_prep_move_r(dc, dc->op1, dc->op2, size, 0, l0); 1833 dec_prep_move_r(dc, dc->op1, dc->op2, size, 0, l0);
1817 cris_alu(dc, CC_OP_BOUND, cpu_R[dc->op2], cpu_R[dc->op2], l0, 4); 1834 cris_alu(dc, CC_OP_BOUND, cpu_R[dc->op2], cpu_R[dc->op2], l0, 4);
1818 tcg_temp_free(l0); 1835 tcg_temp_free(l0);
@@ -1842,7 +1859,7 @@ static unsigned int dec_abs_r(DisasContext *dc) @@ -1842,7 +1859,7 @@ static unsigned int dec_abs_r(DisasContext *dc)
1842 dc->op1, dc->op2)); 1859 dc->op1, dc->op2));
1843 cris_cc_mask(dc, CC_MASK_NZ); 1860 cris_cc_mask(dc, CC_MASK_NZ);
1844 1861
1845 - t0 = tcg_temp_new(TCG_TYPE_TL); 1862 + t0 = tcg_temp_new();
1846 tcg_gen_sari_tl(t0, cpu_R[dc->op1], 31); 1863 tcg_gen_sari_tl(t0, cpu_R[dc->op1], 31);
1847 tcg_gen_xor_tl(cpu_R[dc->op2], cpu_R[dc->op1], t0); 1864 tcg_gen_xor_tl(cpu_R[dc->op2], cpu_R[dc->op1], t0);
1848 tcg_gen_sub_tl(cpu_R[dc->op2], cpu_R[dc->op2], t0); 1865 tcg_gen_sub_tl(cpu_R[dc->op2], cpu_R[dc->op2], t0);
@@ -1916,7 +1933,7 @@ static unsigned int dec_swap_r(DisasContext *dc) @@ -1916,7 +1933,7 @@ static unsigned int dec_swap_r(DisasContext *dc)
1916 swapmode_name(dc->op2, modename), dc->op1)); 1933 swapmode_name(dc->op2, modename), dc->op1));
1917 1934
1918 cris_cc_mask(dc, CC_MASK_NZ); 1935 cris_cc_mask(dc, CC_MASK_NZ);
1919 - t0 = tcg_temp_new(TCG_TYPE_TL); 1936 + t0 = tcg_temp_new();
1920 t_gen_mov_TN_reg(t0, dc->op1); 1937 t_gen_mov_TN_reg(t0, dc->op1);
1921 if (dc->op2 & 8) 1938 if (dc->op2 & 8)
1922 tcg_gen_not_tl(t0, t0); 1939 tcg_gen_not_tl(t0, t0);
@@ -1952,7 +1969,7 @@ static unsigned int dec_addi_r(DisasContext *dc) @@ -1952,7 +1969,7 @@ static unsigned int dec_addi_r(DisasContext *dc)
1952 DIS(fprintf (logfile, "addi.%c $r%u, $r%u\n", 1969 DIS(fprintf (logfile, "addi.%c $r%u, $r%u\n",
1953 memsize_char(memsize_zz(dc)), dc->op2, dc->op1)); 1970 memsize_char(memsize_zz(dc)), dc->op2, dc->op1));
1954 cris_cc_mask(dc, 0); 1971 cris_cc_mask(dc, 0);
1955 - t0 = tcg_temp_new(TCG_TYPE_TL); 1972 + t0 = tcg_temp_new();
1956 tcg_gen_shl_tl(t0, cpu_R[dc->op2], tcg_const_tl(dc->zzsize)); 1973 tcg_gen_shl_tl(t0, cpu_R[dc->op2], tcg_const_tl(dc->zzsize));
1957 tcg_gen_add_tl(cpu_R[dc->op1], cpu_R[dc->op1], t0); 1974 tcg_gen_add_tl(cpu_R[dc->op1], cpu_R[dc->op1], t0);
1958 tcg_temp_free(t0); 1975 tcg_temp_free(t0);
@@ -1965,7 +1982,7 @@ static unsigned int dec_addi_acr(DisasContext *dc) @@ -1965,7 +1982,7 @@ static unsigned int dec_addi_acr(DisasContext *dc)
1965 DIS(fprintf (logfile, "addi.%c $r%u, $r%u, $acr\n", 1982 DIS(fprintf (logfile, "addi.%c $r%u, $r%u, $acr\n",
1966 memsize_char(memsize_zz(dc)), dc->op2, dc->op1)); 1983 memsize_char(memsize_zz(dc)), dc->op2, dc->op1));
1967 cris_cc_mask(dc, 0); 1984 cris_cc_mask(dc, 0);
1968 - t0 = tcg_temp_new(TCG_TYPE_TL); 1985 + t0 = tcg_temp_new();
1969 tcg_gen_shl_tl(t0, cpu_R[dc->op2], tcg_const_tl(dc->zzsize)); 1986 tcg_gen_shl_tl(t0, cpu_R[dc->op2], tcg_const_tl(dc->zzsize));
1970 tcg_gen_add_tl(cpu_R[R_ACR], cpu_R[dc->op1], t0); 1987 tcg_gen_add_tl(cpu_R[R_ACR], cpu_R[dc->op1], t0);
1971 tcg_temp_free(t0); 1988 tcg_temp_free(t0);
@@ -1994,7 +2011,7 @@ static unsigned int dec_btst_r(DisasContext *dc) @@ -1994,7 +2011,7 @@ static unsigned int dec_btst_r(DisasContext *dc)
1994 dc->op1, dc->op2)); 2011 dc->op1, dc->op2));
1995 cris_cc_mask(dc, CC_MASK_NZ); 2012 cris_cc_mask(dc, CC_MASK_NZ);
1996 2013
1997 - l0 = tcg_temp_local_new(TCG_TYPE_TL); 2014 + l0 = tcg_temp_local_new();
1998 cris_alu(dc, CC_OP_BTST, l0, cpu_R[dc->op2], cpu_R[dc->op1], 4); 2015 cris_alu(dc, CC_OP_BTST, l0, cpu_R[dc->op2], cpu_R[dc->op1], 4);
1999 cris_update_cc_op(dc, CC_OP_FLAGS, 4); 2016 cris_update_cc_op(dc, CC_OP_FLAGS, 4);
2000 t_gen_mov_preg_TN(dc, PR_CCS, l0); 2017 t_gen_mov_preg_TN(dc, PR_CCS, l0);
@@ -2027,7 +2044,7 @@ static unsigned int dec_movu_r(DisasContext *dc) @@ -2027,7 +2044,7 @@ static unsigned int dec_movu_r(DisasContext *dc)
2027 dc->op1, dc->op2)); 2044 dc->op1, dc->op2));
2028 2045
2029 cris_cc_mask(dc, CC_MASK_NZ); 2046 cris_cc_mask(dc, CC_MASK_NZ);
2030 - t0 = tcg_temp_new(TCG_TYPE_TL); 2047 + t0 = tcg_temp_new();
2031 dec_prep_move_r(dc, dc->op1, dc->op2, size, 0, t0); 2048 dec_prep_move_r(dc, dc->op1, dc->op2, size, 0, t0);
2032 cris_alu(dc, CC_OP_MOVE, cpu_R[dc->op2], cpu_R[dc->op2], t0, 4); 2049 cris_alu(dc, CC_OP_MOVE, cpu_R[dc->op2], cpu_R[dc->op2], t0, 4);
2033 tcg_temp_free(t0); 2050 tcg_temp_free(t0);
@@ -2044,7 +2061,7 @@ static unsigned int dec_movs_r(DisasContext *dc) @@ -2044,7 +2061,7 @@ static unsigned int dec_movs_r(DisasContext *dc)
2044 dc->op1, dc->op2)); 2061 dc->op1, dc->op2));
2045 2062
2046 cris_cc_mask(dc, CC_MASK_NZ); 2063 cris_cc_mask(dc, CC_MASK_NZ);
2047 - t0 = tcg_temp_new(TCG_TYPE_TL); 2064 + t0 = tcg_temp_new();
2048 /* Size can only be qi or hi. */ 2065 /* Size can only be qi or hi. */
2049 t_gen_sext(t0, cpu_R[dc->op1], size); 2066 t_gen_sext(t0, cpu_R[dc->op1], size);
2050 cris_alu(dc, CC_OP_MOVE, 2067 cris_alu(dc, CC_OP_MOVE,
@@ -2063,7 +2080,7 @@ static unsigned int dec_addu_r(DisasContext *dc) @@ -2063,7 +2080,7 @@ static unsigned int dec_addu_r(DisasContext *dc)
2063 dc->op1, dc->op2)); 2080 dc->op1, dc->op2));
2064 2081
2065 cris_cc_mask(dc, CC_MASK_NZVC); 2082 cris_cc_mask(dc, CC_MASK_NZVC);
2066 - t0 = tcg_temp_new(TCG_TYPE_TL); 2083 + t0 = tcg_temp_new();
2067 /* Size can only be qi or hi. */ 2084 /* Size can only be qi or hi. */
2068 t_gen_zext(t0, cpu_R[dc->op1], size); 2085 t_gen_zext(t0, cpu_R[dc->op1], size);
2069 cris_alu(dc, CC_OP_ADD, 2086 cris_alu(dc, CC_OP_ADD,
@@ -2082,7 +2099,7 @@ static unsigned int dec_adds_r(DisasContext *dc) @@ -2082,7 +2099,7 @@ static unsigned int dec_adds_r(DisasContext *dc)
2082 dc->op1, dc->op2)); 2099 dc->op1, dc->op2));
2083 2100
2084 cris_cc_mask(dc, CC_MASK_NZVC); 2101 cris_cc_mask(dc, CC_MASK_NZVC);
2085 - t0 = tcg_temp_new(TCG_TYPE_TL); 2102 + t0 = tcg_temp_new();
2086 /* Size can only be qi or hi. */ 2103 /* Size can only be qi or hi. */
2087 t_gen_sext(t0, cpu_R[dc->op1], size); 2104 t_gen_sext(t0, cpu_R[dc->op1], size);
2088 cris_alu(dc, CC_OP_ADD, 2105 cris_alu(dc, CC_OP_ADD,
@@ -2101,7 +2118,7 @@ static unsigned int dec_subu_r(DisasContext *dc) @@ -2101,7 +2118,7 @@ static unsigned int dec_subu_r(DisasContext *dc)
2101 dc->op1, dc->op2)); 2118 dc->op1, dc->op2));
2102 2119
2103 cris_cc_mask(dc, CC_MASK_NZVC); 2120 cris_cc_mask(dc, CC_MASK_NZVC);
2104 - t0 = tcg_temp_new(TCG_TYPE_TL); 2121 + t0 = tcg_temp_new();
2105 /* Size can only be qi or hi. */ 2122 /* Size can only be qi or hi. */
2106 t_gen_zext(t0, cpu_R[dc->op1], size); 2123 t_gen_zext(t0, cpu_R[dc->op1], size);
2107 cris_alu(dc, CC_OP_SUB, 2124 cris_alu(dc, CC_OP_SUB,
@@ -2120,7 +2137,7 @@ static unsigned int dec_subs_r(DisasContext *dc) @@ -2120,7 +2137,7 @@ static unsigned int dec_subs_r(DisasContext *dc)
2120 dc->op1, dc->op2)); 2137 dc->op1, dc->op2));
2121 2138
2122 cris_cc_mask(dc, CC_MASK_NZVC); 2139 cris_cc_mask(dc, CC_MASK_NZVC);
2123 - t0 = tcg_temp_new(TCG_TYPE_TL); 2140 + t0 = tcg_temp_new();
2124 /* Size can only be qi or hi. */ 2141 /* Size can only be qi or hi. */
2125 t_gen_sext(t0, cpu_R[dc->op1], size); 2142 t_gen_sext(t0, cpu_R[dc->op1], size);
2126 cris_alu(dc, CC_OP_SUB, 2143 cris_alu(dc, CC_OP_SUB,
@@ -2203,16 +2220,14 @@ static unsigned int dec_move_rs(DisasContext *dc) @@ -2203,16 +2220,14 @@ static unsigned int dec_move_rs(DisasContext *dc)
2203 { 2220 {
2204 DIS(fprintf (logfile, "move $r%u, $s%u\n", dc->op1, dc->op2)); 2221 DIS(fprintf (logfile, "move $r%u, $s%u\n", dc->op1, dc->op2));
2205 cris_cc_mask(dc, 0); 2222 cris_cc_mask(dc, 0);
2206 - tcg_gen_helper_0_2(helper_movl_sreg_reg,  
2207 - tcg_const_tl(dc->op2), tcg_const_tl(dc->op1)); 2223 + gen_helper_movl_sreg_reg(tcg_const_tl(dc->op2), tcg_const_tl(dc->op1));
2208 return 2; 2224 return 2;
2209 } 2225 }
2210 static unsigned int dec_move_sr(DisasContext *dc) 2226 static unsigned int dec_move_sr(DisasContext *dc)
2211 { 2227 {
2212 DIS(fprintf (logfile, "move $s%u, $r%u\n", dc->op2, dc->op1)); 2228 DIS(fprintf (logfile, "move $s%u, $r%u\n", dc->op2, dc->op1));
2213 cris_cc_mask(dc, 0); 2229 cris_cc_mask(dc, 0);
2214 - tcg_gen_helper_0_2(helper_movl_reg_sreg,  
2215 - tcg_const_tl(dc->op1), tcg_const_tl(dc->op2)); 2230 + gen_helper_movl_reg_sreg(tcg_const_tl(dc->op1), tcg_const_tl(dc->op2));
2216 return 2; 2231 return 2;
2217 } 2232 }
2218 2233
@@ -2222,12 +2237,12 @@ static unsigned int dec_move_rp(DisasContext *dc) @@ -2222,12 +2237,12 @@ static unsigned int dec_move_rp(DisasContext *dc)
2222 DIS(fprintf (logfile, "move $r%u, $p%u\n", dc->op1, dc->op2)); 2237 DIS(fprintf (logfile, "move $r%u, $p%u\n", dc->op1, dc->op2));
2223 cris_cc_mask(dc, 0); 2238 cris_cc_mask(dc, 0);
2224 2239
2225 - t[0] = tcg_temp_new(TCG_TYPE_TL); 2240 + t[0] = tcg_temp_new();
2226 if (dc->op2 == PR_CCS) { 2241 if (dc->op2 == PR_CCS) {
2227 cris_evaluate_flags(dc); 2242 cris_evaluate_flags(dc);
2228 t_gen_mov_TN_reg(t[0], dc->op1); 2243 t_gen_mov_TN_reg(t[0], dc->op1);
2229 if (dc->tb_flags & U_FLAG) { 2244 if (dc->tb_flags & U_FLAG) {
2230 - t[1] = tcg_temp_new(TCG_TYPE_TL); 2245 + t[1] = tcg_temp_new();
2231 /* User space is not allowed to touch all flags. */ 2246 /* User space is not allowed to touch all flags. */
2232 tcg_gen_andi_tl(t[0], t[0], 0x39f); 2247 tcg_gen_andi_tl(t[0], t[0], 0x39f);
2233 tcg_gen_andi_tl(t[1], cpu_PR[PR_CCS], ~0x39f); 2248 tcg_gen_andi_tl(t[1], cpu_PR[PR_CCS], ~0x39f);
@@ -2255,7 +2270,7 @@ static unsigned int dec_move_pr(DisasContext *dc) @@ -2255,7 +2270,7 @@ static unsigned int dec_move_pr(DisasContext *dc)
2255 if (dc->op2 == PR_CCS) 2270 if (dc->op2 == PR_CCS)
2256 cris_evaluate_flags(dc); 2271 cris_evaluate_flags(dc);
2257 2272
2258 - t0 = tcg_temp_new(TCG_TYPE_TL); 2273 + t0 = tcg_temp_new();
2259 t_gen_mov_TN_preg(t0, dc->op2); 2274 t_gen_mov_TN_preg(t0, dc->op2);
2260 cris_alu(dc, CC_OP_MOVE, 2275 cris_alu(dc, CC_OP_MOVE,
2261 cpu_R[dc->op1], cpu_R[dc->op1], t0, preg_sizes[dc->op2]); 2276 cpu_R[dc->op1], cpu_R[dc->op1], t0, preg_sizes[dc->op2]);
@@ -2282,7 +2297,7 @@ static unsigned int dec_move_mr(DisasContext *dc) @@ -2282,7 +2297,7 @@ static unsigned int dec_move_mr(DisasContext *dc)
2282 else { 2297 else {
2283 TCGv t0; 2298 TCGv t0;
2284 2299
2285 - t0 = tcg_temp_new(TCG_TYPE_TL); 2300 + t0 = tcg_temp_new();
2286 insn_len = dec_prep_move_m(dc, 0, memsize, t0); 2301 insn_len = dec_prep_move_m(dc, 0, memsize, t0);
2287 cris_cc_mask(dc, CC_MASK_NZ); 2302 cris_cc_mask(dc, CC_MASK_NZ);
2288 cris_alu(dc, CC_OP_MOVE, 2303 cris_alu(dc, CC_OP_MOVE,
@@ -2295,8 +2310,8 @@ static unsigned int dec_move_mr(DisasContext *dc) @@ -2295,8 +2310,8 @@ static unsigned int dec_move_mr(DisasContext *dc)
2295 2310
2296 static inline void cris_alu_m_alloc_temps(TCGv *t) 2311 static inline void cris_alu_m_alloc_temps(TCGv *t)
2297 { 2312 {
2298 - t[0] = tcg_temp_new(TCG_TYPE_TL);  
2299 - t[1] = tcg_temp_new(TCG_TYPE_TL); 2313 + t[0] = tcg_temp_new();
  2314 + t[1] = tcg_temp_new();
2300 } 2315 }
2301 2316
2302 static inline void cris_alu_m_free_temps(TCGv *t) 2317 static inline void cris_alu_m_free_temps(TCGv *t)
@@ -2580,8 +2595,8 @@ static unsigned int dec_bound_m(DisasContext *dc) @@ -2580,8 +2595,8 @@ static unsigned int dec_bound_m(DisasContext *dc)
2580 dc->op1, dc->postinc ? "+]" : "]", 2595 dc->op1, dc->postinc ? "+]" : "]",
2581 dc->op2)); 2596 dc->op2));
2582 2597
2583 - l[0] = tcg_temp_local_new(TCG_TYPE_TL);  
2584 - l[1] = tcg_temp_local_new(TCG_TYPE_TL); 2598 + l[0] = tcg_temp_local_new();
  2599 + l[1] = tcg_temp_local_new();
2585 insn_len = dec_prep_alu_m(dc, 0, memsize, l[0], l[1]); 2600 insn_len = dec_prep_alu_m(dc, 0, memsize, l[0], l[1]);
2586 cris_cc_mask(dc, CC_MASK_NZ); 2601 cris_cc_mask(dc, CC_MASK_NZ);
2587 cris_alu(dc, CC_OP_BOUND, cpu_R[dc->op2], l[0], l[1], 4); 2602 cris_alu(dc, CC_OP_BOUND, cpu_R[dc->op2], l[0], l[1], 4);
@@ -2694,7 +2709,7 @@ static unsigned int dec_move_pm(DisasContext *dc) @@ -2694,7 +2709,7 @@ static unsigned int dec_move_pm(DisasContext *dc)
2694 /* prepare store. Address in T0, value in T1. */ 2709 /* prepare store. Address in T0, value in T1. */
2695 if (dc->op2 == PR_CCS) 2710 if (dc->op2 == PR_CCS)
2696 cris_evaluate_flags(dc); 2711 cris_evaluate_flags(dc);
2697 - t0 = tcg_temp_new(TCG_TYPE_TL); 2712 + t0 = tcg_temp_new();
2698 t_gen_mov_TN_preg(t0, dc->op2); 2713 t_gen_mov_TN_preg(t0, dc->op2);
2699 cris_flush_cc_state(dc); 2714 cris_flush_cc_state(dc);
2700 gen_store(dc, cpu_R[dc->op1], t0, memsize); 2715 gen_store(dc, cpu_R[dc->op1], t0, memsize);
@@ -2708,7 +2723,8 @@ static unsigned int dec_move_pm(DisasContext *dc) @@ -2708,7 +2723,8 @@ static unsigned int dec_move_pm(DisasContext *dc)
2708 2723
2709 static unsigned int dec_movem_mr(DisasContext *dc) 2724 static unsigned int dec_movem_mr(DisasContext *dc)
2710 { 2725 {
2711 - TCGv tmp[16]; 2726 + TCGv_i64 tmp[16];
  2727 + TCGv tmp32;
2712 TCGv addr; 2728 TCGv addr;
2713 int i; 2729 int i;
2714 int nr = dc->op2 + 1; 2730 int nr = dc->op2 + 1;
@@ -2716,18 +2732,18 @@ static unsigned int dec_movem_mr(DisasContext *dc) @@ -2716,18 +2732,18 @@ static unsigned int dec_movem_mr(DisasContext *dc)
2716 DIS(fprintf (logfile, "movem [$r%u%s, $r%u\n", dc->op1, 2732 DIS(fprintf (logfile, "movem [$r%u%s, $r%u\n", dc->op1,
2717 dc->postinc ? "+]" : "]", dc->op2)); 2733 dc->postinc ? "+]" : "]", dc->op2));
2718 2734
2719 - addr = tcg_temp_new(TCG_TYPE_TL); 2735 + addr = tcg_temp_new();
2720 /* There are probably better ways of doing this. */ 2736 /* There are probably better ways of doing this. */
2721 cris_flush_cc_state(dc); 2737 cris_flush_cc_state(dc);
2722 for (i = 0; i < (nr >> 1); i++) { 2738 for (i = 0; i < (nr >> 1); i++) {
2723 - tmp[i] = tcg_temp_new(TCG_TYPE_I64); 2739 + tmp[i] = tcg_temp_new_i64();
2724 tcg_gen_addi_tl(addr, cpu_R[dc->op1], i * 8); 2740 tcg_gen_addi_tl(addr, cpu_R[dc->op1], i * 8);
2725 - gen_load(dc, tmp[i], addr, 8, 0); 2741 + gen_load64(dc, tmp[i], addr);
2726 } 2742 }
2727 if (nr & 1) { 2743 if (nr & 1) {
2728 - tmp[i] = tcg_temp_new(TCG_TYPE_I32); 2744 + tmp32 = tcg_temp_new_i32();
2729 tcg_gen_addi_tl(addr, cpu_R[dc->op1], i * 8); 2745 tcg_gen_addi_tl(addr, cpu_R[dc->op1], i * 8);
2730 - gen_load(dc, tmp[i], addr, 4, 0); 2746 + gen_load(dc, tmp32, addr, 4, 0);
2731 } 2747 }
2732 tcg_temp_free(addr); 2748 tcg_temp_free(addr);
2733 2749
@@ -2735,11 +2751,11 @@ static unsigned int dec_movem_mr(DisasContext *dc) @@ -2735,11 +2751,11 @@ static unsigned int dec_movem_mr(DisasContext *dc)
2735 tcg_gen_trunc_i64_i32(cpu_R[i * 2], tmp[i]); 2751 tcg_gen_trunc_i64_i32(cpu_R[i * 2], tmp[i]);
2736 tcg_gen_shri_i64(tmp[i], tmp[i], 32); 2752 tcg_gen_shri_i64(tmp[i], tmp[i], 32);
2737 tcg_gen_trunc_i64_i32(cpu_R[i * 2 + 1], tmp[i]); 2753 tcg_gen_trunc_i64_i32(cpu_R[i * 2 + 1], tmp[i]);
2738 - tcg_temp_free(tmp[i]); 2754 + tcg_temp_free_i64(tmp[i]);
2739 } 2755 }
2740 if (nr & 1) { 2756 if (nr & 1) {
2741 - tcg_gen_mov_tl(cpu_R[dc->op2], tmp[i]);  
2742 - tcg_temp_free(tmp[i]); 2757 + tcg_gen_mov_tl(cpu_R[dc->op2], tmp32);
  2758 + tcg_temp_free(tmp32);
2743 } 2759 }
2744 2760
2745 /* writeback the updated pointer value. */ 2761 /* writeback the updated pointer value. */
@@ -2762,8 +2778,8 @@ static unsigned int dec_movem_rm(DisasContext *dc) @@ -2762,8 +2778,8 @@ static unsigned int dec_movem_rm(DisasContext *dc)
2762 2778
2763 cris_flush_cc_state(dc); 2779 cris_flush_cc_state(dc);
2764 2780
2765 - tmp = tcg_temp_new(TCG_TYPE_TL);  
2766 - addr = tcg_temp_new(TCG_TYPE_TL); 2781 + tmp = tcg_temp_new();
  2782 + addr = tcg_temp_new();
2767 tcg_gen_movi_tl(tmp, 4); 2783 tcg_gen_movi_tl(tmp, 4);
2768 tcg_gen_mov_tl(addr, cpu_R[dc->op1]); 2784 tcg_gen_mov_tl(addr, cpu_R[dc->op1]);
2769 for (i = 0; i <= dc->op2; i++) { 2785 for (i = 0; i <= dc->op2; i++) {
@@ -2960,14 +2976,14 @@ static unsigned int dec_rfe_etc(DisasContext *dc) @@ -2960,14 +2976,14 @@ static unsigned int dec_rfe_etc(DisasContext *dc)
2960 /* rfe. */ 2976 /* rfe. */
2961 DIS(fprintf(logfile, "rfe\n")); 2977 DIS(fprintf(logfile, "rfe\n"));
2962 cris_evaluate_flags(dc); 2978 cris_evaluate_flags(dc);
2963 - tcg_gen_helper_0_0(helper_rfe); 2979 + gen_helper_rfe();
2964 dc->is_jmp = DISAS_UPDATE; 2980 dc->is_jmp = DISAS_UPDATE;
2965 break; 2981 break;
2966 case 5: 2982 case 5:
2967 /* rfn. */ 2983 /* rfn. */
2968 DIS(fprintf(logfile, "rfn\n")); 2984 DIS(fprintf(logfile, "rfn\n"));
2969 cris_evaluate_flags(dc); 2985 cris_evaluate_flags(dc);
2970 - tcg_gen_helper_0_0(helper_rfn); 2986 + gen_helper_rfn();
2971 dc->is_jmp = DISAS_UPDATE; 2987 dc->is_jmp = DISAS_UPDATE;
2972 break; 2988 break;
2973 case 6: 2989 case 6:
@@ -3502,63 +3518,49 @@ CPUCRISState *cpu_cris_init (const char *cpu_model) @@ -3502,63 +3518,49 @@ CPUCRISState *cpu_cris_init (const char *cpu_model)
3502 3518
3503 tcg_initialized = 1; 3519 tcg_initialized = 1;
3504 3520
3505 - cpu_env = tcg_global_reg_new(TCG_TYPE_PTR, TCG_AREG0, "env");  
3506 - cc_x = tcg_global_mem_new(TCG_TYPE_TL, TCG_AREG0, 3521 + cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
  3522 + cc_x = tcg_global_mem_new(TCG_AREG0,
3507 offsetof(CPUState, cc_x), "cc_x"); 3523 offsetof(CPUState, cc_x), "cc_x");
3508 - cc_src = tcg_global_mem_new(TCG_TYPE_TL, TCG_AREG0, 3524 + cc_src = tcg_global_mem_new(TCG_AREG0,
3509 offsetof(CPUState, cc_src), "cc_src"); 3525 offsetof(CPUState, cc_src), "cc_src");
3510 - cc_dest = tcg_global_mem_new(TCG_TYPE_TL, TCG_AREG0, 3526 + cc_dest = tcg_global_mem_new(TCG_AREG0,
3511 offsetof(CPUState, cc_dest), 3527 offsetof(CPUState, cc_dest),
3512 "cc_dest"); 3528 "cc_dest");
3513 - cc_result = tcg_global_mem_new(TCG_TYPE_TL, TCG_AREG0, 3529 + cc_result = tcg_global_mem_new(TCG_AREG0,
3514 offsetof(CPUState, cc_result), 3530 offsetof(CPUState, cc_result),
3515 "cc_result"); 3531 "cc_result");
3516 - cc_op = tcg_global_mem_new(TCG_TYPE_TL, TCG_AREG0, 3532 + cc_op = tcg_global_mem_new(TCG_AREG0,
3517 offsetof(CPUState, cc_op), "cc_op"); 3533 offsetof(CPUState, cc_op), "cc_op");
3518 - cc_size = tcg_global_mem_new(TCG_TYPE_TL, TCG_AREG0, 3534 + cc_size = tcg_global_mem_new(TCG_AREG0,
3519 offsetof(CPUState, cc_size), 3535 offsetof(CPUState, cc_size),
3520 "cc_size"); 3536 "cc_size");
3521 - cc_mask = tcg_global_mem_new(TCG_TYPE_TL, TCG_AREG0, 3537 + cc_mask = tcg_global_mem_new(TCG_AREG0,
3522 offsetof(CPUState, cc_mask), 3538 offsetof(CPUState, cc_mask),
3523 "cc_mask"); 3539 "cc_mask");
3524 3540
3525 - env_pc = tcg_global_mem_new(TCG_TYPE_TL, TCG_AREG0, 3541 + env_pc = tcg_global_mem_new(TCG_AREG0,
3526 offsetof(CPUState, pc), 3542 offsetof(CPUState, pc),
3527 "pc"); 3543 "pc");
3528 - env_btarget = tcg_global_mem_new(TCG_TYPE_TL, TCG_AREG0, 3544 + env_btarget = tcg_global_mem_new(TCG_AREG0,
3529 offsetof(CPUState, btarget), 3545 offsetof(CPUState, btarget),
3530 "btarget"); 3546 "btarget");
3531 - env_btaken = tcg_global_mem_new(TCG_TYPE_TL, TCG_AREG0, 3547 + env_btaken = tcg_global_mem_new(TCG_AREG0,
3532 offsetof(CPUState, btaken), 3548 offsetof(CPUState, btaken),
3533 "btaken"); 3549 "btaken");
3534 for (i = 0; i < 16; i++) { 3550 for (i = 0; i < 16; i++) {
3535 - cpu_R[i] = tcg_global_mem_new(TCG_TYPE_TL, TCG_AREG0, 3551 + cpu_R[i] = tcg_global_mem_new(TCG_AREG0,
3536 offsetof(CPUState, regs[i]), 3552 offsetof(CPUState, regs[i]),
3537 regnames[i]); 3553 regnames[i]);
3538 } 3554 }
3539 for (i = 0; i < 16; i++) { 3555 for (i = 0; i < 16; i++) {
3540 - cpu_PR[i] = tcg_global_mem_new(TCG_TYPE_TL, TCG_AREG0, 3556 + cpu_PR[i] = tcg_global_mem_new(TCG_AREG0,
3541 offsetof(CPUState, pregs[i]), 3557 offsetof(CPUState, pregs[i]),
3542 pregnames[i]); 3558 pregnames[i]);
3543 } 3559 }
3544 3560
3545 - TCG_HELPER(helper_raise_exception);  
3546 - TCG_HELPER(helper_dump);  
3547 -  
3548 - TCG_HELPER(helper_tlb_flush_pid);  
3549 - TCG_HELPER(helper_movl_sreg_reg);  
3550 - TCG_HELPER(helper_movl_reg_sreg);  
3551 - TCG_HELPER(helper_rfe);  
3552 - TCG_HELPER(helper_rfn); 3561 +#define GEN_HELPER 2
  3562 +#include "helper.h"
3553 3563
3554 - TCG_HELPER(helper_evaluate_flags_muls);  
3555 - TCG_HELPER(helper_evaluate_flags_mulu);  
3556 - TCG_HELPER(helper_evaluate_flags_mcp);  
3557 - TCG_HELPER(helper_evaluate_flags_alu_4);  
3558 - TCG_HELPER(helper_evaluate_flags_move_4);  
3559 - TCG_HELPER(helper_evaluate_flags_move_2);  
3560 - TCG_HELPER(helper_evaluate_flags);  
3561 - TCG_HELPER(helper_top_evaluate_flags);  
3562 return env; 3564 return env;
3563 } 3565 }
3564 3566
target-i386/cpu.h
@@ -780,8 +780,6 @@ typedef struct CCTable { @@ -780,8 +780,6 @@ typedef struct CCTable {
780 int (*compute_c)(void); /* return the C flag */ 780 int (*compute_c)(void); /* return the C flag */
781 } CCTable; 781 } CCTable;
782 782
783 -extern CCTable cc_table[];  
784 -  
785 #if defined(CONFIG_USER_ONLY) 783 #if defined(CONFIG_USER_ONLY)
786 static inline void cpu_clone_regs(CPUState *env, target_ulong newsp) 784 static inline void cpu_clone_regs(CPUState *env, target_ulong newsp)
787 { 785 {
target-i386/exec.h
@@ -290,7 +290,7 @@ extern const uint8_t rclb_table[32]; @@ -290,7 +290,7 @@ extern const uint8_t rclb_table[32];
290 290
291 static inline uint32_t compute_eflags(void) 291 static inline uint32_t compute_eflags(void)
292 { 292 {
293 - return env->eflags | cc_table[CC_OP].compute_all() | (DF & DF_MASK); 293 + return env->eflags | helper_cc_compute_all(CC_OP) | (DF & DF_MASK);
294 } 294 }
295 295
296 /* NOTE: CC_OP must be modified manually to CC_OP_EFLAGS */ 296 /* NOTE: CC_OP must be modified manually to CC_OP_EFLAGS */
target-i386/helper.c
@@ -30,6 +30,7 @@ @@ -30,6 +30,7 @@
30 #include "svm.h" 30 #include "svm.h"
31 #include "qemu-common.h" 31 #include "qemu-common.h"
32 #include "kvm.h" 32 #include "kvm.h"
  33 +#include "helper.h"
33 34
34 //#define DEBUG_MMU 35 //#define DEBUG_MMU
35 36
target-i386/helper.h
1 -#ifndef DEF_HELPER  
2 -#define DEF_HELPER(ret, name, params) ret name params;  
3 -#endif 1 +#include "def-helper.h"
  2 +
  3 +DEF_HELPER_FLAGS_1(cc_compute_all, TCG_CALL_PURE, i32, int)
  4 +DEF_HELPER_FLAGS_1(cc_compute_c, TCG_CALL_PURE, i32, int)
4 5
5 -DEF_HELPER(void, helper_lock, (void))  
6 -DEF_HELPER(void, helper_unlock, (void))  
7 -DEF_HELPER(void, helper_write_eflags, (target_ulong t0, uint32_t update_mask))  
8 -DEF_HELPER(target_ulong, helper_read_eflags, (void))  
9 -DEF_HELPER(void, helper_divb_AL, (target_ulong t0))  
10 -DEF_HELPER(void, helper_idivb_AL, (target_ulong t0))  
11 -DEF_HELPER(void, helper_divw_AX, (target_ulong t0))  
12 -DEF_HELPER(void, helper_idivw_AX, (target_ulong t0))  
13 -DEF_HELPER(void, helper_divl_EAX, (target_ulong t0))  
14 -DEF_HELPER(void, helper_idivl_EAX, (target_ulong t0)) 6 +DEF_HELPER_0(lock, void)
  7 +DEF_HELPER_0(unlock, void)
  8 +DEF_HELPER_2(write_eflags, void, tl, i32)
  9 +DEF_HELPER_0(read_eflags, tl)
  10 +DEF_HELPER_1(divb_AL, void, tl)
  11 +DEF_HELPER_1(idivb_AL, void, tl)
  12 +DEF_HELPER_1(divw_AX, void, tl)
  13 +DEF_HELPER_1(idivw_AX, void, tl)
  14 +DEF_HELPER_1(divl_EAX, void, tl)
  15 +DEF_HELPER_1(idivl_EAX, void, tl)
15 #ifdef TARGET_X86_64 16 #ifdef TARGET_X86_64
16 -DEF_HELPER(void, helper_mulq_EAX_T0, (target_ulong t0))  
17 -DEF_HELPER(void, helper_imulq_EAX_T0, (target_ulong t0))  
18 -DEF_HELPER(target_ulong, helper_imulq_T0_T1, (target_ulong t0, target_ulong t1))  
19 -DEF_HELPER(void, helper_divq_EAX, (target_ulong t0))  
20 -DEF_HELPER(void, helper_idivq_EAX, (target_ulong t0)) 17 +DEF_HELPER_1(mulq_EAX_T0, void, tl)
  18 +DEF_HELPER_1(imulq_EAX_T0, void, tl)
  19 +DEF_HELPER_2(imulq_T0_T1, tl, tl, tl)
  20 +DEF_HELPER_1(divq_EAX, void, tl)
  21 +DEF_HELPER_1(idivq_EAX, void, tl)
21 #endif 22 #endif
22 23
23 -DEF_HELPER(void, helper_aam, (int base))  
24 -DEF_HELPER(void, helper_aad, (int base))  
25 -DEF_HELPER(void, helper_aaa, (void))  
26 -DEF_HELPER(void, helper_aas, (void))  
27 -DEF_HELPER(void, helper_daa, (void))  
28 -DEF_HELPER(void, helper_das, (void)) 24 +DEF_HELPER_1(aam, void, int)
  25 +DEF_HELPER_1(aad, void, int)
  26 +DEF_HELPER_0(aaa, void)
  27 +DEF_HELPER_0(aas, void)
  28 +DEF_HELPER_0(daa, void)
  29 +DEF_HELPER_0(das, void)
29 30
30 -DEF_HELPER(target_ulong, helper_lsl, (target_ulong selector1))  
31 -DEF_HELPER(target_ulong, helper_lar, (target_ulong selector1))  
32 -DEF_HELPER(void, helper_verr, (target_ulong selector1))  
33 -DEF_HELPER(void, helper_verw, (target_ulong selector1))  
34 -DEF_HELPER(void, helper_lldt, (int selector))  
35 -DEF_HELPER(void, helper_ltr, (int selector))  
36 -DEF_HELPER(void, helper_load_seg, (int seg_reg, int selector))  
37 -DEF_HELPER(void, helper_ljmp_protected, (int new_cs, target_ulong new_eip,  
38 - int next_eip_addend))  
39 -DEF_HELPER(void, helper_lcall_real, (int new_cs, target_ulong new_eip1,  
40 - int shift, int next_eip))  
41 -DEF_HELPER(void, helper_lcall_protected, (int new_cs, target_ulong new_eip,  
42 - int shift, int next_eip_addend))  
43 -DEF_HELPER(void, helper_iret_real, (int shift))  
44 -DEF_HELPER(void, helper_iret_protected, (int shift, int next_eip))  
45 -DEF_HELPER(void, helper_lret_protected, (int shift, int addend))  
46 -DEF_HELPER(target_ulong, helper_read_crN, (int reg))  
47 -DEF_HELPER(void, helper_write_crN, (int reg, target_ulong t0))  
48 -DEF_HELPER(void, helper_lmsw, (target_ulong t0))  
49 -DEF_HELPER(void, helper_clts, (void))  
50 -DEF_HELPER(void, helper_movl_drN_T0, (int reg, target_ulong t0))  
51 -DEF_HELPER(void, helper_invlpg, (target_ulong addr)) 31 +DEF_HELPER_1(lsl, tl, tl)
  32 +DEF_HELPER_1(lar, tl, tl)
  33 +DEF_HELPER_1(verr, void, tl)
  34 +DEF_HELPER_1(verw, void, tl)
  35 +DEF_HELPER_1(lldt, void, int)
  36 +DEF_HELPER_1(ltr, void, int)
  37 +DEF_HELPER_2(load_seg, void, int, int)
  38 +DEF_HELPER_3(ljmp_protected, void, int, tl, int)
  39 +DEF_HELPER_4(lcall_real, void, int, tl, int, int)
  40 +DEF_HELPER_4(lcall_protected, void, int, tl, int, int)
  41 +DEF_HELPER_1(iret_real, void, int)
  42 +DEF_HELPER_2(iret_protected, void, int, int)
  43 +DEF_HELPER_2(lret_protected, void, int, int)
  44 +DEF_HELPER_1(read_crN, tl, int)
  45 +DEF_HELPER_2(write_crN, void, int, tl)
  46 +DEF_HELPER_1(lmsw, void, tl)
  47 +DEF_HELPER_0(clts, void)
  48 +DEF_HELPER_2(movl_drN_T0, void, int, tl)
  49 +DEF_HELPER_1(invlpg, void, tl)
52 50
53 -DEF_HELPER(void, helper_enter_level, (int level, int data32, target_ulong t1)) 51 +DEF_HELPER_3(enter_level, void, int, int, tl)
54 #ifdef TARGET_X86_64 52 #ifdef TARGET_X86_64
55 -DEF_HELPER(void, helper_enter64_level, (int level, int data64, target_ulong t1)) 53 +DEF_HELPER_3(enter64_level, void, int, int, tl)
56 #endif 54 #endif
57 -DEF_HELPER(void, helper_sysenter, (void))  
58 -DEF_HELPER(void, helper_sysexit, (int dflag)) 55 +DEF_HELPER_0(sysenter, void)
  56 +DEF_HELPER_1(sysexit, void, int)
59 #ifdef TARGET_X86_64 57 #ifdef TARGET_X86_64
60 -DEF_HELPER(void, helper_syscall, (int next_eip_addend))  
61 -DEF_HELPER(void, helper_sysret, (int dflag)) 58 +DEF_HELPER_1(syscall, void, int)
  59 +DEF_HELPER_1(sysret, void, int)
62 #endif 60 #endif
63 -DEF_HELPER(void, helper_hlt, (int next_eip_addend))  
64 -DEF_HELPER(void, helper_monitor, (target_ulong ptr))  
65 -DEF_HELPER(void, helper_mwait, (int next_eip_addend))  
66 -DEF_HELPER(void, helper_debug, (void))  
67 -DEF_HELPER(void, helper_raise_interrupt, (int intno, int next_eip_addend))  
68 -DEF_HELPER(void, helper_raise_exception, (int exception_index))  
69 -DEF_HELPER(void, helper_cli, (void))  
70 -DEF_HELPER(void, helper_sti, (void))  
71 -DEF_HELPER(void, helper_set_inhibit_irq, (void))  
72 -DEF_HELPER(void, helper_reset_inhibit_irq, (void))  
73 -DEF_HELPER(void, helper_boundw, (target_ulong a0, int v))  
74 -DEF_HELPER(void, helper_boundl, (target_ulong a0, int v))  
75 -DEF_HELPER(void, helper_rsm, (void))  
76 -DEF_HELPER(void, helper_into, (int next_eip_addend))  
77 -DEF_HELPER(void, helper_cmpxchg8b, (target_ulong a0)) 61 +DEF_HELPER_1(hlt, void, int)
  62 +DEF_HELPER_1(monitor, void, tl)
  63 +DEF_HELPER_1(mwait, void, int)
  64 +DEF_HELPER_0(debug, void)
  65 +DEF_HELPER_2(raise_interrupt, void, int, int)
  66 +DEF_HELPER_1(raise_exception, void, int)
  67 +DEF_HELPER_0(cli, void)
  68 +DEF_HELPER_0(sti, void)
  69 +DEF_HELPER_0(set_inhibit_irq, void)
  70 +DEF_HELPER_0(reset_inhibit_irq, void)
  71 +DEF_HELPER_2(boundw, void, tl, int)
  72 +DEF_HELPER_2(boundl, void, tl, int)
  73 +DEF_HELPER_0(rsm, void)
  74 +DEF_HELPER_1(into, void, int)
  75 +DEF_HELPER_1(cmpxchg8b, void, tl)
78 #ifdef TARGET_X86_64 76 #ifdef TARGET_X86_64
79 -DEF_HELPER(void, helper_cmpxchg16b, (target_ulong a0)) 77 +DEF_HELPER_1(cmpxchg16b, void, tl)
80 #endif 78 #endif
81 -DEF_HELPER(void, helper_single_step, (void))  
82 -DEF_HELPER(void, helper_cpuid, (void))  
83 -DEF_HELPER(void, helper_rdtsc, (void))  
84 -DEF_HELPER(void, helper_rdpmc, (void))  
85 -DEF_HELPER(void, helper_rdmsr, (void))  
86 -DEF_HELPER(void, helper_wrmsr, (void)) 79 +DEF_HELPER_0(single_step, void)
  80 +DEF_HELPER_0(cpuid, void)
  81 +DEF_HELPER_0(rdtsc, void)
  82 +DEF_HELPER_0(rdpmc, void)
  83 +DEF_HELPER_0(rdmsr, void)
  84 +DEF_HELPER_0(wrmsr, void)
87 85
88 -DEF_HELPER(void, helper_check_iob, (uint32_t t0))  
89 -DEF_HELPER(void, helper_check_iow, (uint32_t t0))  
90 -DEF_HELPER(void, helper_check_iol, (uint32_t t0))  
91 -DEF_HELPER(void, helper_outb, (uint32_t port, uint32_t data))  
92 -DEF_HELPER(target_ulong, helper_inb, (uint32_t port))  
93 -DEF_HELPER(void, helper_outw, (uint32_t port, uint32_t data))  
94 -DEF_HELPER(target_ulong, helper_inw, (uint32_t port))  
95 -DEF_HELPER(void, helper_outl, (uint32_t port, uint32_t data))  
96 -DEF_HELPER(target_ulong, helper_inl, (uint32_t port)) 86 +DEF_HELPER_1(check_iob, void, i32)
  87 +DEF_HELPER_1(check_iow, void, i32)
  88 +DEF_HELPER_1(check_iol, void, i32)
  89 +DEF_HELPER_2(outb, void, i32, i32)
  90 +DEF_HELPER_1(inb, tl, i32)
  91 +DEF_HELPER_2(outw, void, i32, i32)
  92 +DEF_HELPER_1(inw, tl, i32)
  93 +DEF_HELPER_2(outl, void, i32, i32)
  94 +DEF_HELPER_1(inl, tl, i32)
97 95
98 -DEF_HELPER(void, helper_svm_check_intercept_param, (uint32_t type, uint64_t param))  
99 -DEF_HELPER(void, helper_vmexit, (uint32_t exit_code, uint64_t exit_info_1))  
100 -DEF_HELPER(void, helper_svm_check_io, (uint32_t port, uint32_t param,  
101 - uint32_t next_eip_addend))  
102 -DEF_HELPER(void, helper_vmrun, (int aflag, int next_eip_addend))  
103 -DEF_HELPER(void, helper_vmmcall, (void))  
104 -DEF_HELPER(void, helper_vmload, (int aflag))  
105 -DEF_HELPER(void, helper_vmsave, (int aflag))  
106 -DEF_HELPER(void, helper_stgi, (void))  
107 -DEF_HELPER(void, helper_clgi, (void))  
108 -DEF_HELPER(void, helper_skinit, (void))  
109 -DEF_HELPER(void, helper_invlpga, (int aflag)) 96 +DEF_HELPER_2(svm_check_intercept_param, void, i32, i64)
  97 +DEF_HELPER_2(vmexit, void, i32, i64)
  98 +DEF_HELPER_3(svm_check_io, void, i32, i32, i32)
  99 +DEF_HELPER_2(vmrun, void, int, int)
  100 +DEF_HELPER_0(vmmcall, void)
  101 +DEF_HELPER_1(vmload, void, int)
  102 +DEF_HELPER_1(vmsave, void, int)
  103 +DEF_HELPER_0(stgi, void)
  104 +DEF_HELPER_0(clgi, void)
  105 +DEF_HELPER_0(skinit, void)
  106 +DEF_HELPER_1(invlpga, void, int)
110 107
111 /* x86 FPU */ 108 /* x86 FPU */
112 109
113 -DEF_HELPER(void, helper_flds_FT0, (uint32_t val))  
114 -DEF_HELPER(void, helper_fldl_FT0, (uint64_t val))  
115 -DEF_HELPER(void, helper_fildl_FT0, (int32_t val))  
116 -DEF_HELPER(void, helper_flds_ST0, (uint32_t val))  
117 -DEF_HELPER(void, helper_fldl_ST0, (uint64_t val))  
118 -DEF_HELPER(void, helper_fildl_ST0, (int32_t val))  
119 -DEF_HELPER(void, helper_fildll_ST0, (int64_t val))  
120 -DEF_HELPER(uint32_t, helper_fsts_ST0, (void))  
121 -DEF_HELPER(uint64_t, helper_fstl_ST0, (void))  
122 -DEF_HELPER(int32_t, helper_fist_ST0, (void))  
123 -DEF_HELPER(int32_t, helper_fistl_ST0, (void))  
124 -DEF_HELPER(int64_t, helper_fistll_ST0, (void))  
125 -DEF_HELPER(int32_t, helper_fistt_ST0, (void))  
126 -DEF_HELPER(int32_t, helper_fisttl_ST0, (void))  
127 -DEF_HELPER(int64_t, helper_fisttll_ST0, (void))  
128 -DEF_HELPER(void, helper_fldt_ST0, (target_ulong ptr))  
129 -DEF_HELPER(void, helper_fstt_ST0, (target_ulong ptr))  
130 -DEF_HELPER(void, helper_fpush, (void))  
131 -DEF_HELPER(void, helper_fpop, (void))  
132 -DEF_HELPER(void, helper_fdecstp, (void))  
133 -DEF_HELPER(void, helper_fincstp, (void))  
134 -DEF_HELPER(void, helper_ffree_STN, (int st_index))  
135 -DEF_HELPER(void, helper_fmov_ST0_FT0, (void))  
136 -DEF_HELPER(void, helper_fmov_FT0_STN, (int st_index))  
137 -DEF_HELPER(void, helper_fmov_ST0_STN, (int st_index))  
138 -DEF_HELPER(void, helper_fmov_STN_ST0, (int st_index))  
139 -DEF_HELPER(void, helper_fxchg_ST0_STN, (int st_index))  
140 -DEF_HELPER(void, helper_fcom_ST0_FT0, (void))  
141 -DEF_HELPER(void, helper_fucom_ST0_FT0, (void))  
142 -DEF_HELPER(void, helper_fcomi_ST0_FT0, (void))  
143 -DEF_HELPER(void, helper_fucomi_ST0_FT0, (void))  
144 -DEF_HELPER(void, helper_fadd_ST0_FT0, (void))  
145 -DEF_HELPER(void, helper_fmul_ST0_FT0, (void))  
146 -DEF_HELPER(void, helper_fsub_ST0_FT0, (void))  
147 -DEF_HELPER(void, helper_fsubr_ST0_FT0, (void))  
148 -DEF_HELPER(void, helper_fdiv_ST0_FT0, (void))  
149 -DEF_HELPER(void, helper_fdivr_ST0_FT0, (void))  
150 -DEF_HELPER(void, helper_fadd_STN_ST0, (int st_index))  
151 -DEF_HELPER(void, helper_fmul_STN_ST0, (int st_index))  
152 -DEF_HELPER(void, helper_fsub_STN_ST0, (int st_index))  
153 -DEF_HELPER(void, helper_fsubr_STN_ST0, (int st_index))  
154 -DEF_HELPER(void, helper_fdiv_STN_ST0, (int st_index))  
155 -DEF_HELPER(void, helper_fdivr_STN_ST0, (int st_index))  
156 -DEF_HELPER(void, helper_fchs_ST0, (void))  
157 -DEF_HELPER(void, helper_fabs_ST0, (void))  
158 -DEF_HELPER(void, helper_fxam_ST0, (void))  
159 -DEF_HELPER(void, helper_fld1_ST0, (void))  
160 -DEF_HELPER(void, helper_fldl2t_ST0, (void))  
161 -DEF_HELPER(void, helper_fldl2e_ST0, (void))  
162 -DEF_HELPER(void, helper_fldpi_ST0, (void))  
163 -DEF_HELPER(void, helper_fldlg2_ST0, (void))  
164 -DEF_HELPER(void, helper_fldln2_ST0, (void))  
165 -DEF_HELPER(void, helper_fldz_ST0, (void))  
166 -DEF_HELPER(void, helper_fldz_FT0, (void))  
167 -DEF_HELPER(uint32_t, helper_fnstsw, (void))  
168 -DEF_HELPER(uint32_t, helper_fnstcw, (void))  
169 -DEF_HELPER(void, helper_fldcw, (uint32_t val))  
170 -DEF_HELPER(void, helper_fclex, (void))  
171 -DEF_HELPER(void, helper_fwait, (void))  
172 -DEF_HELPER(void, helper_fninit, (void))  
173 -DEF_HELPER(void, helper_fbld_ST0, (target_ulong ptr))  
174 -DEF_HELPER(void, helper_fbst_ST0, (target_ulong ptr))  
175 -DEF_HELPER(void, helper_f2xm1, (void))  
176 -DEF_HELPER(void, helper_fyl2x, (void))  
177 -DEF_HELPER(void, helper_fptan, (void))  
178 -DEF_HELPER(void, helper_fpatan, (void))  
179 -DEF_HELPER(void, helper_fxtract, (void))  
180 -DEF_HELPER(void, helper_fprem1, (void))  
181 -DEF_HELPER(void, helper_fprem, (void))  
182 -DEF_HELPER(void, helper_fyl2xp1, (void))  
183 -DEF_HELPER(void, helper_fsqrt, (void))  
184 -DEF_HELPER(void, helper_fsincos, (void))  
185 -DEF_HELPER(void, helper_frndint, (void))  
186 -DEF_HELPER(void, helper_fscale, (void))  
187 -DEF_HELPER(void, helper_fsin, (void))  
188 -DEF_HELPER(void, helper_fcos, (void))  
189 -DEF_HELPER(void, helper_fstenv, (target_ulong ptr, int data32))  
190 -DEF_HELPER(void, helper_fldenv, (target_ulong ptr, int data32))  
191 -DEF_HELPER(void, helper_fsave, (target_ulong ptr, int data32))  
192 -DEF_HELPER(void, helper_frstor, (target_ulong ptr, int data32))  
193 -DEF_HELPER(void, helper_fxsave, (target_ulong ptr, int data64))  
194 -DEF_HELPER(void, helper_fxrstor, (target_ulong ptr, int data64))  
195 -DEF_HELPER(target_ulong, helper_bsf, (target_ulong t0))  
196 -DEF_HELPER(target_ulong, helper_bsr, (target_ulong t0)) 110 +DEF_HELPER_1(flds_FT0, void, i32)
  111 +DEF_HELPER_1(fldl_FT0, void, i64)
  112 +DEF_HELPER_1(fildl_FT0, void, s32)
  113 +DEF_HELPER_1(flds_ST0, void, i32)
  114 +DEF_HELPER_1(fldl_ST0, void, i64)
  115 +DEF_HELPER_1(fildl_ST0, void, s32)
  116 +DEF_HELPER_1(fildll_ST0, void, s64)
  117 +DEF_HELPER_0(fsts_ST0, i32)
  118 +DEF_HELPER_0(fstl_ST0, i64)
  119 +DEF_HELPER_0(fist_ST0, s32)
  120 +DEF_HELPER_0(fistl_ST0, s32)
  121 +DEF_HELPER_0(fistll_ST0, s64)
  122 +DEF_HELPER_0(fistt_ST0, s32)
  123 +DEF_HELPER_0(fisttl_ST0, s32)
  124 +DEF_HELPER_0(fisttll_ST0, s64)
  125 +DEF_HELPER_1(fldt_ST0, void, tl)
  126 +DEF_HELPER_1(fstt_ST0, void, tl)
  127 +DEF_HELPER_0(fpush, void)
  128 +DEF_HELPER_0(fpop, void)
  129 +DEF_HELPER_0(fdecstp, void)
  130 +DEF_HELPER_0(fincstp, void)
  131 +DEF_HELPER_1(ffree_STN, void, int)
  132 +DEF_HELPER_0(fmov_ST0_FT0, void)
  133 +DEF_HELPER_1(fmov_FT0_STN, void, int)
  134 +DEF_HELPER_1(fmov_ST0_STN, void, int)
  135 +DEF_HELPER_1(fmov_STN_ST0, void, int)
  136 +DEF_HELPER_1(fxchg_ST0_STN, void, int)
  137 +DEF_HELPER_0(fcom_ST0_FT0, void)
  138 +DEF_HELPER_0(fucom_ST0_FT0, void)
  139 +DEF_HELPER_0(fcomi_ST0_FT0, void)
  140 +DEF_HELPER_0(fucomi_ST0_FT0, void)
  141 +DEF_HELPER_0(fadd_ST0_FT0, void)
  142 +DEF_HELPER_0(fmul_ST0_FT0, void)
  143 +DEF_HELPER_0(fsub_ST0_FT0, void)
  144 +DEF_HELPER_0(fsubr_ST0_FT0, void)
  145 +DEF_HELPER_0(fdiv_ST0_FT0, void)
  146 +DEF_HELPER_0(fdivr_ST0_FT0, void)
  147 +DEF_HELPER_1(fadd_STN_ST0, void, int)
  148 +DEF_HELPER_1(fmul_STN_ST0, void, int)
  149 +DEF_HELPER_1(fsub_STN_ST0, void, int)
  150 +DEF_HELPER_1(fsubr_STN_ST0, void, int)
  151 +DEF_HELPER_1(fdiv_STN_ST0, void, int)
  152 +DEF_HELPER_1(fdivr_STN_ST0, void, int)
  153 +DEF_HELPER_0(fchs_ST0, void)
  154 +DEF_HELPER_0(fabs_ST0, void)
  155 +DEF_HELPER_0(fxam_ST0, void)
  156 +DEF_HELPER_0(fld1_ST0, void)
  157 +DEF_HELPER_0(fldl2t_ST0, void)
  158 +DEF_HELPER_0(fldl2e_ST0, void)
  159 +DEF_HELPER_0(fldpi_ST0, void)
  160 +DEF_HELPER_0(fldlg2_ST0, void)
  161 +DEF_HELPER_0(fldln2_ST0, void)
  162 +DEF_HELPER_0(fldz_ST0, void)
  163 +DEF_HELPER_0(fldz_FT0, void)
  164 +DEF_HELPER_0(fnstsw, i32)
  165 +DEF_HELPER_0(fnstcw, i32)
  166 +DEF_HELPER_1(fldcw, void, i32)
  167 +DEF_HELPER_0(fclex, void)
  168 +DEF_HELPER_0(fwait, void)
  169 +DEF_HELPER_0(fninit, void)
  170 +DEF_HELPER_1(fbld_ST0, void, tl)
  171 +DEF_HELPER_1(fbst_ST0, void, tl)
  172 +DEF_HELPER_0(f2xm1, void)
  173 +DEF_HELPER_0(fyl2x, void)
  174 +DEF_HELPER_0(fptan, void)
  175 +DEF_HELPER_0(fpatan, void)
  176 +DEF_HELPER_0(fxtract, void)
  177 +DEF_HELPER_0(fprem1, void)
  178 +DEF_HELPER_0(fprem, void)
  179 +DEF_HELPER_0(fyl2xp1, void)
  180 +DEF_HELPER_0(fsqrt, void)
  181 +DEF_HELPER_0(fsincos, void)
  182 +DEF_HELPER_0(frndint, void)
  183 +DEF_HELPER_0(fscale, void)
  184 +DEF_HELPER_0(fsin, void)
  185 +DEF_HELPER_0(fcos, void)
  186 +DEF_HELPER_2(fstenv, void, tl, int)
  187 +DEF_HELPER_2(fldenv, void, tl, int)
  188 +DEF_HELPER_2(fsave, void, tl, int)
  189 +DEF_HELPER_2(frstor, void, tl, int)
  190 +DEF_HELPER_2(fxsave, void, tl, int)
  191 +DEF_HELPER_2(fxrstor, void, tl, int)
  192 +DEF_HELPER_1(bsf, tl, tl)
  193 +DEF_HELPER_1(bsr, tl, tl)
197 194
198 /* MMX/SSE */ 195 /* MMX/SSE */
199 196
200 -DEF_HELPER(void, helper_enter_mmx, (void))  
201 -DEF_HELPER(void, helper_emms, (void))  
202 -DEF_HELPER(void, helper_movq, (uint64_t *d, uint64_t *s)) 197 +DEF_HELPER_0(enter_mmx, void)
  198 +DEF_HELPER_0(emms, void)
  199 +DEF_HELPER_2(movq, void, ptr, ptr)
203 200
204 #define SHIFT 0 201 #define SHIFT 0
205 #include "ops_sse_header.h" 202 #include "ops_sse_header.h"
206 #define SHIFT 1 203 #define SHIFT 1
207 #include "ops_sse_header.h" 204 #include "ops_sse_header.h"
208 205
209 -DEF_HELPER(target_ulong, helper_rclb, (target_ulong t0, target_ulong t1))  
210 -DEF_HELPER(target_ulong, helper_rclw, (target_ulong t0, target_ulong t1))  
211 -DEF_HELPER(target_ulong, helper_rcll, (target_ulong t0, target_ulong t1))  
212 -DEF_HELPER(target_ulong, helper_rcrb, (target_ulong t0, target_ulong t1))  
213 -DEF_HELPER(target_ulong, helper_rcrw, (target_ulong t0, target_ulong t1))  
214 -DEF_HELPER(target_ulong, helper_rcrl, (target_ulong t0, target_ulong t1)) 206 +DEF_HELPER_2(rclb, tl, tl, tl)
  207 +DEF_HELPER_2(rclw, tl, tl, tl)
  208 +DEF_HELPER_2(rcll, tl, tl, tl)
  209 +DEF_HELPER_2(rcrb, tl, tl, tl)
  210 +DEF_HELPER_2(rcrw, tl, tl, tl)
  211 +DEF_HELPER_2(rcrl, tl, tl, tl)
215 #ifdef TARGET_X86_64 212 #ifdef TARGET_X86_64
216 -DEF_HELPER(target_ulong, helper_rclq, (target_ulong t0, target_ulong t1))  
217 -DEF_HELPER(target_ulong, helper_rcrq, (target_ulong t0, target_ulong t1)) 213 +DEF_HELPER_2(rclq, tl, tl, tl)
  214 +DEF_HELPER_2(rcrq, tl, tl, tl)
218 #endif 215 #endif
219 216
220 -#undef DEF_HELPER 217 +#include "def-helper.h"
target-i386/helper_template.h
@@ -280,7 +280,7 @@ target_ulong glue(helper_rcl, SUFFIX)(target_ulong t0, target_ulong t1) @@ -280,7 +280,7 @@ target_ulong glue(helper_rcl, SUFFIX)(target_ulong t0, target_ulong t1)
280 count = rclb_table[count]; 280 count = rclb_table[count];
281 #endif 281 #endif
282 if (count) { 282 if (count) {
283 - eflags = cc_table[CC_OP].compute_all(); 283 + eflags = helper_cc_compute_all(CC_OP);
284 t0 &= DATA_MASK; 284 t0 &= DATA_MASK;
285 src = t0; 285 src = t0;
286 res = (t0 << count) | ((target_ulong)(eflags & CC_C) << (count - 1)); 286 res = (t0 << count) | ((target_ulong)(eflags & CC_C) << (count - 1));
@@ -309,7 +309,7 @@ target_ulong glue(helper_rcr, SUFFIX)(target_ulong t0, target_ulong t1) @@ -309,7 +309,7 @@ target_ulong glue(helper_rcr, SUFFIX)(target_ulong t0, target_ulong t1)
309 count = rclb_table[count]; 309 count = rclb_table[count];
310 #endif 310 #endif
311 if (count) { 311 if (count) {
312 - eflags = cc_table[CC_OP].compute_all(); 312 + eflags = helper_cc_compute_all(CC_OP);
313 t0 &= DATA_MASK; 313 t0 &= DATA_MASK;
314 src = t0; 314 src = t0;
315 res = (t0 >> count) | ((target_ulong)(eflags & CC_C) << (DATA_BITS - count)); 315 res = (t0 >> count) | ((target_ulong)(eflags & CC_C) << (DATA_BITS - count));