Hi Ian,

2012/4/22 Ian Lance Taylor <i...@google.com>:
> Feng LI <nemoking...@gmail.com> writes:
>
>> I generate builtin function directly in the middle end and and expand
>> the builtin function in the x86 backend to certain set of
>> instructions.
>>
>> I've defined x86 builtin functions in the gcc backend like this:
>>
>> { OPTION_MASK_ISA_TSTAR | OPTION_MASK_ISA_64BIT,
>> CODE_FOR_tstar_create, "__builtin_ia32_tcreate", IX86_BUILTIN_TCREATE,
>> UNKNOWN, (int) PVOID_FTYPE_UINT_UINT },
>> and corresponding define_insn in .md file.
>>
>> This works with .c file as a input, and it'll generate the assemble
>> code I expect.
>>
>> But if I try to generate the builtin functions directly in GCC middle
>> end, by using DEF_BUILTIN
>>
>>   DEF_BUILTIN (BUILTIN_TCREATE, "__builtin_ia32_tcreate", BUILT_IN_MD,
>>                          BT_FN_PTR_SIZE_SIZE, BT_FN_PTR_SIZE_SIZE,    \
>>                          false, true, true, ATTRS, false, flags)
>
> It doesn't make sense to add a x86-specific builtin function to
> builtins.def.  So I'm not sure what you are trying to accomplish with
> this change.
>
>> #0  fancy_abort (file=0xb45b0f "../../gcc/c-decl.c", line=3569,
>> function=0xb45a10 "c_builtin_function") at ../../gcc/diagnostic.c:892
>> #1  0x000000000049634f in c_builtin_function (decl=0x7ffff7fb4500) at
>> ../../gcc/c-decl.c:3569
>
> This abort is
>
>  /* Should never be called on a symbol with a preexisting meaning.  */
>  gcc_assert (!I_SYMBOL_BINDING (id));
>
> That makes it sound like you are defining the function in both the x86
> backend and also in builtins.def.  Don't do that.

Yes, you are right. But how could I reference to a backend defined builtin
function in the middle end (I need to generate the builtin function in the
middle end and expand it in x86 backend)?

Thanks,
Feng

>
> Ian

Reply via email to