I'd like to work on using MPFR to handle builtin lgamma. The lgamma
function requires setting the global int variable "signgam" in addition to
calculating the return value of lgamma. I think I see how to do grab a
handle on signgam like so:
sg = maybe_get_identifier("signgam");
if (sg)
{
sg = identifier_global_value(sg); /* Question 1 */
if (sg)
{
if (TREE_TYPE (sg) == TYPE_DECL
&& DECL_ORIGINAL_TYPE (sg) == integer_type_node)
return sg; /* Use this to set signgam. */
else
/* Question 2 */ ;
}
else
{
/* Question 3 */ ;
}
else
{
/* Question 4 */
}
I've marked above where I have questions about how to proceed.
1. Only the C-family functions have identifier_global_value. I need to
access this from the middle-end. Should I use a langhook? What should
the non-C languages default to returning? NULL? Should I punt in non-C
or just set the return value of lgamma without setting signgam? I could
also declare signgam myself.
2. I assume that if signgam is defined at global scope with something
other than int type then I punt, or should I proceed without setting
signgam?
3. If signgam is declared somehow but not at global scope, then should I
declare it myself with type int and proceed to set it? Or should I ignore
signgam but still generate the lgamma value? Or do nothing?
4. Likewise, if signgam is not declared at all, which of the three
choices from #3 should I do?
My guesses are:
1. Do nothing for non-C.
2. Punt.
3. Declare signgam and proceed.
4. Ditto.
Thanks,
--Kaveh
--
Kaveh R. Ghazi [EMAIL PROTECTED]