本文整理汇总了C++中Target类的典型用法代码示例。如果您正苦于以下问题:C++ Target类的具体用法?C++ Target怎么用?C++ Target使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Target类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: platModifyRing
/// @brief Platform-level implementation called by modifyRing()
ReturnCode platModifyRing(const Target<TARGET_TYPE_ALL>& i_target,
const scanRingId_t i_address,
const variable_buffer& i_data,
const ChipOpModifyMode i_modifyMode,
const RingMode i_ringMode)
{
FAPI_DBG(ENTER_MRK "platModifyRing");
// TODO RTC:152489 - story to finish this modifyRing
FAPI_ERR("platModifyRing: not supported yet");
assert(0,"platModifyRing not supported yet.");
ReturnCode l_rc;
errlHndl_t l_err = NULL;
variable_buffer l_current_data(i_data);
// Note: Trace is placed here in plat code because PPE doesn't support
// trace in common fapi2_hw_access.H
bool l_traceit = platIsScanTraceEnabled();
// Grab the name of the target
TARGETING::ATTR_FAPI_NAME_type l_targName = {0};
fapi2::toString(i_target, l_targName, sizeof(l_targName));
do
{
// Extract the component pointer
TARGETING::Target* l_target =
reinterpret_cast<TARGETING::Target*>(i_target.get());
// --------------------
// Read current value
// --------------------
uint64_t l_ringLen = l_current_data.getBitLength();
uint64_t l_flag = platGetDDScanMode(i_ringMode);
size_t l_size = l_current_data.getLength<uint8_t>();
l_err = deviceRead(l_target,
l_current_data.pointer(),
l_size,
DEVICE_SCAN_ADDRESS(i_address, l_ringLen, l_flag));
if (l_err)
{
FAPI_ERR("platModifyRing: deviceRead returns error!");
FAPI_ERR("platModifyRing failed - Target %s, Addr %.16llX",
l_targName, i_address);
// Add the error log pointer as data to the ReturnCode
l_rc.setPlatDataPtr(reinterpret_cast<void *> (l_err));
// break out if read fails
break;
}
// ----------------------
// Applying modification
// ----------------------
/* TODO-RTC:151261 - re-enable when variable_buffer operations supported
if (fapi2::CHIP_OP_MODIFY_MODE_OR == i_modifyMode)
{
l_current_data |= i_data;
}
else if (fapi2::CHIP_OP_MODIFY_MODE_AND == i_modifyMode)
{
l_current_data &= i_data;
}
else
{
l_current_data ^= i_data;
} */
// -------------------------
// Write back updated data
// -------------------------
l_err = deviceWrite(l_target,
l_current_data.pointer(),
l_size,
DEVICE_SCAN_ADDRESS(i_address, l_ringLen, l_flag));
if (l_err)
{
FAPI_ERR("platModifyRing: deviceWrite returns error!");
FAPI_ERR("platModifyRing failed - Target %s, Addr %.16llX",
l_targName, i_address);
// Add the error log pointer as data to the ReturnCode
l_rc.setPlatDataPtr(reinterpret_cast<void *> (l_err));
break;
}
} while (0);
if (l_traceit)
{
uint64_t l_data = l_current_data.get<uint64_t>();
FAPI_SCAN("TRACE : MODIFYRING : %s : %.16llX %.16llX",
l_targName,
i_address,
l_data);
}
FAPI_DBG(EXIT_MRK "platModifyRing");
//.........这里部分代码省略.........
开发者ID:wghoffa,项目名称:hostboot,代码行数:101,代码来源:plat_hw_access.C
示例2: llvm_module_ap
Error
ClangExpressionParser::PrepareForExecution (lldb::addr_t &func_addr,
lldb::addr_t &func_end,
std::shared_ptr<IRExecutionUnit> &execution_unit_sp,
ExecutionContext &exe_ctx,
bool &can_interpret,
ExecutionPolicy execution_policy)
{
func_addr = LLDB_INVALID_ADDRESS;
func_end = LLDB_INVALID_ADDRESS;
Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_EXPRESSIONS));
Error err;
std::unique_ptr<llvm::Module> llvm_module_ap (m_code_generator->ReleaseModule());
if (!llvm_module_ap.get())
{
err.SetErrorToGenericError();
err.SetErrorString("IR doesn't contain a module");
return err;
}
// Find the actual name of the function (it's often mangled somehow)
ConstString function_name;
if (!FindFunctionInModule(function_name, llvm_module_ap.get(), m_expr.FunctionName()))
{
err.SetErrorToGenericError();
err.SetErrorStringWithFormat("Couldn't find %s() in the module", m_expr.FunctionName());
return err;
}
else
{
if (log)
log->Printf("Found function %s for %s", function_name.AsCString(), m_expr.FunctionName());
}
execution_unit_sp.reset(new IRExecutionUnit (m_llvm_context, // handed off here
llvm_module_ap, // handed off here
function_name,
exe_ctx.GetTargetSP(),
m_compiler->getTargetOpts().Features));
ClangExpressionDeclMap *decl_map = m_expr.DeclMap(); // result can be NULL
if (decl_map)
{
Stream *error_stream = NULL;
Target *target = exe_ctx.GetTargetPtr();
if (target)
error_stream = target->GetDebugger().GetErrorFile().get();
IRForTarget ir_for_target(decl_map,
m_expr.NeedsVariableResolution(),
*execution_unit_sp,
error_stream,
function_name.AsCString());
bool ir_can_run = ir_for_target.runOnModule(*execution_unit_sp->GetModule());
Error interpret_error;
can_interpret = IRInterpreter::CanInterpret(*execution_unit_sp->GetModule(), *execution_unit_sp->GetFunction(), interpret_error);
Process *process = exe_ctx.GetProcessPtr();
if (!ir_can_run)
{
err.SetErrorString("The expression could not be prepared to run in the target");
return err;
}
if (!can_interpret && execution_policy == eExecutionPolicyNever)
{
err.SetErrorStringWithFormat("Can't run the expression locally: %s", interpret_error.AsCString());
return err;
}
if (!process && execution_policy == eExecutionPolicyAlways)
{
err.SetErrorString("Expression needed to run in the target, but the target can't be run");
return err;
}
if (execution_policy == eExecutionPolicyAlways || !can_interpret)
{
if (m_expr.NeedsValidation() && process)
{
if (!process->GetDynamicCheckers())
{
DynamicCheckerFunctions *dynamic_checkers = new DynamicCheckerFunctions();
StreamString install_errors;
if (!dynamic_checkers->Install(install_errors, exe_ctx))
{
if (install_errors.GetString().empty())
err.SetErrorString ("couldn't install checkers, unknown error");
//.........这里部分代码省略.........
开发者ID:jashank,项目名称:freebsd,代码行数:101,代码来源:ClangExpressionParser.cpp
示例3: SetValueIsValid
bool
ValueObjectDynamicValue::UpdateValue ()
{
SetValueIsValid (false);
m_error.Clear();
if (!m_parent->UpdateValueIfNeeded(false))
{
// The dynamic value failed to get an error, pass the error along
if (m_error.Success() && m_parent->GetError().Fail())
m_error = m_parent->GetError();
return false;
}
// Setting our type_sp to NULL will route everything back through our
// parent which is equivalent to not using dynamic values.
if (m_use_dynamic == lldb::eNoDynamicValues)
{
m_dynamic_type_info.Clear();
return true;
}
ExecutionContext exe_ctx (GetExecutionContextRef());
Target *target = exe_ctx.GetTargetPtr();
if (target)
{
m_data.SetByteOrder(target->GetArchitecture().GetByteOrder());
m_data.SetAddressByteSize(target->GetArchitecture().GetAddressByteSize());
}
// First make sure our Type and/or Address haven't changed:
Process *process = exe_ctx.GetProcessPtr();
if (!process)
return false;
TypeAndOrName class_type_or_name;
Address dynamic_address;
bool found_dynamic_type = false;
lldb::LanguageType known_type = m_parent->GetObjectRuntimeLanguage();
if (known_type != lldb::eLanguageTypeUnknown && known_type != lldb::eLanguageTypeC)
{
LanguageRuntime *runtime = process->GetLanguageRuntime (known_type);
if (runtime)
found_dynamic_type = runtime->GetDynamicTypeAndAddress (*m_parent, m_use_dynamic, class_type_or_name, dynamic_address);
}
else
{
LanguageRuntime *cpp_runtime = process->GetLanguageRuntime (lldb::eLanguageTypeC_plus_plus);
if (cpp_runtime)
found_dynamic_type = cpp_runtime->GetDynamicTypeAndAddress (*m_parent, m_use_dynamic, class_type_or_name, dynamic_address);
if (!found_dynamic_type)
{
LanguageRuntime *objc_runtime = process->GetLanguageRuntime (lldb::eLanguageTypeObjC);
if (objc_runtime)
found_dynamic_type = objc_runtime->GetDynamicTypeAndAddress (*m_parent, m_use_dynamic, class_type_or_name, dynamic_address);
}
}
// Getting the dynamic value may have run the program a bit, and so marked us as needing updating, but we really
// don't...
m_update_point.SetUpdated();
if (found_dynamic_type)
{
if (class_type_or_name.HasType())
{
m_type_impl = TypeImpl(m_parent->GetClangType(),FixupTypeAndOrName(class_type_or_name, *m_parent).GetClangASTType());
}
else
{
m_type_impl.Clear();
}
}
else
{
m_type_impl.Clear();
}
// If we don't have a dynamic type, then make ourselves just a echo of our parent.
// Or we could return false, and make ourselves an echo of our parent?
if (!found_dynamic_type)
{
if (m_dynamic_type_info)
SetValueDidChange(true);
ClearDynamicTypeInformation();
m_dynamic_type_info.Clear();
m_value = m_parent->GetValue();
m_error = m_value.GetValueAsData (&exe_ctx, m_data, 0, GetModule().get());
return m_error.Success();
}
Value old_value(m_value);
Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TYPES));
bool has_changed_type = false;
//.........这里部分代码省略.........
开发者ID:BlueRiverInteractive,项目名称:lldb,代码行数:101,代码来源:ValueObjectDynamicValue.cpp
示例4: Top
void
MoonEGLContext::SyncDrawable ()
{
Target *target = Top ()->GetTarget ();
Target *cairo = target->GetCairoTarget ();
MoonSurface *ms;
Rect r = target->GetData (&ms);
MoonEGLSurface *dst = (MoonEGLSurface *) ms;
// clear target contents
if (!target->GetInit ()) {
if (!dst->GetEGLDisplay ())
GLContext::SetFramebuffer ();
glClearColor (0.0, 0.0, 0.0, 0.0);
glClear (GL_COLOR_BUFFER_BIT);
// mark target contents as initialized
target->SetInit (ms);
}
// initialize target contents with surface
if (target->GetInit () != ms) {
MoonEGLSurface *src = (MoonEGLSurface *) target->GetInit ();
GLuint texture0 = src->Texture ();
GLuint program = GetProjectProgram (1.0, 0);
GLsizei width0 = src->Width ();
GLsizei height0 = src->Height ();
if (!dst->GetEGLDisplay ())
GLContext::SetFramebuffer ();
SetViewport ();
glUseProgram (program);
SetupVertexData (NULL, 0, 0, width0, height0);
SetupTexCoordData ();
glVertexAttribPointer (0, 4,
GL_FLOAT, GL_FALSE, 0,
vertices);
glVertexAttribPointer (1, 4,
GL_FLOAT, GL_FALSE, 0,
texcoords);
glBindTexture (GL_TEXTURE_2D, texture0);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
GL_NEAREST);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_NEAREST);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
GL_CLAMP_TO_EDGE);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,
GL_CLAMP_TO_EDGE);
glUniform1i (glGetUniformLocation (program, "sampler0"), 0);
glEnableVertexAttribArray (0);
glEnableVertexAttribArray (1);
glDrawArrays (GL_TRIANGLE_FAN, 0, 4);
glDisableVertexAttribArray (1);
glDisableVertexAttribArray (0);
glBindTexture (GL_TEXTURE_2D, 0);
glUseProgram (0);
glBindFramebuffer (GL_FRAMEBUFFER, 0);
// mark target contents as initialized
target->SetInit (ms);
}
// render any cairo contents onto target
if (cairo) {
MoonSurface *mSrc;
Rect rSrc = cairo->GetData (&mSrc);
MoonEGLSurface *src = (MoonEGLSurface *) mSrc;
GLuint texture0 = src->Texture ();
GLuint program = GetProjectProgram (1.0, 0);
GLsizei width0 = src->Width ();
GLsizei height0 = src->Height ();
if (!dst->GetEGLDisplay ())
GLContext::SetFramebuffer ();
SetViewport ();
glUseProgram (program);
SetupVertexData (NULL, rSrc.x - r.x, rSrc.y - r.y, width0, height0);
SetupTexCoordData ();
glVertexAttribPointer (0, 4,
GL_FLOAT, GL_FALSE, 0,
vertices);
glVertexAttribPointer (1, 4,
GL_FLOAT, GL_FALSE, 0,
//.........这里部分代码省略.........
开发者ID:499940913,项目名称:moon,代码行数:101,代码来源:context-egl.cpp
示例5: main
int main(int argc, char **argv) {
Target target = get_jit_target_from_environment();
// We want to test all possible data flows for a buffer:
// input -> host
// input -> dev
// host -> host
// host -> dev
// dev -> host
// dev -> dev
// dev -> output
// host -> output
// We can't really test the last two in the same routine, so we'll
// run two routines.
{
// Pipeline 1 will do input -> host -> dev -> host -> output
ImageParam in(Int(32), 1);
Func f, g, out;
Var x, xi;
f(x) = in(x) + 1;
g(x) = f(x) * 2;
out(x) = g(x) + 3;
f.compute_root();
if (target.has_gpu_feature()) {
g.compute_root().gpu_tile(x, xi, 16);
} else if (target.features_any_of({Target::HVX_64, Target::HVX_128})) {
g.compute_root().hexagon();
}
out.compute_root();
Buffer<int> input(1024);
lambda(x, x * 17 + 83).realize(input);
in.set(input);
Buffer<int> output1(1024);
out.realize(output1);
output1.copy_to_host();
for (int x = 0; x < 1024; x++) {
int correct = (input(x) + 1) * 2 + 3;
if (output1(x) != correct) {
printf("output1(%d) = %d instead of %d\n", x, output1(x), correct);
return -1;
}
}
}
{
// Pipeline 2 will do input -> dev -> dev -> output
ImageParam in(Int(32), 1);
Func f, out;
Var x, xi;
f(x) = in(x) + 1;
out(x) = f(x) * 2;
if (target.has_gpu_feature()) {
f.compute_root().gpu_tile(x, xi, 16);
out.compute_root().gpu_tile(x, xi, 16);
} else if (target.features_any_of({Target::HVX_64, Target::HVX_128})) {
f.compute_root().hexagon();
out.compute_root().hexagon();
}
Buffer<int> input(1024);
lambda(x, x * 17 + 83).realize(input);
in.set(input);
Buffer<int> output2(1024);
out.realize(output2);
output2.copy_to_host();
for (int x = 0; x < 1024; x++) {
int correct = (input(x) + 1) * 2;
if (output2(x) != correct) {
printf("output2(%d) = %d instead of %d\n", x, output2(x), correct);
return -1;
}
}
}
printf("Success!\n");
return 0;
}
开发者ID:adityaatluri,项目名称:Halide,代码行数:90,代码来源:gpu_data_flows.cpp
示例6: TargetMachine
LLVMTargetMachine::LLVMTargetMachine(const Target &T,
const std::string &Triple)
: TargetMachine(T), TargetTriple(Triple) {
AsmInfo = T.createAsmInfo(TargetTriple);
}
开发者ID:jhoush,项目名称:dist-llvm,代码行数:5,代码来源:LLVMTargetMachine.cpp
示例7: assert
bool
AppleObjCRuntime::GetObjectDescription (Stream &strm, Value &value, ExecutionContextScope *exe_scope)
{
if (!m_read_objc_library)
return false;
ExecutionContext exe_ctx;
exe_scope->CalculateExecutionContext(exe_ctx);
Process *process = exe_ctx.GetProcessPtr();
if (!process)
return false;
// We need other parts of the exe_ctx, but the processes have to match.
assert (m_process == process);
// Get the function address for the print function.
const Address *function_address = GetPrintForDebuggerAddr();
if (!function_address)
return false;
Target *target = exe_ctx.GetTargetPtr();
ClangASTType clang_type = value.GetClangType();
if (clang_type)
{
if (!clang_type.IsObjCObjectPointerType())
{
strm.Printf ("Value doesn't point to an ObjC object.\n");
return false;
}
}
else
{
// If it is not a pointer, see if we can make it into a pointer.
ClangASTContext *ast_context = target->GetScratchClangASTContext();
ClangASTType opaque_type = ast_context->GetBasicType(eBasicTypeObjCID);
if (!opaque_type)
opaque_type = ast_context->GetBasicType(eBasicTypeVoid).GetPointerType();
//value.SetContext(Value::eContextTypeClangType, opaque_type_ptr);
value.SetClangType (opaque_type);
}
ValueList arg_value_list;
arg_value_list.PushValue(value);
// This is the return value:
ClangASTContext *ast_context = target->GetScratchClangASTContext();
ClangASTType return_clang_type = ast_context->GetCStringType(true);
Value ret;
// ret.SetContext(Value::eContextTypeClangType, return_clang_type);
ret.SetClangType (return_clang_type);
if (exe_ctx.GetFramePtr() == NULL)
{
Thread *thread = exe_ctx.GetThreadPtr();
if (thread == NULL)
{
exe_ctx.SetThreadSP(process->GetThreadList().GetSelectedThread());
thread = exe_ctx.GetThreadPtr();
}
if (thread)
{
exe_ctx.SetFrameSP(thread->GetSelectedFrame());
}
}
// Now we're ready to call the function:
ClangFunction func (*exe_ctx.GetBestExecutionContextScope(),
return_clang_type,
*function_address,
arg_value_list);
StreamString error_stream;
lldb::addr_t wrapper_struct_addr = LLDB_INVALID_ADDRESS;
func.InsertFunction(exe_ctx, wrapper_struct_addr, error_stream);
EvaluateExpressionOptions options;
options.SetUnwindOnError(true);
options.SetTryAllThreads(true);
options.SetStopOthers(true);
options.SetIgnoreBreakpoints(true);
options.SetTimeoutUsec(PO_FUNCTION_TIMEOUT_USEC);
ExecutionResults results = func.ExecuteFunction (exe_ctx,
&wrapper_struct_addr,
options,
error_stream,
ret);
if (results != eExecutionCompleted)
{
strm.Printf("Error evaluating Print Object function: %d.\n", results);
return false;
}
addr_t result_ptr = ret.GetScalar().ULongLong(LLDB_INVALID_ADDRESS);
char buf[512];
size_t cstr_len = 0;
size_t full_buffer_len = sizeof (buf) - 1;
//.........这里部分代码省略.........
开发者ID:VanirLLVM,项目名称:toolchain_lldb,代码行数:101,代码来源:AppleObjCRuntime.cpp
示例8: GetID
void
BreakpointLocation::GetDescription (Stream *s, lldb::DescriptionLevel level)
{
SymbolContext sc;
s->Indent();
BreakpointID::GetCanonicalReference(s, m_owner.GetID(), GetID());
if (level == lldb::eDescriptionLevelBrief)
return;
s->PutCString(": ");
if (level == lldb::eDescriptionLevelVerbose)
s->IndentMore();
if (m_address.IsSectionOffset())
{
m_address.CalculateSymbolContext(&sc);
if (level == lldb::eDescriptionLevelFull)
{
s->PutCString("where = ");
sc.DumpStopContext (s, m_owner.GetTarget().GetProcessSP().get(), m_address, false, true, false);
}
else
{
if (sc.module_sp)
{
s->EOL();
s->Indent("module = ");
sc.module_sp->GetFileSpec().Dump (s);
}
if (sc.comp_unit != NULL)
{
s->EOL();
s->Indent("compile unit = ");
static_cast<FileSpec*>(sc.comp_unit)->GetFilename().Dump (s);
if (sc.function != NULL)
{
s->EOL();
s->Indent("function = ");
s->PutCString (sc.function->GetMangled().GetName().AsCString("<unknown>"));
}
if (sc.line_entry.line > 0)
{
s->EOL();
s->Indent("location = ");
sc.line_entry.DumpStopContext (s, true);
}
}
else
{
// If we don't have a comp unit, see if we have a symbol we can print.
if (sc.symbol)
{
s->EOL();
s->Indent("symbol = ");
s->PutCString(sc.symbol->GetMangled().GetName().AsCString("<unknown>"));
}
}
}
}
if (level == lldb::eDescriptionLevelVerbose)
{
s->EOL();
s->Indent();
}
s->Printf ("%saddress = ", (level == lldb::eDescriptionLevelFull && m_address.IsSectionOffset()) ? ", " : "");
ExecutionContextScope *exe_scope = NULL;
Target *target = &m_owner.GetTarget();
if (target)
exe_scope = target->GetProcessSP().get();
if (exe_scope == NULL)
exe_scope = target;
m_address.Dump(s, exe_scope, Address::DumpStyleLoadAddress, Address::DumpStyleModuleWithFileAddress);
if (level == lldb::eDescriptionLevelVerbose)
{
s->EOL();
s->Indent();
s->Printf("resolved = %s\n", IsResolved() ? "true" : "false");
s->Indent();
s->Printf ("hit count = %-4u\n", GetHitCount());
if (m_options_ap.get())
{
s->Indent();
m_options_ap->GetDescription (s, level);
s->EOL();
}
s->IndentLess();
}
else
//.........这里部分代码省略.........
开发者ID:fbsd,项目名称:old_lldb,代码行数:101,代码来源:BreakpointLocation.cpp
示例9: InstallContext
bool
ClangUserExpression::Parse (Stream &error_stream,
ExecutionContext &exe_ctx,
lldb_private::ExecutionPolicy execution_policy,
bool keep_result_in_memory,
bool generate_debug_info)
{
Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_EXPRESSIONS));
Error err;
InstallContext(exe_ctx);
if (Target *target = exe_ctx.GetTargetPtr())
{
if (PersistentExpressionState *persistent_state = target->GetPersistentExpressionStateForLanguage(lldb::eLanguageTypeC))
{
m_result_delegate.RegisterPersistentState(persistent_state);
}
else
{
error_stream.PutCString ("error: couldn't start parsing (no persistent data)");
return false;
}
}
else
{
error_stream.PutCString ("error: couldn't start parsing (no target)");
return false;
}
ScanContext(exe_ctx, err);
if (!err.Success())
{
error_stream.Printf("warning: %s\n", err.AsCString());
}
StreamString m_transformed_stream;
////////////////////////////////////
// Generate the expression
//
ApplyObjcCastHack(m_expr_text);
//ApplyUnicharHack(m_expr_text);
std::string prefix = m_expr_prefix;
if (ClangModulesDeclVendor *decl_vendor = m_target->GetClangModulesDeclVendor())
{
const ClangModulesDeclVendor::ModuleVector &hand_imported_modules = llvm::cast<ClangPersistentVariables>(m_target->GetPersistentExpressionStateForLanguage(lldb::eLanguageTypeC))->GetHandLoadedClangModules();
ClangModulesDeclVendor::ModuleVector modules_for_macros;
for (ClangModulesDeclVendor::ModuleID module : hand_imported_modules)
{
modules_for_macros.push_back(module);
}
if (m_target->GetEnableAutoImportClangModules())
{
if (StackFrame *frame = exe_ctx.GetFramePtr())
{
if (Block *block = frame->GetFrameBlock())
{
SymbolContext sc;
block->CalculateSymbolContext(&sc);
if (sc.comp_unit)
{
StreamString error_stream;
decl_vendor->AddModulesForCompileUnit(*sc.comp_unit, modules_for_macros, error_stream);
}
}
}
}
}
std::unique_ptr<ExpressionSourceCode> source_code (ExpressionSourceCode::CreateWrapped(prefix.c_str(), m_expr_text.c_str()));
lldb::LanguageType lang_type;
if (m_in_cplusplus_method)
lang_type = lldb::eLanguageTypeC_plus_plus;
else if (m_in_objectivec_method)
lang_type = lldb::eLanguageTypeObjC;
else
lang_type = lldb::eLanguageTypeC;
if (!source_code->GetText(m_transformed_text, lang_type, m_const_object, m_in_static_method, exe_ctx))
{
error_stream.PutCString ("error: couldn't construct expression body");
return false;
}
if (log)
log->Printf("Parsing the following code:\n%s", m_transformed_text.c_str());
//.........这里部分代码省略.........
开发者ID:RichardsonAlex,项目名称:lldb,代码行数:101,代码来源:ClangUserExpression.cpp
示例10: switch
bool CFPatch::apply(codeGen &gen, CodeBuffer *buf) {
if (needsTOCUpdate()) {
relocation_cerr << "\t\t\t isSpecialCase..." << endl;
gen.setFunction(const_cast<func_instance *>(func));
if (!handleTOCUpdate(gen)) {
relocation_cerr << "TOC special case handling in PPC64 failed" << endl;
return false;
}
return true;
}
// Question: are we doing an inter-module static control transfer?
// If so, things get... complicated
if (isPLT(gen)) {
relocation_cerr << "\t\t\t isPLT..." << endl;
if (!applyPLT(gen, buf)) {
relocation_cerr << "PLT special case handling in PPC64" << endl;
return false;
}
return true;
}
// Otherwise this is a classic, and therefore easy.
int targetLabel = target->label(buf);
Address targetAddr = buf->predictedAddr(targetLabel);
relocation_cerr << "\t\t CFPatch::apply, type " << type << ", origAddr " << hex << origAddr_
<< ", and label " << dec << targetLabel << endl;
if (orig_insn.isValid()) {
relocation_cerr << "\t\t\t Currently at " << hex << gen.currAddr() << " and targeting predicted " << targetAddr << dec << endl;
switch(type) {
case CFPatch::Jump: {
relocation_cerr << "\t\t\t Generating CFPatch::Jump from "
<< hex << gen.currAddr() << " to " << targetAddr << dec << endl;
if (!insnCodeGen::modifyJump(targetAddr, *ugly_insn, gen)) {
relocation_cerr << "modifyJump failed, ret false" << endl;
return false;
}
return true;
}
case CFPatch::JCC: {
relocation_cerr << "\t\t\t Generating CFPatch::JCC from "
<< hex << gen.currAddr() << " to " << targetAddr << dec << endl;
if (!insnCodeGen::modifyJcc(targetAddr, *ugly_insn, gen)) {
relocation_cerr << "modifyJcc failed, ret false" << endl;
return false;
}
return true;
}
case CFPatch::Call: {
// Special handling for function call replacement:
//
// Here we are certain that we are dealing with
// an intra-module call. For PIE code, the global entry of
// the callee will use R12 to set up R2. Since we do not
// set R12 to be the global entry, we should use the local entry
if (target->type() == TargetInt::BlockTarget) {
Target<block_instance *> *t = static_cast<Target<block_instance *> *>(target);
block_instance *tb = t->t();
func_instance *callee = tb->entryOfFunc();
if (callee->ifunc()->containsPowerPreamble() && callee->addr() == targetAddr) targetAddr += 8;
}
if (!insnCodeGen::modifyCall(targetAddr, *ugly_insn, gen)) {
relocation_cerr << "modifyCall failed, ret false" << endl;
return false;
}
return true;
}
case CFPatch::Data: {
if (!insnCodeGen::modifyData(targetAddr, *ugly_insn, gen)) {
relocation_cerr << "modifyData failed, ret false" << endl;
return false;
}
return true;
}
}
}
else {
switch(type) {
case CFPatch::Jump:
insnCodeGen::generateBranch(gen, gen.currAddr(), targetAddr);
break;
case CFPatch::Call:
insnCodeGen::generateCall(gen, gen.currAddr(), targetAddr);
break;
default:
assert(0);
}
}
return true;
}
开发者ID:dyninst,项目名称:dyninst,代码行数:95,代码来源:CFWidget-ppc.C
示例11: main
int main(int argc, char **argv) {
if (1) {
// Test a tuple reduction on the gpu
Func f;
Var x, y;
f(x, y) = Tuple(x + y, x - y);
// Updates to a reduction are atomic.
f(x, y) = Tuple(f(x, y)[1]*2, f(x, y)[0]*2);
// now equals ((x - y)*2, (x + y)*2)
Target target = get_jit_target_from_environment();
if (target.has_gpu_feature()) {
f.gpu_tile(x, y, 16, 16, GPU_DEFAULT);
f.update().gpu_tile(x, y, 16, 16, GPU_DEFAULT);
}
Realization result = f.realize(1024, 1024);
Image<int> a = result[0], b = result[1];
for (int y = 0; y < a.height(); y++) {
for (int x = 0; x < a.width(); x++) {
int correct_a = (x - y)*2;
int correct_b = (x + y)*2;
if (a(x, y) != correct_a || b(x, y) != correct_b) {
printf("result(%d, %d) = (%d, %d) instead of (%d, %d)\n",
x, y, a(x, y), b(x, y), correct_a, correct_b);
return -1;
}
}
}
}
if (1) {
// Now test one that alternates between cpu and gpu per update step
Func f;
Var x, y;
f(x, y) = Tuple(x + y, x - y);
for (size_t i = 0; i < 10; i++) {
// Swap the tuple elements and increment both
f(x, y) = Tuple(f(x, y)[1] + 1, f(x, y)[0] + 1);
}
// Schedule the pure step and the odd update steps on the gpu
f.gpu_tile(x, y, 16, 16, GPU_DEFAULT);
for (int i = 0; i < 10; i ++) {
if (i & 1) {
f.update(i).gpu_tile(x, y, 16, 16, GPU_DEFAULT);
} else {
f.update(i);
}
}
Realization result = f.realize(1024, 1024);
Image<int> a = result[0], b = result[1];
for (int y = 0; y < a.height(); y++) {
for (int x = 0; x < a.width(); x++) {
int correct_a = (x + y) + 10;
int correct_b = (x - y) + 10;
if (a(x, y) != correct_a || b(x, y) != correct_b) {
printf("result(%d, %d) = (%d, %d) instead of (%d, %d)\n",
x, y, a(x, y), b(x, y), correct_a, correct_b);
return -1;
}
}
}
}
if (1) {
// Same as above, but switches which steps are gpu and cpu
Func f;
Var x, y;
f(x, y) = Tuple(x + y, x - y);
for (size_t i = 0; i < 10; i++) {
// Swap the tuple elements and increment both
f(x, y) = Tuple(f(x, y)[1] + 1, f(x, y)[0] + 1);
}
// Schedule the even update steps on the gpu
for (int i = 0; i < 10; i ++) {
if (i & 1) {
f.update(i).gpu_tile(x, y, 16, 16, GPU_DEFAULT);
} else {
f.update(i);
}
}
Realization result = f.realize(1024, 1024);
Image<int> a = result[0], b = result[1];
//.........这里部分代码省略.........
开发者ID:BlastarIndia,项目名称:Halide,代码行数:101,代码来源:tuple_reduction.cpp
示例12: Install
//------------------------------------------------------------------
/// Install the utility function into a process
///
/// @param[in] diagnostic_manager
/// A diagnostic manager to report errors and warnings to.
///
/// @param[in] exe_ctx
/// The execution context to install the utility function to.
///
/// @return
/// True on success (no errors); false otherwise.
//------------------------------------------------------------------
bool ClangUtilityFunction::Install(DiagnosticManager &diagnostic_manager,
ExecutionContext &exe_ctx) {
if (m_jit_start_addr != LLDB_INVALID_ADDRESS) {
diagnostic_manager.PutCString(eDiagnosticSeverityWarning,
"already installed");
return false;
}
////////////////////////////////////
// Set up the target and compiler
//
Target *target = exe_ctx.GetTargetPtr();
if (!target) {
diagnostic_manager.PutCString(eDiagnosticSeverityError, "invalid target");
return false;
}
Process *process = exe_ctx.GetProcessPtr();
if (!process) {
diagnostic_manager.PutCString(eDiagnosticSeverityError, "invalid process");
return false;
}
//////////////////////////
// Parse the expression
//
bool keep_result_in_memory = false;
ResetDeclMap(exe_ctx, keep_result_in_memory);
if (!DeclMap()->WillParse(exe_ctx, NULL)) {
diagnostic_manager.PutCString(
eDiagnosticSeverityError,
"current process state is unsuitable for expression parsing");
return false;
}
const bool generate_debug_info = true;
ClangExpressionParser parser(exe_ctx.GetBestExecutionContextScope(), *this,
generate_debug_info);
unsigned num_errors = parser.Parse(diagnostic_manager);
if (num_errors) {
ResetDeclMap();
return false;
}
//////////////////////////////////
// JIT the output of the parser
//
bool can_interpret = false; // should stay that way
Error jit_error = parser.PrepareForExecution(
m_jit_start_addr, m_jit_end_addr, m_execution_unit_sp, exe_ctx,
can_interpret, eExecutionPolicyAlways);
if (m_jit_start_addr != LLDB_INVALID_ADDRESS) {
m_jit_process_wp = process->shared_from_this();
if (parser.GetGenerateDebugInfo()) {
lldb::ModuleSP jit_module_sp(m_execution_unit_sp->GetJITModule());
if (jit_module_sp) {
ConstString const_func_name(FunctionName());
FileSpec jit_file;
jit_file.GetFilename() = const_func_name;
jit_module_sp->SetFileSpecAndObjectName(jit_file, ConstString());
m_jit_module_wp = jit_module_sp;
target->GetImages().Append(jit_module_sp);
}
}
}
#if 0
// jingham: look here
StreamFile logfile ("/tmp/exprs.txt", "a");
logfile.Printf ("0x%16.16" PRIx64 ": func = %s, source =\n%s\n",
m_jit_start_addr,
m_function_name.c_str(),
m_function_text.c_str());
#endif
//.........这里部分代码省略.........
开发者ID:krytarowski,项目名称:lldb,代码行数:101,代码来源:ClangUtilityFunction.cpp
示例13: main
int main(int argc, char **argv) {
if (argc < 2) {
printf("Usage: bilateral_grid <s_sigma>\n");
// printf("Spatial sigma is a compile-time parameter, please provide it as an argument.\n"
// "(llvm's ptx backend doesn't handle integer mods by non-consts yet)\n");
return 0;
}
ImageParam input(Float(32), 2);
Param<float> r_sigma("r_sigma");
int s_sigma = atoi(argv[1]);
Var x("x"), y("y"), z("z"), c("c");
// Add a boundary condition
Func clamped("clamped");
clamped(x, y) = input(clamp(x, 0, input.width()-1),
clamp(y, 0, input.height()-1));
// Construct the bilateral grid
RDom r(0, s_sigma, 0, s_sigma);
Expr val = clamped(x * s_sigma + r.x - s_sigma/2, y * s_sigma + r.y - s_sigma/2);
val = clamp(val, 0.0f, 1.0f);
Expr zi = cast<int>(val * (1.0f/r_sigma) + 0.5f);
Func histogram("histogram");
histogram(x, y, z, c) = 0.0f;
histogram(x, y, zi, c) += select(c == 0, val, 1.0f);
// Blur the grid using a five-tap filter
Func blurx("blurx"), blury("blury"), blurz("blurz");
blurz(x, y, z, c) = (histogram(x, y, z-2, c) +
histogram(x, y, z-1, c)*4 +
histogram(x, y, z , c)*6 +
histogram(x, y, z+1, c)*4 +
histogram(x, y, z+2, c));
blurx(x, y, z, c) = (blurz(x-2, y, z, c) +
blurz(x-1, y, z, c)*4 +
blurz(x , y, z, c)*6 +
blurz(x+1, y, z, c)*4 +
blurz(x+2, y, z, c));
blury(x, y, z, c) = (blurx(x, y-2, z, c) +
blurx(x, y-1, z, c)*4 +
blurx(x, y , z, c)*6 +
blurx(x, y+1, z, c)*4 +
blurx(x, y+2, z, c));
// Take trilinear samples to compute the output
val = clamp(input(x, y), 0.0f, 1.0f);
Expr zv = val * (1.0f/r_sigma);
zi = cast<int>(zv);
Expr zf = zv - zi;
Expr xf = cast<float>(x % s_sigma) / s_sigma;
Expr yf = cast<float>(y % s_sigma) / s_sigma;
Expr xi = x/s_sigma;
Expr yi = y/s_sigma;
Func interpolated("interpolated");
interpolated(x, y, c) =
lerp(lerp(lerp(blury(xi, yi, zi, c), blury(xi+1, yi, zi, c), xf),
lerp(blury(xi, yi+1, zi, c), blury(xi+1, yi+1, zi, c), xf), yf),
lerp(lerp(blury(xi, yi, zi+1, c), blury(xi+1, yi, zi+1, c), xf),
lerp(blury(xi, yi+1, zi+1, c), blury(xi+1, yi+1, zi+1, c), xf), yf), zf);
// Normalize
Func bilateral_grid("bilateral_grid");
bilateral_grid(x, y) = interpolated(x, y, 0)/interpolated(x, y, 1);
Target target = get_target_from_environment();
if (target.has_gpu_feature()) {
histogram.compute_root().reorder(c, z, x, y).gpu_tile(x, y, 8, 8);
histogram.update().reorder(c, r.x, r.y, x, y).gpu_tile(x, y, 8, 8).unroll(c);
blurx.compute_root().gpu_tile(x, y, z, 16, 16, 1);
blury.compute_root().gpu_tile(x, y, z, 16, 16, 1);
blurz.compute_root().gpu_tile(x, y, z, 8, 8, 4);
bilateral_grid.compute_root().gpu_tile(x, y, s_sigma, s_sigma);
} else {
// CPU schedule
histogram.compute_at(blurz, y);
histogram.update().reorder(c, r.x, r.y, x, y).unroll(c);
blurz.compute_root().reorder(c, z, x, y).parallel(y).vectorize(x, 4).unroll(c);
blurx.compute_root().reorder(c, x, y, z).parallel(z).vectorize(x, 4).unroll(c);
blury.compute_root().reorder(c, x, y, z).parallel(z).vectorize(x, 4).unroll(c);
bilateral_grid.compute_root().parallel(y).vectorize(x, 4);
}
bilateral_grid.compile_to_file("bilateral_grid", r_sigma, input, target);
return 0;
}
开发者ID:AheadIO,项目名称:Halide,代码行数:88,代码来源:bilateral_grid.cpp
示例14: exe_ctx
ValueObjectSP ABISysV_ppc64::GetReturnValueObjectImpl(
Thread &thread, CompilerType &return_compiler_type) const {
ValueObjectSP return_valobj_sp;
if (!return_compiler_type)
return return_valobj_sp;
ExecutionContext exe_ctx(thread.shared_from_this());
return_valobj_sp = GetReturnValueObjectSimple(thread, return_compiler_type);
if (return_valobj_sp)
return return_valobj_sp;
RegisterContextSP reg_ctx_sp = thread.GetRegisterContext();
if (!reg_ctx_sp)
return return_valobj_sp;
const size_t bit_width = return_compiler_type.GetBitSize(&thread);
if (return_compiler_type.IsAggregateType()) {
Target *target = exe_ctx.GetTargetPtr();
bool is_memory = true;
if (bit_width <= 128) {
ByteOrder target_byte_order = target->GetArchitecture().GetByteOrder();
DataBufferSP data_sp(new DataBufferHeap(16, 0));
DataExtractor return_ext(data_sp, target_byte_order,
target->GetArchitecture().GetAddressByteSize());
const RegisterInfo *r3_info = reg_ctx_sp->GetRegisterInfoByName("r3", 0);
const RegisterInfo *rdx_info =
reg_ctx_sp->GetRegisterInfoByName("rdx", 0);
RegisterValue r3_value, rdx_value;
reg_ctx_sp->ReadRegister(r3_info, r3_value);
reg_ctx_sp->ReadRegister(rdx_info, rdx_value);
DataExtractor r3_data, rdx_data;
r3_value.GetData(r3_data);
rdx_value.GetData(rdx_data);
uint32_t fp_bytes =
0; // Tracks how much of the xmm registers we've consumed so far
uint32_t integer_bytes =
0; // Tracks how much of the r3/rds registers we've consumed so far
const uint32_t num_children = return_compiler_type.GetNumFields();
// Since we are in the small struct regime, assume we are not in memory.
is_memory = false;
for (uint32_t idx = 0; idx < num_children; idx++) {
std::string name;
uint64_t field_bit_offset = 0;
bool is_signed;
bool is_complex;
uint32_t count;
CompilerType field_compiler_type = return_compiler_type.GetFieldAtIndex(
idx, name, &field_bit_offset, nullptr, nullptr);
const size_t field_bit_width = field_compiler_type.GetBitSize(&thread);
// If there are any unaligned fields, this is stored in memory.
if (field_bit_offset % field_bit_width != 0) {
is_memory = true;
break;
}
uint32_t field_byte_width = field_bit_width / 8;
uint32_t field_byte_offset = field_bit_offset / 8;
DataExtractor *copy_from_extractor = nullptr;
uint32_t copy_from_offset = 0;
if (field_compiler_type.IsIntegerOrEnumerationType(is_signed) ||
field_compiler_type.IsPointerType()) {
if (integer_bytes < 8) {
if (integer_bytes + field_byte_width <= 8) {
// This is in RAX, copy from register to our result structure:
copy_from_extractor = &r3_data;
copy_from_offset = integer_bytes;
integer_bytes += field_byte_width;
} else {
// The next field wouldn't fit in the remaining space, so we
// pushed it to rdx.
copy_from_extractor = &rdx_data;
copy_from_offset = 0;
integer_bytes = 8 + field_byte_width;
}
} else if (integer_bytes + field_byte_width <=
|
请发表评论