Esempio n. 1
0
    ejsval
    IRBuilder_createCondBr(ejsval env, ejsval _this, int argc, ejsval *args)
    {
        REQ_LLVM_VAL_ARG(0, cond);
        REQ_LLVM_BB_ARG(1, thenPart);
        REQ_LLVM_BB_ARG(2, elsePart);

        return Value_new (_llvm_builder.CreateCondBr(cond, thenPart, elsePart));
    }
Esempio n. 2
0
  v8::Handle<v8::Value> IRBuilder::CreateCondBr(const v8::Arguments& args)
  {
    HandleScope scope;

    REQ_LLVM_VAL_ARG(0, cond);
    REQ_LLVM_BB_ARG(1, thenPart);
    REQ_LLVM_BB_ARG(2, elsePart);

    Handle<v8::Value> result = Instruction::New(static_cast<llvm::Instruction*>(IRBuilder::builder.CreateCondBr(cond, thenPart, elsePart)));
    return scope.Close(result);
  }
Esempio n. 3
0
    ejsval
    IRBuilder_createBr(ejsval env, ejsval _this, int argc, ejsval *args)
    {
        REQ_LLVM_BB_ARG(0, dest);

        return Value_new (_llvm_builder.CreateBr(dest));
    }
Esempio n. 4
0
 ejsval
 IRBuilder_setInsertPointStartBB(ejsval env, ejsval _this, int argc, ejsval *args)
 {
     REQ_LLVM_BB_ARG(0, bb);
     if (bb != NULL)
         _llvm_builder.SetInsertPoint (bb, bb->getFirstInsertionPt());
     return _ejs_undefined;
 }
Esempio n. 5
0
    ejsval
    IRBuilder_createInvoke(ejsval env, ejsval _this, int argc, ejsval *args)
    {
        REQ_LLVM_VAL_ARG(0, callee);
        REQ_ARRAY_ARG(1, argv);
        REQ_LLVM_BB_ARG(2, normal_dest);
        REQ_LLVM_BB_ARG(3, unwind_dest);
        FALLBACK_EMPTY_UTF8_ARG(4, name);

        std::vector<llvm::Value*> ArgsV;
        for (unsigned i = 0, e = EJSARRAY_LEN(argv); i != e; ++i) {
            ArgsV.push_back (Value_GetLLVMObj(EJSDENSEARRAY_ELEMENTS(argv)[i]));
            if (ArgsV.back() == 0) abort(); // XXX throw an exception here
        }

        return Invoke_new (_llvm_builder.CreateInvoke(callee, normal_dest, unwind_dest, ArgsV, name));
    }
Esempio n. 6
0
 v8::Handle<v8::Value> IRBuilder::SetInsertPointStartBB(const v8::Arguments& args)
 {
   HandleScope scope;
   REQ_LLVM_BB_ARG(0, bb);
   if (bb != NULL)
     IRBuilder::builder.SetInsertPoint (bb, bb->getFirstInsertionPt());
   return scope.Close(Undefined());
 }
Esempio n. 7
0
    ejsval
    IRBuilder_createSwitch(ejsval env, ejsval _this, int argc, ejsval *args)
    {
        REQ_LLVM_VAL_ARG(0, V);
        REQ_LLVM_BB_ARG(1, Dest);
        REQ_INT_ARG(2, num_cases);

        return Switch_new (_llvm_builder.CreateSwitch(V, Dest, num_cases));
    }
Esempio n. 8
0
  v8::Handle<v8::Value> IRBuilder::CreateBr(const v8::Arguments& args)
  {
    HandleScope scope;

    REQ_LLVM_BB_ARG(0, dest);

    Handle<v8::Value> result = Instruction::New(static_cast<llvm::Instruction*>(IRBuilder::builder.CreateBr(dest)));
    return scope.Close(result);
  }
Esempio n. 9
0
 Handle<v8::Value> PHINode::AddIncoming (const Arguments& args)
 {
   HandleScope scope;
   PHINode* phi = ObjectWrap::Unwrap<PHINode>(args.This());
   REQ_LLVM_VAL_ARG(0, incoming_val);
   REQ_LLVM_BB_ARG(1, incoming_bb);
   phi->llvm_phi->addIncoming(incoming_val, incoming_bb);
   return scope.Close(Undefined());
 }
Esempio n. 10
0
  v8::Handle<v8::Value> IRBuilder::CreateSwitch(const v8::Arguments& args)
  {
    HandleScope scope;

    REQ_LLVM_VAL_ARG(0, V);
    REQ_LLVM_BB_ARG(1, Dest);
    REQ_INT_ARG(2, num_cases);

    Handle<v8::Value> result = Switch::New(IRBuilder::builder.CreateSwitch(V, Dest, num_cases));
    return scope.Close(result);
  }
Esempio n. 11
0
  v8::Handle<v8::Value> IRBuilder::CreateInvoke(const v8::Arguments& args)
  {
    HandleScope scope;

    REQ_LLVM_VAL_ARG(0, callee);
    REQ_ARRAY_ARG(1, argv);
    REQ_LLVM_BB_ARG(2, normal_dest);
    REQ_LLVM_BB_ARG(3, unwind_dest);
    FALLBACK_EMPTY_UTF8_ARG(4, name);

    std::vector<llvm::Value*> ArgsV;
    for (unsigned i = 0, e = argv->Length(); i != e; ++i) {
      llvm::Value* arg = Value::GetLLVMObj(argv->Get(i));
      ArgsV.push_back(arg);
      if (ArgsV.back() == 0) abort(); // XXX throw an exception here
    }

    Handle<v8::Value> result = Invoke::New(IRBuilder::builder.CreateInvoke(callee, normal_dest, unwind_dest, ArgsV, *name));
    return scope.Close(result);
  }