From 32a4e672fd70d5d1f949ae6851dc39af4985f5a6 Mon Sep 17 00:00:00 2001 From: Josh Klontz Date: Mon, 7 Jan 2013 19:34:05 -0500 Subject: [PATCH] more llvm code --- sdk/plugins/llvm.cpp | 21 +++++++++++++++++++++ share/openbr/doc | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/sdk/plugins/llvm.cpp b/sdk/plugins/llvm.cpp index 18cc585..cc62bed 100644 --- a/sdk/plugins/llvm.cpp +++ b/sdk/plugins/llvm.cpp @@ -144,7 +144,28 @@ struct MatrixBuilder : public jit_matrix setData(b->CreateCall(malloc, mallocArgs)); } + Value *get(int mask) const { return b->CreateAnd(getHash(), constant(mask, 16)); } + void set(int value, int mask) const { setHash(b->CreateOr(b->CreateAnd(getHash(), constant(~mask, 16)), b->CreateAnd(constant(value, 16), constant(mask, 16)))); } + void setBit(bool on, int mask) const { on ? setHash(b->CreateOr(getHash(), constant(mask, 16))) : setHash(b->CreateAnd(getHash(), constant(~mask, 16))); } + + Value *bitsCode() const { return get(Bits); } + void setBitsCode(int bits) const { set(bits, Bits); } + Value *isFloatingCode() const { return get(Floating); } + void setFloatingCode(bool isFloating) const { if (isFloating) setSignedCode(true); setBit(isFloating, Floating); } + Value *isSignedCode() const { return get(Signed); } + void setSignedCode(bool isSigned) const { setBit(isSigned, Signed); } + Value *typeCode() const { return get(Bits + Floating + Signed); } + void setTypeCode(int type) const { set(type, Bits + Floating + Signed); } + Value *singleChannelCode() const { return get(SingleChannel); } + void setSingleChannelCode(bool singleChannel) const { setBit(singleChannel, SingleChannel); } + Value *singleColumnCode() const { return get(SingleColumn); } + void setSingleColumnCode(bool singleColumn) { setBit(singleColumn, SingleColumn); } + Value *singleRowCode() const { return get(SingleRow); } + void setSingleRowCode(bool singleRow) const { setBit(singleRow, SingleRow); } + Value *singleFrameCode() const { return get(SingleFrame); } + void setSingleFrameCode(bool singleFrame) const { setBit(singleFrame, SingleFrame); } Value *elementsCode() const { return b->CreateMul(b->CreateMul(b->CreateMul(getChannels(), getColumns()), getRows()), getFrames()); } + Value *bytesCode() const { return b->CreateMul(b->CreateUDiv(bitsCode(), constant(8, 16)), elementsCode()); } Value *columnStep() const { Value *columnStep = getChannels(); columnStep->setName(name+"_cStep"); return columnStep; } Value *rowStep() const { return b->CreateMul(getColumns(), columnStep(), name+"_rStep"); } diff --git a/share/openbr/doc b/share/openbr/doc index 8f74266..6c90253 160000 --- a/share/openbr/doc +++ b/share/openbr/doc @@ -1 +1 @@ -Subproject commit 8f74266f98653627b04ae9a8e7f83d4dd63b4f5d +Subproject commit 6c90253585eb70dc3abf2b0d6ef9de5ade9f6950 -- libgit2 0.21.4