Commit 32a4e672fd70d5d1f949ae6851dc39af4985f5a6
1 parent
8bde0803
more llvm code
Showing
2 changed files
with
22 additions
and
1 deletions
sdk/plugins/llvm.cpp
| ... | ... | @@ -144,7 +144,28 @@ struct MatrixBuilder : public jit_matrix |
| 144 | 144 | setData(b->CreateCall(malloc, mallocArgs)); |
| 145 | 145 | } |
| 146 | 146 | |
| 147 | + Value *get(int mask) const { return b->CreateAnd(getHash(), constant(mask, 16)); } | |
| 148 | + void set(int value, int mask) const { setHash(b->CreateOr(b->CreateAnd(getHash(), constant(~mask, 16)), b->CreateAnd(constant(value, 16), constant(mask, 16)))); } | |
| 149 | + void setBit(bool on, int mask) const { on ? setHash(b->CreateOr(getHash(), constant(mask, 16))) : setHash(b->CreateAnd(getHash(), constant(~mask, 16))); } | |
| 150 | + | |
| 151 | + Value *bitsCode() const { return get(Bits); } | |
| 152 | + void setBitsCode(int bits) const { set(bits, Bits); } | |
| 153 | + Value *isFloatingCode() const { return get(Floating); } | |
| 154 | + void setFloatingCode(bool isFloating) const { if (isFloating) setSignedCode(true); setBit(isFloating, Floating); } | |
| 155 | + Value *isSignedCode() const { return get(Signed); } | |
| 156 | + void setSignedCode(bool isSigned) const { setBit(isSigned, Signed); } | |
| 157 | + Value *typeCode() const { return get(Bits + Floating + Signed); } | |
| 158 | + void setTypeCode(int type) const { set(type, Bits + Floating + Signed); } | |
| 159 | + Value *singleChannelCode() const { return get(SingleChannel); } | |
| 160 | + void setSingleChannelCode(bool singleChannel) const { setBit(singleChannel, SingleChannel); } | |
| 161 | + Value *singleColumnCode() const { return get(SingleColumn); } | |
| 162 | + void setSingleColumnCode(bool singleColumn) { setBit(singleColumn, SingleColumn); } | |
| 163 | + Value *singleRowCode() const { return get(SingleRow); } | |
| 164 | + void setSingleRowCode(bool singleRow) const { setBit(singleRow, SingleRow); } | |
| 165 | + Value *singleFrameCode() const { return get(SingleFrame); } | |
| 166 | + void setSingleFrameCode(bool singleFrame) const { setBit(singleFrame, SingleFrame); } | |
| 147 | 167 | Value *elementsCode() const { return b->CreateMul(b->CreateMul(b->CreateMul(getChannels(), getColumns()), getRows()), getFrames()); } |
| 168 | + Value *bytesCode() const { return b->CreateMul(b->CreateUDiv(bitsCode(), constant(8, 16)), elementsCode()); } | |
| 148 | 169 | |
| 149 | 170 | Value *columnStep() const { Value *columnStep = getChannels(); columnStep->setName(name+"_cStep"); return columnStep; } |
| 150 | 171 | Value *rowStep() const { return b->CreateMul(getColumns(), columnStep(), name+"_rStep"); } | ... | ... |