On 11.08.2011, at 14:28, Avi Kivity wrote: > On 08/11/2011 02:40 PM, Alexander Graf wrote: >> On 11.08.2011, at 13:24, malc wrote: >> >> > On Thu, 11 Aug 2011, Alexander Graf wrote: >> > >> >> While compiling current HEAD on a ppc64 box, I was confronted with the >> >> following compile errors: >> >> >> >> tcg/optimize.c: In function ?tcg_constant_folding?: >> >> tcg/optimize.c:546: error: ?INDEX_op_not_i32? undeclared (first use in >> >> this function) >> >> tcg/optimize.c:546: error: (Each undeclared identifier is reported only >> >> once >> >> tcg/optimize.c:546: error: for each function it appears in.) >> >> tcg/optimize.c:546: error: ?INDEX_op_not_i64? undeclared (first use in >> >> this function) >> >> tcg/optimize.c:573: error: ?INDEX_op_ext32u_i64? undeclared (first use >> >> in this function) >> >> make[1]: *** [tcg/optimize.o] Error 1 >> >> >> >> Obviously, the optimize.c tries to use TCG opcode constants that are >> >> optional >> >> and thus not defined in some targets, such as ppc64. >> >> >> >> This patch guards them with the proper #ifdefs, so compilation works >> >> again. >> >> >> >> Signed-off-by: Alexander Graf<ag...@suse.de> >> >> --- >> >> tcg/optimize.c | 8 +++++++- >> >> 1 files changed, 7 insertions(+), 1 deletions(-) >> >> >> >> diff --git a/tcg/optimize.c b/tcg/optimize.c >> >> index 7eb5eb1..7b4954c 100644 >> >> --- a/tcg/optimize.c >> >> +++ b/tcg/optimize.c >> >> @@ -543,7 +543,11 @@ static TCGArg *tcg_constant_folding(TCGContext *s, >> >> uint16_t *tcg_opc_ptr, >> >> gen_args += 2; >> >> args += 2; >> >> break; >> >> +#if ((TCG_TARGET_REG_BITS == 32)&& defined(TCG_TARGET_HAS_not_i32)) || >> >> \ >> >> + ((TCG_TARGET_REG_BITS == 64)&& defined(TCG_TARGET_HAS_not_i32)&& \ >> >> + defined(TCG_TARGET_HAS_not_i64)) >> >> CASE_OP_32_64(not): >> >> +#endif >> >> #ifdef TCG_TARGET_HAS_ext8s_i32 >> >> case INDEX_op_ext8s_i32: >> >> #endif >> >> @@ -568,8 +572,10 @@ static TCGArg *tcg_constant_folding(TCGContext *s, >> >> uint16_t *tcg_opc_ptr, >> >> #ifdef TCG_TARGET_HAS_ext16u_i64 >> >> case INDEX_op_ext16u_i64: >> >> #endif >> >> -#if TCG_TARGET_REG_BITS == 64 >> >> +#if (TCG_TARGET_REG_BITS == 64)&& defined(TCG_TARGET_HAS_ext32s_i64) >> >> case INDEX_op_ext32s_i64: >> >> +#endif >> >> +#if (TCG_TARGET_REG_BITS == 64)&& defined(TCG_TARGET_HAS_ext32u_i64) >> >> case INDEX_op_ext32u_i64: >> >> #endif >> >> if (temps[args[1]].state == TCG_TEMP_CONST) { >> >> >> > >> > Or (not even compile tested): >> >> Sure, but then the next target would pop up with optionals not implemented. >> The real alternative would be to make these ops non-optional :) >> > > Or to have automatic generation of the optionals based on the primitives, if > the optionals are not present.
That's what's happening in the background already, no? The line is towards tcg users though, not it tcg internal code. Alex