MCPcopy Create free account
hub / github.com/MegEngine/MegCC / GetCVKernelBody

Method GetCVKernelBody

compiler/lib/KernelGen/GeneralIntrinsic/Flip.cpp:32–146  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

30}
31
32std::string FlipKernel::GetCVKernelBody(TContext* context) const {
33 auto kernel_sig = GetCVKernelSignature(context);
34 std::stringstream writer;
35 writer << R"(
36 #include <string.h>
37 #include "gi_int.h"
38 #include "tinycv_c.h"
39 #define rep(i, n) for (size_t i = 0; i < (n); ++i)
40 )";
41 std::string body_temp = R"(
42 static void flip_horizontal_on_channel_c1(uint8_t* dst, const uint8_t* src, size_t W) {
43 size_t j = 0;
44 for (; j + 15 < W; j += 16) {
45 GI_UINT8_t src_vec = GiLoadUint8(src + j);
46 GI_UINT8_t dst_vec = GiReverseUint8(src_vec);
47 GiStoreUint8((dst + W - j - 16), dst_vec);
48 }
49 for (; j < W; ++j) {
50 *(dst + W - j - 1) = *(src + j);
51 }
52 }
53 static void flip_horizontal_on_channel_c3(uint8_t* dst, const uint8_t* src, size_t W) {
54 size_t j = 0;
55 for (; j + 15 < W; j += 16) {
56 GI_UINT8_t src_vec0, src_vec1, src_vec2;
57 src_vec0 = GiLoadUzip0V3Uint8(src + j * 3);
58 src_vec1 = GiLoadUzip1V3Uint8(src + j * 3);
59 src_vec2 = GiLoadUzip2V3Uint8(src + j * 3);
60
61 GI_UINT8_t dst_vec0 = GiReverseUint8(src_vec0);
62 GI_UINT8_t dst_vec1 = GiReverseUint8(src_vec1);
63 GI_UINT8_t dst_vec2 = GiReverseUint8(src_vec2);
64 GiStoreZipUint8V3((dst + W * 3 - 3 * j - 48), dst_vec0, dst_vec1, dst_vec2);
65
66
67 }
68 for (; j < W; ++j) {
69 *(dst + W * 3 - j * 3 - 3) = *(src + j * 3);
70 *(dst + W * 3 - j * 3 - 2) = *(src + j * 3 + 1);
71 *(dst + W * 3 - j * 3 - 1) = *(src + j * 3 + 2);
72
73 }
74 }
75
76 static void flip_horizontal_naive(uint8_t* dst, const uint8_t* src, size_t W,
77 size_t C) {
78 size_t sc = 0;
79 size_t dc = W * C;
80 for (; sc + 8 * C <= W * C; sc += 8 * C, dc -= 8 * C) {
81 rep(ic, C) dst[dc - 1 * C + ic] = src[sc + 0 * C + ic];
82 rep(ic, C) dst[dc - 2 * C + ic] = src[sc + 1 * C + ic];
83 rep(ic, C) dst[dc - 3 * C + ic] = src[sc + 2 * C + ic];
84 rep(ic, C) dst[dc - 4 * C + ic] = src[sc + 3 * C + ic];
85 rep(ic, C) dst[dc - 5 * C + ic] = src[sc + 4 * C + ic];
86 rep(ic, C) dst[dc - 6 * C + ic] = src[sc + 5 * C + ic];
87 rep(ic, C) dst[dc - 7 * C + ic] = src[sc + 6 * C + ic];
88 rep(ic, C) dst[dc - 8 * C + ic] = src[sc + 7 * C + ic];
89 }

Callers

nothing calls this directly

Calls 3

StringTemplateArgsClass · 0.85
renderMethod · 0.45
addMethod · 0.45

Tested by

no test coverage detected