static void TransformColorInverse_SSE2(const VP8LMultipliers* const m, const uint32_t* const src, int num_pixels, uint32_t* dst) { // sign-extended multiplying constants, pre-shifted by 5. #define CST(X) (((int16_t)(m->X << 8)) >> 5) // sign-extend #define MK_CST_16(HI, LO) \ _mm_set1_epi32((int)(((uint32_t)(HI) << 16) | ((LO) & 0xffff))) const __m128i mults_rb = MK_CST_16(CST(green_to_red_), CST(green_to_blue_)); const __m128i mults_b2 = MK_CST_16(CST(red_to_blue_), 0); #undef MK_CST_16 #undef CST const __m128i mask_ag = _mm_set1_epi32(0xff00ff00); // alpha-green masks int i; for (i = 0; i + 4 <= num_pixels; i += 4) { const __m128i in = _mm_loadu_si128((const __m128i*)&src[i]); // argb const __m128i A = _mm_and_si128(in, mask_ag); // a 0 g 0 const __m128i B = _mm_shufflelo_epi16(A, _MM_SHUFFLE(2, 2, 0, 0)); const __m128i C = _mm_shufflehi_epi16(B, _MM_SHUFFLE(2, 2, 0, 0)); // g0g0 const __m128i D = _mm_mulhi_epi16(C, mults_rb); // x dr x db1 const __m128i E = _mm_add_epi8(in, D); // x r' x b' const __m128i F = _mm_slli_epi16(E, 8); // r' 0 b' 0 const __m128i G = _mm_mulhi_epi16(F, mults_b2); // x db2 0 0 const __m128i H = _mm_srli_epi32(G, 8); // 0 x db2 0 const __m128i I = _mm_add_epi8(H, F); // r' x b'' 0 const __m128i J = _mm_srli_epi16(I, 8); // 0 r' 0 b'' const __m128i out = _mm_or_si128(J, A); _mm_storeu_si128((__m128i*)&dst[i], out); } // Fall-back to C-version for left-overs. if (i != num_pixels) { VP8LTransformColorInverse_C(m, src + i, num_pixels - i, dst + i); } }
int PIController::InitStage(const std::string& axisName, const std::string& stageType) { if (HasCST()) { std::string stageType_local = stageType; if (onlyIDSTAGEvalid_) { if (strcmp(stageType.c_str(), "NOSTAGE") != 0) { stageType_local = "ID-STAGE"; } } if (!CST(axisName, stageType_local)) return DEVICE_INVALID_PROPERTY_VALUE; } if (HasINI()) { if (!INI(axisName)) return DEVICE_ERR; } if (HasSVO()) { if (!SVO(axisName, TRUE)) return DEVICE_ERR; } return DEVICE_OK; }
int PIController::InitStage(const std::string& axisName, const std::string& stageType) { if (HasCST() && !stageType.empty()) { std::string stageType_local = stageType; if (onlyIDSTAGEvalid_) { if (strcmp(stageType.c_str(), "NOSTAGE") != 0) { stageType_local = "ID-STAGE"; } } if (!CST(axisName, stageType_local)) { return GetTranslatedError(); } } if (HasINI()) { if (!INI(axisName)) { return GetTranslatedError(); } } if (HasSVO()) { if (!SVO(axisName, TRUE)) { return GetTranslatedError(); } } return DEVICE_OK; }
int main(int argc, char * argv[]) { try { libmaus::util::ArgInfo const arginfo(argc,argv); std::string const prefix = arginfo.getRestArg<std::string>(0); std::string const hwtname = prefix+".hwt"; std::string const saname = prefix+".sa"; std::string const isaname = prefix+".isa"; std::string const lcpname = prefix+".lcp"; std::string const rmmname = prefix+".rmm"; std::cerr << "Loading suffix tree..."; libmaus::suffixtree::CompressedSuffixTree CST(hwtname,saname,isaname,lcpname,rmmname); std::cerr << "done." << std::endl; uint64_t const leafs = countLeafsByTraversal(CST); assert ( CST.n == leafs ); #if 0 #if 0 // serialise cst and read it back std::ostringstream ostr; CST.serialise(ostr); std::istringstream istr(ostr.str()); libmaus::suffixtree::CompressedSuffixTree rCST(istr); #endif std::cerr << "[0] = " << CST.backwardExtend(CST.root(),0) << std::endl; std::cerr << "[1] = " << CST.backwardExtend(CST.root(),1) << std::endl; std::cerr << "[2] = " << CST.backwardExtend(CST.root(),2) << std::endl; std::cerr << "[3] = " << CST.backwardExtend(CST.root(),3) << std::endl; std::cerr << "[4] = " << CST.backwardExtend(CST.root(),4) << std::endl; std::cerr << "[5] = " << CST.backwardExtend(CST.root(),5) << std::endl; typedef libmaus::suffixtree::CompressedSuffixTree::Node Node; Node node = CST.root(); std::cerr << CST.parent(CST.firstChild(CST.root())) << std::endl; std::cerr << "parent("<<node <<")="<< CST.parent(node) << " sdepth=" << CST.sdepth(node) << " firstChild=" << CST.firstChild(node) << " next=" << CST.nextSibling(CST.firstChild(node)) << std::endl; node = CST.backwardExtend(node,1); std::cerr << "parent("<<node <<")="<< CST.parent(node) << " sdepth=" << CST.sdepth(node) << " slink=" << CST.slink(node) << std::endl; node = CST.backwardExtend(node,1); std::cerr << "parent("<<node <<")="<< CST.parent(node) << " sdepth=" << CST.sdepth(node) << " slink=" << CST.slink(node) << std::endl; node = CST.backwardExtend(node,1); std::cerr << "parent("<<node <<")="<< CST.parent(node) << " sdepth=" << CST.sdepth(node) << " slink=" << CST.slink(node) << std::endl; std::cerr << "LCP[0]=" << (*(CST.LCP))[0] << std::endl; std::cerr << "LCP[1]=" << (*(CST.LCP))[1] << std::endl; std::cerr << "LCP[2]=" << (*(CST.LCP))[2] << std::endl; std::cerr << "LCP[3]=" << (*(CST.LCP))[3] << std::endl; node = CST.root(); std::cerr << "root=" << node << std::endl; node = CST.firstChild(node); while ( node.sp != node.ep ) { std::cerr << "child " << node << std::endl; node = CST.nextSibling(node); } for ( uint64_t i = 0; i < 7; ++i ) std::cerr << "["<<i<<"]=" << CST.child(CST.root(),i) << std::endl; std::cerr << CST.child(CST.child(CST.root(),1),1) << std::endl; std::cerr << "byteSize=" << CST.byteSize() << std::endl; #endif } catch(std::exception const & ex) { std::cerr << ex.what() << std::endl; } }