Печать 128-битных целых чисел (вычисленных во время выполнения) в виде строки с использованием printf в LLVM

Я пытался распечатать 128-битный результат во время выполнения, используя вызов printf в LLVM.

Я могу напечатать 32 до 64-битных целых чисел, используя строку формата "%d" в printf .

Пожалуйста, ознакомьтесь с приведенным ниже кодом, поскольку у меня возникли некоторые трудности при попытке напечатать 128-битное значение, вычисленное во время выполнения. Раздел кода, содержащий динамическое приведение к ConstantInt, никогда не выполняется, поскольку значение никогда не приводится к ConstantInt.

(Я видел этот подход на SO - LLVM возвращает постоянное целое число из Value *)

Только соответствующий раздел кода показан ниже

Value* val = e->codegen() ;

        if(!val)
        {
            return logError("Error evaluating argument to function call");
        }


        if(val->getType()->isIntegerTy() )
        {
            if(val->getType()->getIntegerBitWidth() <= 64)
            {
                tempString = tempString + "%+d,";
            }

             // Is this correct ? Doesnt seem to be executing ...
            else 
            {
                if(ConstantInt* CI = dyn_cast<ConstantInt>(val))
                {

                    // base 10 and signed
                    std::string res = CI->getValue().toString(10,true);
                    val=Builder.CreateGlobalStringPtr(res,"str");

                    tempString = tempString + "%+s,";

                }
            }

        }



        argsValueVector.push_back(val);
        ++i;

    }

    formatString = formatString + tempString + "\n" ;



        // every string is declared as a "global constant" at the top of the module.
        Value* val=Builder.CreateGlobalStringPtr(formatString,"str");

        std::vector<Value*>::iterator it = argsValueVector.begin();

        argsValueVector.insert(it,val);
    }

    return Builder.CreateCall(F,argsValueVector,"calltmp") ;

}

0 ответов

Другие вопросы по тегам