From d40196b7d3baf34b544c831bc77f8dd35dc836a6 Mon Sep 17 00:00:00 2001 From: Dnomd343 Date: Tue, 17 Jan 2023 00:57:21 +0800 Subject: [PATCH] perf: new common code checker --- src/common_code/common_code.cc | 26 +++++--------------------- src/main.cc | 16 +++++++++++----- 2 files changed, 16 insertions(+), 26 deletions(-) diff --git a/src/common_code/common_code.cc b/src/common_code/common_code.cc index 5a2c0cb..5db389a 100644 --- a/src/common_code/common_code.cc +++ b/src/common_code/common_code.cc @@ -118,8 +118,6 @@ bool CommonCode::check(uint64_t common_code) { // check whether common code is v return Common::check_case(head, range); // check by head and range } -#include - bool CommonCode::check_demo(uint64_t common_code) { /// M_1x1 M_1x2 M_2x1 M_2x2 /// 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 0 @@ -136,31 +134,17 @@ bool CommonCode::check_demo(uint64_t common_code) { return false; // invalid common code } - auto range = Common::range_reverse((uint32_t)common_code); - - uint32_t mask = M_2x2 << head; // fill 2x2 block - + /// check range status (low 32-bits) int space_num = 0; + uint32_t mask = M_2x2 << head; // fill 2x2 block + auto range = Common::range_reverse((uint32_t)common_code); for (int addr = 0;; range >>= 2) { // traverse every 2-bits - - while (mask >> addr & 0b1) { ++addr; // search next unfilled block } if (addr >= 20) { - return range == 0 && space_num > 1; + return !range && space_num > 1; // empty range and >= 2 space } - -// std::cout << "addr = " << addr; -// std::cout << " | block = " << (range & 0b11) << std::endl; - - // FEA13400 -> 1111 1110 1010 0001 0011 0100 0000 0000 - // * * * | - // # + | + - // + + + | - // . ~ + + - // . * ~ + - switch (range & 0b11) { case 0b00: // space ++space_num; @@ -174,7 +158,7 @@ bool CommonCode::check_demo(uint64_t common_code) { mask |= M_2x1 << addr; // fill 2x1 block break; case 0b01: // 1x2 block - if (addr > 18 || (addr & 0b11) == 0b11 || mask >> (addr + 1) & 0b1) { // invalid address + if ((addr & 0b11) == 0b11 || mask >> (addr + 1) & 0b1) { // invalid address return false; } mask |= M_1x2 << addr; // fill 1x2 block diff --git a/src/main.cc b/src/main.cc index 75b71fa..9d1733d 100644 --- a/src/main.cc +++ b/src/main.cc @@ -336,13 +336,19 @@ int main() { // std::cout << sizeof(ShortCode) << std::endl; // int sum = 0; - for (uint64_t common_code = 0; common_code < 0x100000000; ++common_code) { -// if (CommonCode::check_demo(common_code)) { -// ++sum; -// } - if (CommonCode::check(common_code) != CommonCode::check_demo(common_code)) { + for (uint64_t common_code = 0; common_code < 0x1000000000; ++common_code) { + if (CommonCode::check_demo(common_code)) { printf("%09lX\n", common_code); +// ++sum; } + + if (common_code % 0x10000000 == 0) { + std::cerr << common_code / 0x10000000 << std::endl; + } + +// if (CommonCode::check(common_code) != CommonCode::check_demo(common_code)) { +// printf("%09lX\n", common_code); +// } } // std::cout << "sum = " << sum << std::endl;