Перейти к содержанию
    

Есть ли в Cortex-M3 инструкция копирования битов?

19 hours ago, jcxz said:

где тут требуемое выходное 64-битное значение? Где? Вижу только result, который очевидно имеет разрядность = 8.

Вы читать умеете? Я же писал пару постов назад:

On 4/22/2022 at 4:50 PM, xvr said:

uint64_t t0...7[256] вас спасёт.

Так что result 64 бита, или 8 байтов (для тех, кто не умеет считать)

19 hours ago, jcxz said:

Массив такого размера нужен для вашего метода.

Не нужен, об этом я тоже писал

19 hours ago, jcxz said:

Что именно предлагается? где?? Код в студию!

Гм, ещё раз?

 

Quote

 

Входные данные - 8 байтов в виде 8 переменных b0, b1, ... b7

таблицы перекодировок - 8 штук типа uint64_t t0/1/.../7[256]={...}

Перекодировка:


result = t0[b0] | t1[b1] | t2[b2] | ... t7[b7];


 

ЭТО ВЕСЬ КОД!

19 hours ago, jcxz said:

Пока что единственный работающий код привёл только я.

Корона не жмёт? По вашим словам можно подумать, что во всём электрониксе только вы рабочие коды приводите

 

2 ТС: код и таблицы рабочие, можете брать, если хотите

2 jcxz: это магия, забейте :preved:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

		for(n = 0; n < 8; n++)
		{
			dst = &RAM_BIT_ADDR(&stat_video_digit[0], n_pos[n]);
			for(j = 0; j < VALUE_SIZE; j++)
			{
				src = &RAM_BIT_ADDR(&digit_video[n * VALUE_SIZE + j], 7);
				for(i = 0; i < 8; i++)
				{
					*dst = *src;
					src -= 1;
					dst += 8;
				}
			}
		}

где
  #define	VALUE_SIZE			(4) // размер одного "вагончика"
const BYTE n_pos[8] = {5, 7, 4, 6, 3, 1, 2, 0}; // таблица подключений

В копилку рабочих кодов ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, xvr сказал:

Гм, ещё раз?

Похоже бесполезно... Или до вас не доходит или троллите....  :unknw:

Рабочий код - это исходник, который ЛЮБОЙ может скомпилировать и проверить.

Вот это:

21.04.2022 в 17:38, jcxz сказал:

Не знаю о каком именно CPU речь и что такое "первые биты" и что такое "первый байт", но вот накидал для >= Cortex-M4:

  Скрыть содержимое


               SECTION  .text:CODE:NOROOT(2)
               PUBLIC   ResortBits
;extern "C" void ResortBits(u32 *, u32 const *, uint n);
               THUMB
ResortBits:    PUSH     {R4-R6, LR}
               MOV      R12, #80808080h

ResortBits_01: LDMIA    R1!, {R3, R4}

               USUB8    LR, R4, R12
               MRS      R6, APSR
               LSLS     R4, R4, #1
               LSLS     R6, R6, #12
               USUB8    LR, R3, R12
               MRS      LR, APSR
               LSLS     R3, R3, #1
               UBFX     LR, LR, #16, #4
               BFI      R6, LR, #24, #4

               USUB8    LR, R4, R12
               MRS      LR, APSR
               LSLS     R4, R4, #1
               UBFX     LR, LR, #16, #4
               BFI      R6, LR, #20, #4
               USUB8    LR, R3, R12
               MRS      LR, APSR
               LSLS     R3, R3, #1
               UBFX     LR, LR, #16, #4
               BFI      R6, LR, #16, #4

               USUB8    LR, R4, R12
               MRS      LR, APSR
               LSLS     R4, R4, #1
               UBFX     LR, LR, #16, #4
               BFI      R6, LR, #12, #4
               USUB8    LR, R3, R12
               MRS      LR, APSR
               LSLS     R3, R3, #1
               UBFX     LR, LR, #16, #4
               BFI      R6, LR, #8, #4

               USUB8    LR, R4, R12
               MRS      LR, APSR
               LSLS     R4, R4, #1
               UBFX     LR, LR, #16, #4
               BFI      R6, LR, #4, #4
               USUB8    LR, R3, R12
               MRS      LR, APSR
               LSLS     R3, R3, #1
               UBFX     R5, LR, #16, #4
               ORRS     R6, R5

               USUB8    LR, R4, R12
               MRS      R5, APSR
               LSLS     R4, R4, #1
               LSLS     R5, R5, #12
               USUB8    LR, R3, R12
               MRS      LR, APSR
               LSLS     R3, R3, #1
               UBFX     LR, LR, #16, #4
               BFI      R5, LR, #24, #4

               USUB8    LR, R4, R12
               MRS      LR, APSR
               LSLS     R4, R4, #1
               UBFX     LR, LR, #16, #4
               BFI      R5, LR, #20, #4
               USUB8    LR, R3, R12
               MRS      LR, APSR
               LSLS     R3, R3, #1
               UBFX     LR, LR, #16, #4
               BFI      R5, LR, #16, #4

               USUB8    LR, R4, R12
               MRS      LR, APSR
               LSLS     R4, R4, #1
               UBFX     LR, LR, #16, #4
               BFI      R5, LR, #12, #4
               USUB8    LR, R3, R12
               MRS      LR, APSR
               LSLS     R3, R3, #1
               UBFX     LR, LR, #16, #4
               BFI      R5, LR, #8, #4

               USUB8    LR, R4, R12
               MRS      LR, APSR
               UBFX     LR, LR, #16, #4
               BFI      R5, LR, #4, #4
               USUB8    LR, R3, R12
               MRS      LR, APSR
               UBFX     R4, LR, #16, #4
               ORRS     R5, R4

               SUBS     R2, R2, #1
               STMIA    R0!, {R5, R6}
               BNE      ResortBits_01

               POP      {R4-R6, PC}

 

1-аргумент ResortBits() - выходной буфер, 2-й - входные данные, 3й - кол-во входных данных (64-битных слов). Вх. и вых. буфера должны быть выравнены на 32 бита.

Все 7-е биты помещаются в 7-й байт; 6-е биты - в 6-й байт и т.д. Внутри вых.байтов расположение битов аналогично - самый старший бит соответствует самому старшему вх.байту.

и называется рабочим кодом. Исходник полный, все переменные и константы - описаны.

А от вас кроме пустого звона до сих пор так ничего вразумительного и не было.

 

PS: Дальнейшую дискуссию с вами прекращаю, так как вижу, что бессмысленно. Троллингом занимайтесь в другом месте.

 

2 часа назад, adnega сказал:

		for(n = 0; n < 8; n++)
		{
			dst = &RAM_BIT_ADDR(&stat_video_digit[0], n_pos[n]);
			for(j = 0; j < VALUE_SIZE; j++)
			{
				src = &RAM_BIT_ADDR(&digit_video[n * VALUE_SIZE + j], 7);
				for(i = 0; i < 8; i++)
				{
					*dst = *src;
					src -= 1;
					dst += 8;
				}
			}
		}

где
  #define	VALUE_SIZE			(4) // размер одного "вагончика"
const BYTE n_pos[8] = {5, 7, 4, 6, 3, 1, 2, 0}; // таблица подключений

В копилку рабочих кодов ;)

Код возможно и рабочий, но..... КРАЙНЕ медленный! Даже тупая в лоб перестановка битов с помощью ~64 пар инструкций UBFX/BFI - будет в разы быстрее. Только два цикла - внутренний и внешний дадут уже 64 прохода во внутреннем цикле. А один проход внутреннего цикла - это множество тактов. Так как требует: чтения исходного слова, чтения целевого слова, модификации бита в нём, записи целевого слова. Это не считая трат на организацию самих циклов. А UBFX/BFI = это всего 2 такта.

Как уже писал: bit-band в этой задаче - самый медленный способ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

29 minutes ago, jcxz said:

Рабочий код - это исходник, который ЛЮБОЙ может скомпилировать и проверить.

Т.е. вы не в состоянии завернуть строку кода в функцию и проверить? (Почему то я не удивлён)

Держите:

#include <stdint.h>

static const uint64_t t0[] = {
0x0000000000000000ull,0x8000000000000000ull,0x4000000000000000ull,0xC000000000000000ull,0x2000000000000000ull,0xA000000000000000ull,0x6000000000000000ull,0xE000000000000000ull,
0x1000000000000000ull,0x9000000000000000ull,0x5000000000000000ull,0xD000000000000000ull,0x3000000000000000ull,0xB000000000000000ull,0x7000000000000000ull,0xF000000000000000ull,
0x0800000000000000ull,0x8800000000000000ull,0x4800000000000000ull,0xC800000000000000ull,0x2800000000000000ull,0xA800000000000000ull,0x6800000000000000ull,0xE800000000000000ull,
0x1800000000000000ull,0x9800000000000000ull,0x5800000000000000ull,0xD800000000000000ull,0x3800000000000000ull,0xB800000000000000ull,0x7800000000000000ull,0xF800000000000000ull,
0x0400000000000000ull,0x8400000000000000ull,0x4400000000000000ull,0xC400000000000000ull,0x2400000000000000ull,0xA400000000000000ull,0x6400000000000000ull,0xE400000000000000ull,
0x1400000000000000ull,0x9400000000000000ull,0x5400000000000000ull,0xD400000000000000ull,0x3400000000000000ull,0xB400000000000000ull,0x7400000000000000ull,0xF400000000000000ull,
0x0C00000000000000ull,0x8C00000000000000ull,0x4C00000000000000ull,0xCC00000000000000ull,0x2C00000000000000ull,0xAC00000000000000ull,0x6C00000000000000ull,0xEC00000000000000ull,
0x1C00000000000000ull,0x9C00000000000000ull,0x5C00000000000000ull,0xDC00000000000000ull,0x3C00000000000000ull,0xBC00000000000000ull,0x7C00000000000000ull,0xFC00000000000000ull,
0x0200000000000000ull,0x8200000000000000ull,0x4200000000000000ull,0xC200000000000000ull,0x2200000000000000ull,0xA200000000000000ull,0x6200000000000000ull,0xE200000000000000ull,
0x1200000000000000ull,0x9200000000000000ull,0x5200000000000000ull,0xD200000000000000ull,0x3200000000000000ull,0xB200000000000000ull,0x7200000000000000ull,0xF200000000000000ull,
0x0A00000000000000ull,0x8A00000000000000ull,0x4A00000000000000ull,0xCA00000000000000ull,0x2A00000000000000ull,0xAA00000000000000ull,0x6A00000000000000ull,0xEA00000000000000ull,
0x1A00000000000000ull,0x9A00000000000000ull,0x5A00000000000000ull,0xDA00000000000000ull,0x3A00000000000000ull,0xBA00000000000000ull,0x7A00000000000000ull,0xFA00000000000000ull,
0x0600000000000000ull,0x8600000000000000ull,0x4600000000000000ull,0xC600000000000000ull,0x2600000000000000ull,0xA600000000000000ull,0x6600000000000000ull,0xE600000000000000ull,
0x1600000000000000ull,0x9600000000000000ull,0x5600000000000000ull,0xD600000000000000ull,0x3600000000000000ull,0xB600000000000000ull,0x7600000000000000ull,0xF600000000000000ull,
0x0E00000000000000ull,0x8E00000000000000ull,0x4E00000000000000ull,0xCE00000000000000ull,0x2E00000000000000ull,0xAE00000000000000ull,0x6E00000000000000ull,0xEE00000000000000ull,
0x1E00000000000000ull,0x9E00000000000000ull,0x5E00000000000000ull,0xDE00000000000000ull,0x3E00000000000000ull,0xBE00000000000000ull,0x7E00000000000000ull,0xFE00000000000000ull,
0x0100000000000000ull,0x8100000000000000ull,0x4100000000000000ull,0xC100000000000000ull,0x2100000000000000ull,0xA100000000000000ull,0x6100000000000000ull,0xE100000000000000ull,
0x1100000000000000ull,0x9100000000000000ull,0x5100000000000000ull,0xD100000000000000ull,0x3100000000000000ull,0xB100000000000000ull,0x7100000000000000ull,0xF100000000000000ull,
0x0900000000000000ull,0x8900000000000000ull,0x4900000000000000ull,0xC900000000000000ull,0x2900000000000000ull,0xA900000000000000ull,0x6900000000000000ull,0xE900000000000000ull,
0x1900000000000000ull,0x9900000000000000ull,0x5900000000000000ull,0xD900000000000000ull,0x3900000000000000ull,0xB900000000000000ull,0x7900000000000000ull,0xF900000000000000ull,
0x0500000000000000ull,0x8500000000000000ull,0x4500000000000000ull,0xC500000000000000ull,0x2500000000000000ull,0xA500000000000000ull,0x6500000000000000ull,0xE500000000000000ull,
0x1500000000000000ull,0x9500000000000000ull,0x5500000000000000ull,0xD500000000000000ull,0x3500000000000000ull,0xB500000000000000ull,0x7500000000000000ull,0xF500000000000000ull,
0x0D00000000000000ull,0x8D00000000000000ull,0x4D00000000000000ull,0xCD00000000000000ull,0x2D00000000000000ull,0xAD00000000000000ull,0x6D00000000000000ull,0xED00000000000000ull,
0x1D00000000000000ull,0x9D00000000000000ull,0x5D00000000000000ull,0xDD00000000000000ull,0x3D00000000000000ull,0xBD00000000000000ull,0x7D00000000000000ull,0xFD00000000000000ull,
0x0300000000000000ull,0x8300000000000000ull,0x4300000000000000ull,0xC300000000000000ull,0x2300000000000000ull,0xA300000000000000ull,0x6300000000000000ull,0xE300000000000000ull,
0x1300000000000000ull,0x9300000000000000ull,0x5300000000000000ull,0xD300000000000000ull,0x3300000000000000ull,0xB300000000000000ull,0x7300000000000000ull,0xF300000000000000ull,
0x0B00000000000000ull,0x8B00000000000000ull,0x4B00000000000000ull,0xCB00000000000000ull,0x2B00000000000000ull,0xAB00000000000000ull,0x6B00000000000000ull,0xEB00000000000000ull,
0x1B00000000000000ull,0x9B00000000000000ull,0x5B00000000000000ull,0xDB00000000000000ull,0x3B00000000000000ull,0xBB00000000000000ull,0x7B00000000000000ull,0xFB00000000000000ull,
0x0700000000000000ull,0x8700000000000000ull,0x4700000000000000ull,0xC700000000000000ull,0x2700000000000000ull,0xA700000000000000ull,0x6700000000000000ull,0xE700000000000000ull,
0x1700000000000000ull,0x9700000000000000ull,0x5700000000000000ull,0xD700000000000000ull,0x3700000000000000ull,0xB700000000000000ull,0x7700000000000000ull,0xF700000000000000ull,
0x0F00000000000000ull,0x8F00000000000000ull,0x4F00000000000000ull,0xCF00000000000000ull,0x2F00000000000000ull,0xAF00000000000000ull,0x6F00000000000000ull,0xEF00000000000000ull,
0x1F00000000000000ull,0x9F00000000000000ull,0x5F00000000000000ull,0xDF00000000000000ull,0x3F00000000000000ull,0xBF00000000000000ull,0x7F00000000000000ull,0xFF00000000000000ull
};
static const uint64_t t1[] = {
0x0000000000000000ull,0x0080000000000000ull,0x0040000000000000ull,0x00C0000000000000ull,0x0020000000000000ull,0x00A0000000000000ull,0x0060000000000000ull,0x00E0000000000000ull,
0x0010000000000000ull,0x0090000000000000ull,0x0050000000000000ull,0x00D0000000000000ull,0x0030000000000000ull,0x00B0000000000000ull,0x0070000000000000ull,0x00F0000000000000ull,
0x0008000000000000ull,0x0088000000000000ull,0x0048000000000000ull,0x00C8000000000000ull,0x0028000000000000ull,0x00A8000000000000ull,0x0068000000000000ull,0x00E8000000000000ull,
0x0018000000000000ull,0x0098000000000000ull,0x0058000000000000ull,0x00D8000000000000ull,0x0038000000000000ull,0x00B8000000000000ull,0x0078000000000000ull,0x00F8000000000000ull,
0x0004000000000000ull,0x0084000000000000ull,0x0044000000000000ull,0x00C4000000000000ull,0x0024000000000000ull,0x00A4000000000000ull,0x0064000000000000ull,0x00E4000000000000ull,
0x0014000000000000ull,0x0094000000000000ull,0x0054000000000000ull,0x00D4000000000000ull,0x0034000000000000ull,0x00B4000000000000ull,0x0074000000000000ull,0x00F4000000000000ull,
0x000C000000000000ull,0x008C000000000000ull,0x004C000000000000ull,0x00CC000000000000ull,0x002C000000000000ull,0x00AC000000000000ull,0x006C000000000000ull,0x00EC000000000000ull,
0x001C000000000000ull,0x009C000000000000ull,0x005C000000000000ull,0x00DC000000000000ull,0x003C000000000000ull,0x00BC000000000000ull,0x007C000000000000ull,0x00FC000000000000ull,
0x0002000000000000ull,0x0082000000000000ull,0x0042000000000000ull,0x00C2000000000000ull,0x0022000000000000ull,0x00A2000000000000ull,0x0062000000000000ull,0x00E2000000000000ull,
0x0012000000000000ull,0x0092000000000000ull,0x0052000000000000ull,0x00D2000000000000ull,0x0032000000000000ull,0x00B2000000000000ull,0x0072000000000000ull,0x00F2000000000000ull,
0x000A000000000000ull,0x008A000000000000ull,0x004A000000000000ull,0x00CA000000000000ull,0x002A000000000000ull,0x00AA000000000000ull,0x006A000000000000ull,0x00EA000000000000ull,
0x001A000000000000ull,0x009A000000000000ull,0x005A000000000000ull,0x00DA000000000000ull,0x003A000000000000ull,0x00BA000000000000ull,0x007A000000000000ull,0x00FA000000000000ull,
0x0006000000000000ull,0x0086000000000000ull,0x0046000000000000ull,0x00C6000000000000ull,0x0026000000000000ull,0x00A6000000000000ull,0x0066000000000000ull,0x00E6000000000000ull,
0x0016000000000000ull,0x0096000000000000ull,0x0056000000000000ull,0x00D6000000000000ull,0x0036000000000000ull,0x00B6000000000000ull,0x0076000000000000ull,0x00F6000000000000ull,
0x000E000000000000ull,0x008E000000000000ull,0x004E000000000000ull,0x00CE000000000000ull,0x002E000000000000ull,0x00AE000000000000ull,0x006E000000000000ull,0x00EE000000000000ull,
0x001E000000000000ull,0x009E000000000000ull,0x005E000000000000ull,0x00DE000000000000ull,0x003E000000000000ull,0x00BE000000000000ull,0x007E000000000000ull,0x00FE000000000000ull,
0x0001000000000000ull,0x0081000000000000ull,0x0041000000000000ull,0x00C1000000000000ull,0x0021000000000000ull,0x00A1000000000000ull,0x0061000000000000ull,0x00E1000000000000ull,
0x0011000000000000ull,0x0091000000000000ull,0x0051000000000000ull,0x00D1000000000000ull,0x0031000000000000ull,0x00B1000000000000ull,0x0071000000000000ull,0x00F1000000000000ull,
0x0009000000000000ull,0x0089000000000000ull,0x0049000000000000ull,0x00C9000000000000ull,0x0029000000000000ull,0x00A9000000000000ull,0x0069000000000000ull,0x00E9000000000000ull,
0x0019000000000000ull,0x0099000000000000ull,0x0059000000000000ull,0x00D9000000000000ull,0x0039000000000000ull,0x00B9000000000000ull,0x0079000000000000ull,0x00F9000000000000ull,
0x0005000000000000ull,0x0085000000000000ull,0x0045000000000000ull,0x00C5000000000000ull,0x0025000000000000ull,0x00A5000000000000ull,0x0065000000000000ull,0x00E5000000000000ull,
0x0015000000000000ull,0x0095000000000000ull,0x0055000000000000ull,0x00D5000000000000ull,0x0035000000000000ull,0x00B5000000000000ull,0x0075000000000000ull,0x00F5000000000000ull,
0x000D000000000000ull,0x008D000000000000ull,0x004D000000000000ull,0x00CD000000000000ull,0x002D000000000000ull,0x00AD000000000000ull,0x006D000000000000ull,0x00ED000000000000ull,
0x001D000000000000ull,0x009D000000000000ull,0x005D000000000000ull,0x00DD000000000000ull,0x003D000000000000ull,0x00BD000000000000ull,0x007D000000000000ull,0x00FD000000000000ull,
0x0003000000000000ull,0x0083000000000000ull,0x0043000000000000ull,0x00C3000000000000ull,0x0023000000000000ull,0x00A3000000000000ull,0x0063000000000000ull,0x00E3000000000000ull,
0x0013000000000000ull,0x0093000000000000ull,0x0053000000000000ull,0x00D3000000000000ull,0x0033000000000000ull,0x00B3000000000000ull,0x0073000000000000ull,0x00F3000000000000ull,
0x000B000000000000ull,0x008B000000000000ull,0x004B000000000000ull,0x00CB000000000000ull,0x002B000000000000ull,0x00AB000000000000ull,0x006B000000000000ull,0x00EB000000000000ull,
0x001B000000000000ull,0x009B000000000000ull,0x005B000000000000ull,0x00DB000000000000ull,0x003B000000000000ull,0x00BB000000000000ull,0x007B000000000000ull,0x00FB000000000000ull,
0x0007000000000000ull,0x0087000000000000ull,0x0047000000000000ull,0x00C7000000000000ull,0x0027000000000000ull,0x00A7000000000000ull,0x0067000000000000ull,0x00E7000000000000ull,
0x0017000000000000ull,0x0097000000000000ull,0x0057000000000000ull,0x00D7000000000000ull,0x0037000000000000ull,0x00B7000000000000ull,0x0077000000000000ull,0x00F7000000000000ull,
0x000F000000000000ull,0x008F000000000000ull,0x004F000000000000ull,0x00CF000000000000ull,0x002F000000000000ull,0x00AF000000000000ull,0x006F000000000000ull,0x00EF000000000000ull,
0x001F000000000000ull,0x009F000000000000ull,0x005F000000000000ull,0x00DF000000000000ull,0x003F000000000000ull,0x00BF000000000000ull,0x007F000000000000ull,0x00FF000000000000ull
};
static const uint64_t t2[] = {
0x0000000000000000ull,0x0000800000000000ull,0x0000400000000000ull,0x0000C00000000000ull,0x0000200000000000ull,0x0000A00000000000ull,0x0000600000000000ull,0x0000E00000000000ull,
0x0000100000000000ull,0x0000900000000000ull,0x0000500000000000ull,0x0000D00000000000ull,0x0000300000000000ull,0x0000B00000000000ull,0x0000700000000000ull,0x0000F00000000000ull,
0x0000080000000000ull,0x0000880000000000ull,0x0000480000000000ull,0x0000C80000000000ull,0x0000280000000000ull,0x0000A80000000000ull,0x0000680000000000ull,0x0000E80000000000ull,
0x0000180000000000ull,0x0000980000000000ull,0x0000580000000000ull,0x0000D80000000000ull,0x0000380000000000ull,0x0000B80000000000ull,0x0000780000000000ull,0x0000F80000000000ull,
0x0000040000000000ull,0x0000840000000000ull,0x0000440000000000ull,0x0000C40000000000ull,0x0000240000000000ull,0x0000A40000000000ull,0x0000640000000000ull,0x0000E40000000000ull,
0x0000140000000000ull,0x0000940000000000ull,0x0000540000000000ull,0x0000D40000000000ull,0x0000340000000000ull,0x0000B40000000000ull,0x0000740000000000ull,0x0000F40000000000ull,
0x00000C0000000000ull,0x00008C0000000000ull,0x00004C0000000000ull,0x0000CC0000000000ull,0x00002C0000000000ull,0x0000AC0000000000ull,0x00006C0000000000ull,0x0000EC0000000000ull,
0x00001C0000000000ull,0x00009C0000000000ull,0x00005C0000000000ull,0x0000DC0000000000ull,0x00003C0000000000ull,0x0000BC0000000000ull,0x00007C0000000000ull,0x0000FC0000000000ull,
0x0000020000000000ull,0x0000820000000000ull,0x0000420000000000ull,0x0000C20000000000ull,0x0000220000000000ull,0x0000A20000000000ull,0x0000620000000000ull,0x0000E20000000000ull,
0x0000120000000000ull,0x0000920000000000ull,0x0000520000000000ull,0x0000D20000000000ull,0x0000320000000000ull,0x0000B20000000000ull,0x0000720000000000ull,0x0000F20000000000ull,
0x00000A0000000000ull,0x00008A0000000000ull,0x00004A0000000000ull,0x0000CA0000000000ull,0x00002A0000000000ull,0x0000AA0000000000ull,0x00006A0000000000ull,0x0000EA0000000000ull,
0x00001A0000000000ull,0x00009A0000000000ull,0x00005A0000000000ull,0x0000DA0000000000ull,0x00003A0000000000ull,0x0000BA0000000000ull,0x00007A0000000000ull,0x0000FA0000000000ull,
0x0000060000000000ull,0x0000860000000000ull,0x0000460000000000ull,0x0000C60000000000ull,0x0000260000000000ull,0x0000A60000000000ull,0x0000660000000000ull,0x0000E60000000000ull,
0x0000160000000000ull,0x0000960000000000ull,0x0000560000000000ull,0x0000D60000000000ull,0x0000360000000000ull,0x0000B60000000000ull,0x0000760000000000ull,0x0000F60000000000ull,
0x00000E0000000000ull,0x00008E0000000000ull,0x00004E0000000000ull,0x0000CE0000000000ull,0x00002E0000000000ull,0x0000AE0000000000ull,0x00006E0000000000ull,0x0000EE0000000000ull,
0x00001E0000000000ull,0x00009E0000000000ull,0x00005E0000000000ull,0x0000DE0000000000ull,0x00003E0000000000ull,0x0000BE0000000000ull,0x00007E0000000000ull,0x0000FE0000000000ull,
0x0000010000000000ull,0x0000810000000000ull,0x0000410000000000ull,0x0000C10000000000ull,0x0000210000000000ull,0x0000A10000000000ull,0x0000610000000000ull,0x0000E10000000000ull,
0x0000110000000000ull,0x0000910000000000ull,0x0000510000000000ull,0x0000D10000000000ull,0x0000310000000000ull,0x0000B10000000000ull,0x0000710000000000ull,0x0000F10000000000ull,
0x0000090000000000ull,0x0000890000000000ull,0x0000490000000000ull,0x0000C90000000000ull,0x0000290000000000ull,0x0000A90000000000ull,0x0000690000000000ull,0x0000E90000000000ull,
0x0000190000000000ull,0x0000990000000000ull,0x0000590000000000ull,0x0000D90000000000ull,0x0000390000000000ull,0x0000B90000000000ull,0x0000790000000000ull,0x0000F90000000000ull,
0x0000050000000000ull,0x0000850000000000ull,0x0000450000000000ull,0x0000C50000000000ull,0x0000250000000000ull,0x0000A50000000000ull,0x0000650000000000ull,0x0000E50000000000ull,
0x0000150000000000ull,0x0000950000000000ull,0x0000550000000000ull,0x0000D50000000000ull,0x0000350000000000ull,0x0000B50000000000ull,0x0000750000000000ull,0x0000F50000000000ull,
0x00000D0000000000ull,0x00008D0000000000ull,0x00004D0000000000ull,0x0000CD0000000000ull,0x00002D0000000000ull,0x0000AD0000000000ull,0x00006D0000000000ull,0x0000ED0000000000ull,
0x00001D0000000000ull,0x00009D0000000000ull,0x00005D0000000000ull,0x0000DD0000000000ull,0x00003D0000000000ull,0x0000BD0000000000ull,0x00007D0000000000ull,0x0000FD0000000000ull,
0x0000030000000000ull,0x0000830000000000ull,0x0000430000000000ull,0x0000C30000000000ull,0x0000230000000000ull,0x0000A30000000000ull,0x0000630000000000ull,0x0000E30000000000ull,
0x0000130000000000ull,0x0000930000000000ull,0x0000530000000000ull,0x0000D30000000000ull,0x0000330000000000ull,0x0000B30000000000ull,0x0000730000000000ull,0x0000F30000000000ull,
0x00000B0000000000ull,0x00008B0000000000ull,0x00004B0000000000ull,0x0000CB0000000000ull,0x00002B0000000000ull,0x0000AB0000000000ull,0x00006B0000000000ull,0x0000EB0000000000ull,
0x00001B0000000000ull,0x00009B0000000000ull,0x00005B0000000000ull,0x0000DB0000000000ull,0x00003B0000000000ull,0x0000BB0000000000ull,0x00007B0000000000ull,0x0000FB0000000000ull,
0x0000070000000000ull,0x0000870000000000ull,0x0000470000000000ull,0x0000C70000000000ull,0x0000270000000000ull,0x0000A70000000000ull,0x0000670000000000ull,0x0000E70000000000ull,
0x0000170000000000ull,0x0000970000000000ull,0x0000570000000000ull,0x0000D70000000000ull,0x0000370000000000ull,0x0000B70000000000ull,0x0000770000000000ull,0x0000F70000000000ull,
0x00000F0000000000ull,0x00008F0000000000ull,0x00004F0000000000ull,0x0000CF0000000000ull,0x00002F0000000000ull,0x0000AF0000000000ull,0x00006F0000000000ull,0x0000EF0000000000ull,
0x00001F0000000000ull,0x00009F0000000000ull,0x00005F0000000000ull,0x0000DF0000000000ull,0x00003F0000000000ull,0x0000BF0000000000ull,0x00007F0000000000ull,0x0000FF0000000000ull
};
static const uint64_t t3[] = {
0x0000000000000000ull,0x0000008000000000ull,0x0000004000000000ull,0x000000C000000000ull,0x0000002000000000ull,0x000000A000000000ull,0x0000006000000000ull,0x000000E000000000ull,
0x0000001000000000ull,0x0000009000000000ull,0x0000005000000000ull,0x000000D000000000ull,0x0000003000000000ull,0x000000B000000000ull,0x0000007000000000ull,0x000000F000000000ull,
0x0000000800000000ull,0x0000008800000000ull,0x0000004800000000ull,0x000000C800000000ull,0x0000002800000000ull,0x000000A800000000ull,0x0000006800000000ull,0x000000E800000000ull,
0x0000001800000000ull,0x0000009800000000ull,0x0000005800000000ull,0x000000D800000000ull,0x0000003800000000ull,0x000000B800000000ull,0x0000007800000000ull,0x000000F800000000ull,
0x0000000400000000ull,0x0000008400000000ull,0x0000004400000000ull,0x000000C400000000ull,0x0000002400000000ull,0x000000A400000000ull,0x0000006400000000ull,0x000000E400000000ull,
0x0000001400000000ull,0x0000009400000000ull,0x0000005400000000ull,0x000000D400000000ull,0x0000003400000000ull,0x000000B400000000ull,0x0000007400000000ull,0x000000F400000000ull,
0x0000000C00000000ull,0x0000008C00000000ull,0x0000004C00000000ull,0x000000CC00000000ull,0x0000002C00000000ull,0x000000AC00000000ull,0x0000006C00000000ull,0x000000EC00000000ull,
0x0000001C00000000ull,0x0000009C00000000ull,0x0000005C00000000ull,0x000000DC00000000ull,0x0000003C00000000ull,0x000000BC00000000ull,0x0000007C00000000ull,0x000000FC00000000ull,
0x0000000200000000ull,0x0000008200000000ull,0x0000004200000000ull,0x000000C200000000ull,0x0000002200000000ull,0x000000A200000000ull,0x0000006200000000ull,0x000000E200000000ull,
0x0000001200000000ull,0x0000009200000000ull,0x0000005200000000ull,0x000000D200000000ull,0x0000003200000000ull,0x000000B200000000ull,0x0000007200000000ull,0x000000F200000000ull,
0x0000000A00000000ull,0x0000008A00000000ull,0x0000004A00000000ull,0x000000CA00000000ull,0x0000002A00000000ull,0x000000AA00000000ull,0x0000006A00000000ull,0x000000EA00000000ull,
0x0000001A00000000ull,0x0000009A00000000ull,0x0000005A00000000ull,0x000000DA00000000ull,0x0000003A00000000ull,0x000000BA00000000ull,0x0000007A00000000ull,0x000000FA00000000ull,
0x0000000600000000ull,0x0000008600000000ull,0x0000004600000000ull,0x000000C600000000ull,0x0000002600000000ull,0x000000A600000000ull,0x0000006600000000ull,0x000000E600000000ull,
0x0000001600000000ull,0x0000009600000000ull,0x0000005600000000ull,0x000000D600000000ull,0x0000003600000000ull,0x000000B600000000ull,0x0000007600000000ull,0x000000F600000000ull,
0x0000000E00000000ull,0x0000008E00000000ull,0x0000004E00000000ull,0x000000CE00000000ull,0x0000002E00000000ull,0x000000AE00000000ull,0x0000006E00000000ull,0x000000EE00000000ull,
0x0000001E00000000ull,0x0000009E00000000ull,0x0000005E00000000ull,0x000000DE00000000ull,0x0000003E00000000ull,0x000000BE00000000ull,0x0000007E00000000ull,0x000000FE00000000ull,
0x0000000100000000ull,0x0000008100000000ull,0x0000004100000000ull,0x000000C100000000ull,0x0000002100000000ull,0x000000A100000000ull,0x0000006100000000ull,0x000000E100000000ull,
0x0000001100000000ull,0x0000009100000000ull,0x0000005100000000ull,0x000000D100000000ull,0x0000003100000000ull,0x000000B100000000ull,0x0000007100000000ull,0x000000F100000000ull,
0x0000000900000000ull,0x0000008900000000ull,0x0000004900000000ull,0x000000C900000000ull,0x0000002900000000ull,0x000000A900000000ull,0x0000006900000000ull,0x000000E900000000ull,
0x0000001900000000ull,0x0000009900000000ull,0x0000005900000000ull,0x000000D900000000ull,0x0000003900000000ull,0x000000B900000000ull,0x0000007900000000ull,0x000000F900000000ull,
0x0000000500000000ull,0x0000008500000000ull,0x0000004500000000ull,0x000000C500000000ull,0x0000002500000000ull,0x000000A500000000ull,0x0000006500000000ull,0x000000E500000000ull,
0x0000001500000000ull,0x0000009500000000ull,0x0000005500000000ull,0x000000D500000000ull,0x0000003500000000ull,0x000000B500000000ull,0x0000007500000000ull,0x000000F500000000ull,
0x0000000D00000000ull,0x0000008D00000000ull,0x0000004D00000000ull,0x000000CD00000000ull,0x0000002D00000000ull,0x000000AD00000000ull,0x0000006D00000000ull,0x000000ED00000000ull,
0x0000001D00000000ull,0x0000009D00000000ull,0x0000005D00000000ull,0x000000DD00000000ull,0x0000003D00000000ull,0x000000BD00000000ull,0x0000007D00000000ull,0x000000FD00000000ull,
0x0000000300000000ull,0x0000008300000000ull,0x0000004300000000ull,0x000000C300000000ull,0x0000002300000000ull,0x000000A300000000ull,0x0000006300000000ull,0x000000E300000000ull,
0x0000001300000000ull,0x0000009300000000ull,0x0000005300000000ull,0x000000D300000000ull,0x0000003300000000ull,0x000000B300000000ull,0x0000007300000000ull,0x000000F300000000ull,
0x0000000B00000000ull,0x0000008B00000000ull,0x0000004B00000000ull,0x000000CB00000000ull,0x0000002B00000000ull,0x000000AB00000000ull,0x0000006B00000000ull,0x000000EB00000000ull,
0x0000001B00000000ull,0x0000009B00000000ull,0x0000005B00000000ull,0x000000DB00000000ull,0x0000003B00000000ull,0x000000BB00000000ull,0x0000007B00000000ull,0x000000FB00000000ull,
0x0000000700000000ull,0x0000008700000000ull,0x0000004700000000ull,0x000000C700000000ull,0x0000002700000000ull,0x000000A700000000ull,0x0000006700000000ull,0x000000E700000000ull,
0x0000001700000000ull,0x0000009700000000ull,0x0000005700000000ull,0x000000D700000000ull,0x0000003700000000ull,0x000000B700000000ull,0x0000007700000000ull,0x000000F700000000ull,
0x0000000F00000000ull,0x0000008F00000000ull,0x0000004F00000000ull,0x000000CF00000000ull,0x0000002F00000000ull,0x000000AF00000000ull,0x0000006F00000000ull,0x000000EF00000000ull,
0x0000001F00000000ull,0x0000009F00000000ull,0x0000005F00000000ull,0x000000DF00000000ull,0x0000003F00000000ull,0x000000BF00000000ull,0x0000007F00000000ull,0x000000FF00000000ull
};
static const uint64_t t4[] = {
0x0000000000000000ull,0x0000000080000000ull,0x0000000040000000ull,0x00000000C0000000ull,0x0000000020000000ull,0x00000000A0000000ull,0x0000000060000000ull,0x00000000E0000000ull,
0x0000000010000000ull,0x0000000090000000ull,0x0000000050000000ull,0x00000000D0000000ull,0x0000000030000000ull,0x00000000B0000000ull,0x0000000070000000ull,0x00000000F0000000ull,
0x0000000008000000ull,0x0000000088000000ull,0x0000000048000000ull,0x00000000C8000000ull,0x0000000028000000ull,0x00000000A8000000ull,0x0000000068000000ull,0x00000000E8000000ull,
0x0000000018000000ull,0x0000000098000000ull,0x0000000058000000ull,0x00000000D8000000ull,0x0000000038000000ull,0x00000000B8000000ull,0x0000000078000000ull,0x00000000F8000000ull,
0x0000000004000000ull,0x0000000084000000ull,0x0000000044000000ull,0x00000000C4000000ull,0x0000000024000000ull,0x00000000A4000000ull,0x0000000064000000ull,0x00000000E4000000ull,
0x0000000014000000ull,0x0000000094000000ull,0x0000000054000000ull,0x00000000D4000000ull,0x0000000034000000ull,0x00000000B4000000ull,0x0000000074000000ull,0x00000000F4000000ull,
0x000000000C000000ull,0x000000008C000000ull,0x000000004C000000ull,0x00000000CC000000ull,0x000000002C000000ull,0x00000000AC000000ull,0x000000006C000000ull,0x00000000EC000000ull,
0x000000001C000000ull,0x000000009C000000ull,0x000000005C000000ull,0x00000000DC000000ull,0x000000003C000000ull,0x00000000BC000000ull,0x000000007C000000ull,0x00000000FC000000ull,
0x0000000002000000ull,0x0000000082000000ull,0x0000000042000000ull,0x00000000C2000000ull,0x0000000022000000ull,0x00000000A2000000ull,0x0000000062000000ull,0x00000000E2000000ull,
0x0000000012000000ull,0x0000000092000000ull,0x0000000052000000ull,0x00000000D2000000ull,0x0000000032000000ull,0x00000000B2000000ull,0x0000000072000000ull,0x00000000F2000000ull,
0x000000000A000000ull,0x000000008A000000ull,0x000000004A000000ull,0x00000000CA000000ull,0x000000002A000000ull,0x00000000AA000000ull,0x000000006A000000ull,0x00000000EA000000ull,
0x000000001A000000ull,0x000000009A000000ull,0x000000005A000000ull,0x00000000DA000000ull,0x000000003A000000ull,0x00000000BA000000ull,0x000000007A000000ull,0x00000000FA000000ull,
0x0000000006000000ull,0x0000000086000000ull,0x0000000046000000ull,0x00000000C6000000ull,0x0000000026000000ull,0x00000000A6000000ull,0x0000000066000000ull,0x00000000E6000000ull,
0x0000000016000000ull,0x0000000096000000ull,0x0000000056000000ull,0x00000000D6000000ull,0x0000000036000000ull,0x00000000B6000000ull,0x0000000076000000ull,0x00000000F6000000ull,
0x000000000E000000ull,0x000000008E000000ull,0x000000004E000000ull,0x00000000CE000000ull,0x000000002E000000ull,0x00000000AE000000ull,0x000000006E000000ull,0x00000000EE000000ull,
0x000000001E000000ull,0x000000009E000000ull,0x000000005E000000ull,0x00000000DE000000ull,0x000000003E000000ull,0x00000000BE000000ull,0x000000007E000000ull,0x00000000FE000000ull,
0x0000000001000000ull,0x0000000081000000ull,0x0000000041000000ull,0x00000000C1000000ull,0x0000000021000000ull,0x00000000A1000000ull,0x0000000061000000ull,0x00000000E1000000ull,
0x0000000011000000ull,0x0000000091000000ull,0x0000000051000000ull,0x00000000D1000000ull,0x0000000031000000ull,0x00000000B1000000ull,0x0000000071000000ull,0x00000000F1000000ull,
0x0000000009000000ull,0x0000000089000000ull,0x0000000049000000ull,0x00000000C9000000ull,0x0000000029000000ull,0x00000000A9000000ull,0x0000000069000000ull,0x00000000E9000000ull,
0x0000000019000000ull,0x0000000099000000ull,0x0000000059000000ull,0x00000000D9000000ull,0x0000000039000000ull,0x00000000B9000000ull,0x0000000079000000ull,0x00000000F9000000ull,
0x0000000005000000ull,0x0000000085000000ull,0x0000000045000000ull,0x00000000C5000000ull,0x0000000025000000ull,0x00000000A5000000ull,0x0000000065000000ull,0x00000000E5000000ull,
0x0000000015000000ull,0x0000000095000000ull,0x0000000055000000ull,0x00000000D5000000ull,0x0000000035000000ull,0x00000000B5000000ull,0x0000000075000000ull,0x00000000F5000000ull,
0x000000000D000000ull,0x000000008D000000ull,0x000000004D000000ull,0x00000000CD000000ull,0x000000002D000000ull,0x00000000AD000000ull,0x000000006D000000ull,0x00000000ED000000ull,
0x000000001D000000ull,0x000000009D000000ull,0x000000005D000000ull,0x00000000DD000000ull,0x000000003D000000ull,0x00000000BD000000ull,0x000000007D000000ull,0x00000000FD000000ull,
0x0000000003000000ull,0x0000000083000000ull,0x0000000043000000ull,0x00000000C3000000ull,0x0000000023000000ull,0x00000000A3000000ull,0x0000000063000000ull,0x00000000E3000000ull,
0x0000000013000000ull,0x0000000093000000ull,0x0000000053000000ull,0x00000000D3000000ull,0x0000000033000000ull,0x00000000B3000000ull,0x0000000073000000ull,0x00000000F3000000ull,
0x000000000B000000ull,0x000000008B000000ull,0x000000004B000000ull,0x00000000CB000000ull,0x000000002B000000ull,0x00000000AB000000ull,0x000000006B000000ull,0x00000000EB000000ull,
0x000000001B000000ull,0x000000009B000000ull,0x000000005B000000ull,0x00000000DB000000ull,0x000000003B000000ull,0x00000000BB000000ull,0x000000007B000000ull,0x00000000FB000000ull,
0x0000000007000000ull,0x0000000087000000ull,0x0000000047000000ull,0x00000000C7000000ull,0x0000000027000000ull,0x00000000A7000000ull,0x0000000067000000ull,0x00000000E7000000ull,
0x0000000017000000ull,0x0000000097000000ull,0x0000000057000000ull,0x00000000D7000000ull,0x0000000037000000ull,0x00000000B7000000ull,0x0000000077000000ull,0x00000000F7000000ull,
0x000000000F000000ull,0x000000008F000000ull,0x000000004F000000ull,0x00000000CF000000ull,0x000000002F000000ull,0x00000000AF000000ull,0x000000006F000000ull,0x00000000EF000000ull,
0x000000001F000000ull,0x000000009F000000ull,0x000000005F000000ull,0x00000000DF000000ull,0x000000003F000000ull,0x00000000BF000000ull,0x000000007F000000ull,0x00000000FF000000ull
};
static const uint64_t t5[] = {
0x0000000000000000ull,0x0000000000800000ull,0x0000000000400000ull,0x0000000000C00000ull,0x0000000000200000ull,0x0000000000A00000ull,0x0000000000600000ull,0x0000000000E00000ull,
0x0000000000100000ull,0x0000000000900000ull,0x0000000000500000ull,0x0000000000D00000ull,0x0000000000300000ull,0x0000000000B00000ull,0x0000000000700000ull,0x0000000000F00000ull,
0x0000000000080000ull,0x0000000000880000ull,0x0000000000480000ull,0x0000000000C80000ull,0x0000000000280000ull,0x0000000000A80000ull,0x0000000000680000ull,0x0000000000E80000ull,
0x0000000000180000ull,0x0000000000980000ull,0x0000000000580000ull,0x0000000000D80000ull,0x0000000000380000ull,0x0000000000B80000ull,0x0000000000780000ull,0x0000000000F80000ull,
0x0000000000040000ull,0x0000000000840000ull,0x0000000000440000ull,0x0000000000C40000ull,0x0000000000240000ull,0x0000000000A40000ull,0x0000000000640000ull,0x0000000000E40000ull,
0x0000000000140000ull,0x0000000000940000ull,0x0000000000540000ull,0x0000000000D40000ull,0x0000000000340000ull,0x0000000000B40000ull,0x0000000000740000ull,0x0000000000F40000ull,
0x00000000000C0000ull,0x00000000008C0000ull,0x00000000004C0000ull,0x0000000000CC0000ull,0x00000000002C0000ull,0x0000000000AC0000ull,0x00000000006C0000ull,0x0000000000EC0000ull,
0x00000000001C0000ull,0x00000000009C0000ull,0x00000000005C0000ull,0x0000000000DC0000ull,0x00000000003C0000ull,0x0000000000BC0000ull,0x00000000007C0000ull,0x0000000000FC0000ull,
0x0000000000020000ull,0x0000000000820000ull,0x0000000000420000ull,0x0000000000C20000ull,0x0000000000220000ull,0x0000000000A20000ull,0x0000000000620000ull,0x0000000000E20000ull,
0x0000000000120000ull,0x0000000000920000ull,0x0000000000520000ull,0x0000000000D20000ull,0x0000000000320000ull,0x0000000000B20000ull,0x0000000000720000ull,0x0000000000F20000ull,
0x00000000000A0000ull,0x00000000008A0000ull,0x00000000004A0000ull,0x0000000000CA0000ull,0x00000000002A0000ull,0x0000000000AA0000ull,0x00000000006A0000ull,0x0000000000EA0000ull,
0x00000000001A0000ull,0x00000000009A0000ull,0x00000000005A0000ull,0x0000000000DA0000ull,0x00000000003A0000ull,0x0000000000BA0000ull,0x00000000007A0000ull,0x0000000000FA0000ull,
0x0000000000060000ull,0x0000000000860000ull,0x0000000000460000ull,0x0000000000C60000ull,0x0000000000260000ull,0x0000000000A60000ull,0x0000000000660000ull,0x0000000000E60000ull,
0x0000000000160000ull,0x0000000000960000ull,0x0000000000560000ull,0x0000000000D60000ull,0x0000000000360000ull,0x0000000000B60000ull,0x0000000000760000ull,0x0000000000F60000ull,
0x00000000000E0000ull,0x00000000008E0000ull,0x00000000004E0000ull,0x0000000000CE0000ull,0x00000000002E0000ull,0x0000000000AE0000ull,0x00000000006E0000ull,0x0000000000EE0000ull,
0x00000000001E0000ull,0x00000000009E0000ull,0x00000000005E0000ull,0x0000000000DE0000ull,0x00000000003E0000ull,0x0000000000BE0000ull,0x00000000007E0000ull,0x0000000000FE0000ull,
0x0000000000010000ull,0x0000000000810000ull,0x0000000000410000ull,0x0000000000C10000ull,0x0000000000210000ull,0x0000000000A10000ull,0x0000000000610000ull,0x0000000000E10000ull,
0x0000000000110000ull,0x0000000000910000ull,0x0000000000510000ull,0x0000000000D10000ull,0x0000000000310000ull,0x0000000000B10000ull,0x0000000000710000ull,0x0000000000F10000ull,
0x0000000000090000ull,0x0000000000890000ull,0x0000000000490000ull,0x0000000000C90000ull,0x0000000000290000ull,0x0000000000A90000ull,0x0000000000690000ull,0x0000000000E90000ull,
0x0000000000190000ull,0x0000000000990000ull,0x0000000000590000ull,0x0000000000D90000ull,0x0000000000390000ull,0x0000000000B90000ull,0x0000000000790000ull,0x0000000000F90000ull,
0x0000000000050000ull,0x0000000000850000ull,0x0000000000450000ull,0x0000000000C50000ull,0x0000000000250000ull,0x0000000000A50000ull,0x0000000000650000ull,0x0000000000E50000ull,
0x0000000000150000ull,0x0000000000950000ull,0x0000000000550000ull,0x0000000000D50000ull,0x0000000000350000ull,0x0000000000B50000ull,0x0000000000750000ull,0x0000000000F50000ull,
0x00000000000D0000ull,0x00000000008D0000ull,0x00000000004D0000ull,0x0000000000CD0000ull,0x00000000002D0000ull,0x0000000000AD0000ull,0x00000000006D0000ull,0x0000000000ED0000ull,
0x00000000001D0000ull,0x00000000009D0000ull,0x00000000005D0000ull,0x0000000000DD0000ull,0x00000000003D0000ull,0x0000000000BD0000ull,0x00000000007D0000ull,0x0000000000FD0000ull,
0x0000000000030000ull,0x0000000000830000ull,0x0000000000430000ull,0x0000000000C30000ull,0x0000000000230000ull,0x0000000000A30000ull,0x0000000000630000ull,0x0000000000E30000ull,
0x0000000000130000ull,0x0000000000930000ull,0x0000000000530000ull,0x0000000000D30000ull,0x0000000000330000ull,0x0000000000B30000ull,0x0000000000730000ull,0x0000000000F30000ull,
0x00000000000B0000ull,0x00000000008B0000ull,0x00000000004B0000ull,0x0000000000CB0000ull,0x00000000002B0000ull,0x0000000000AB0000ull,0x00000000006B0000ull,0x0000000000EB0000ull,
0x00000000001B0000ull,0x00000000009B0000ull,0x00000000005B0000ull,0x0000000000DB0000ull,0x00000000003B0000ull,0x0000000000BB0000ull,0x00000000007B0000ull,0x0000000000FB0000ull,
0x0000000000070000ull,0x0000000000870000ull,0x0000000000470000ull,0x0000000000C70000ull,0x0000000000270000ull,0x0000000000A70000ull,0x0000000000670000ull,0x0000000000E70000ull,
0x0000000000170000ull,0x0000000000970000ull,0x0000000000570000ull,0x0000000000D70000ull,0x0000000000370000ull,0x0000000000B70000ull,0x0000000000770000ull,0x0000000000F70000ull,
0x00000000000F0000ull,0x00000000008F0000ull,0x00000000004F0000ull,0x0000000000CF0000ull,0x00000000002F0000ull,0x0000000000AF0000ull,0x00000000006F0000ull,0x0000000000EF0000ull,
0x00000000001F0000ull,0x00000000009F0000ull,0x00000000005F0000ull,0x0000000000DF0000ull,0x00000000003F0000ull,0x0000000000BF0000ull,0x00000000007F0000ull,0x0000000000FF0000ull
};
static const uint64_t t6[] = {
0x0000000000000000ull,0x0000000000008000ull,0x0000000000004000ull,0x000000000000C000ull,0x0000000000002000ull,0x000000000000A000ull,0x0000000000006000ull,0x000000000000E000ull,
0x0000000000001000ull,0x0000000000009000ull,0x0000000000005000ull,0x000000000000D000ull,0x0000000000003000ull,0x000000000000B000ull,0x0000000000007000ull,0x000000000000F000ull,
0x0000000000000800ull,0x0000000000008800ull,0x0000000000004800ull,0x000000000000C800ull,0x0000000000002800ull,0x000000000000A800ull,0x0000000000006800ull,0x000000000000E800ull,
0x0000000000001800ull,0x0000000000009800ull,0x0000000000005800ull,0x000000000000D800ull,0x0000000000003800ull,0x000000000000B800ull,0x0000000000007800ull,0x000000000000F800ull,
0x0000000000000400ull,0x0000000000008400ull,0x0000000000004400ull,0x000000000000C400ull,0x0000000000002400ull,0x000000000000A400ull,0x0000000000006400ull,0x000000000000E400ull,
0x0000000000001400ull,0x0000000000009400ull,0x0000000000005400ull,0x000000000000D400ull,0x0000000000003400ull,0x000000000000B400ull,0x0000000000007400ull,0x000000000000F400ull,
0x0000000000000C00ull,0x0000000000008C00ull,0x0000000000004C00ull,0x000000000000CC00ull,0x0000000000002C00ull,0x000000000000AC00ull,0x0000000000006C00ull,0x000000000000EC00ull,
0x0000000000001C00ull,0x0000000000009C00ull,0x0000000000005C00ull,0x000000000000DC00ull,0x0000000000003C00ull,0x000000000000BC00ull,0x0000000000007C00ull,0x000000000000FC00ull,
0x0000000000000200ull,0x0000000000008200ull,0x0000000000004200ull,0x000000000000C200ull,0x0000000000002200ull,0x000000000000A200ull,0x0000000000006200ull,0x000000000000E200ull,
0x0000000000001200ull,0x0000000000009200ull,0x0000000000005200ull,0x000000000000D200ull,0x0000000000003200ull,0x000000000000B200ull,0x0000000000007200ull,0x000000000000F200ull,
0x0000000000000A00ull,0x0000000000008A00ull,0x0000000000004A00ull,0x000000000000CA00ull,0x0000000000002A00ull,0x000000000000AA00ull,0x0000000000006A00ull,0x000000000000EA00ull,
0x0000000000001A00ull,0x0000000000009A00ull,0x0000000000005A00ull,0x000000000000DA00ull,0x0000000000003A00ull,0x000000000000BA00ull,0x0000000000007A00ull,0x000000000000FA00ull,
0x0000000000000600ull,0x0000000000008600ull,0x0000000000004600ull,0x000000000000C600ull,0x0000000000002600ull,0x000000000000A600ull,0x0000000000006600ull,0x000000000000E600ull,
0x0000000000001600ull,0x0000000000009600ull,0x0000000000005600ull,0x000000000000D600ull,0x0000000000003600ull,0x000000000000B600ull,0x0000000000007600ull,0x000000000000F600ull,
0x0000000000000E00ull,0x0000000000008E00ull,0x0000000000004E00ull,0x000000000000CE00ull,0x0000000000002E00ull,0x000000000000AE00ull,0x0000000000006E00ull,0x000000000000EE00ull,
0x0000000000001E00ull,0x0000000000009E00ull,0x0000000000005E00ull,0x000000000000DE00ull,0x0000000000003E00ull,0x000000000000BE00ull,0x0000000000007E00ull,0x000000000000FE00ull,
0x0000000000000100ull,0x0000000000008100ull,0x0000000000004100ull,0x000000000000C100ull,0x0000000000002100ull,0x000000000000A100ull,0x0000000000006100ull,0x000000000000E100ull,
0x0000000000001100ull,0x0000000000009100ull,0x0000000000005100ull,0x000000000000D100ull,0x0000000000003100ull,0x000000000000B100ull,0x0000000000007100ull,0x000000000000F100ull,
0x0000000000000900ull,0x0000000000008900ull,0x0000000000004900ull,0x000000000000C900ull,0x0000000000002900ull,0x000000000000A900ull,0x0000000000006900ull,0x000000000000E900ull,
0x0000000000001900ull,0x0000000000009900ull,0x0000000000005900ull,0x000000000000D900ull,0x0000000000003900ull,0x000000000000B900ull,0x0000000000007900ull,0x000000000000F900ull,
0x0000000000000500ull,0x0000000000008500ull,0x0000000000004500ull,0x000000000000C500ull,0x0000000000002500ull,0x000000000000A500ull,0x0000000000006500ull,0x000000000000E500ull,
0x0000000000001500ull,0x0000000000009500ull,0x0000000000005500ull,0x000000000000D500ull,0x0000000000003500ull,0x000000000000B500ull,0x0000000000007500ull,0x000000000000F500ull,
0x0000000000000D00ull,0x0000000000008D00ull,0x0000000000004D00ull,0x000000000000CD00ull,0x0000000000002D00ull,0x000000000000AD00ull,0x0000000000006D00ull,0x000000000000ED00ull,
0x0000000000001D00ull,0x0000000000009D00ull,0x0000000000005D00ull,0x000000000000DD00ull,0x0000000000003D00ull,0x000000000000BD00ull,0x0000000000007D00ull,0x000000000000FD00ull,
0x0000000000000300ull,0x0000000000008300ull,0x0000000000004300ull,0x000000000000C300ull,0x0000000000002300ull,0x000000000000A300ull,0x0000000000006300ull,0x000000000000E300ull,
0x0000000000001300ull,0x0000000000009300ull,0x0000000000005300ull,0x000000000000D300ull,0x0000000000003300ull,0x000000000000B300ull,0x0000000000007300ull,0x000000000000F300ull,
0x0000000000000B00ull,0x0000000000008B00ull,0x0000000000004B00ull,0x000000000000CB00ull,0x0000000000002B00ull,0x000000000000AB00ull,0x0000000000006B00ull,0x000000000000EB00ull,
0x0000000000001B00ull,0x0000000000009B00ull,0x0000000000005B00ull,0x000000000000DB00ull,0x0000000000003B00ull,0x000000000000BB00ull,0x0000000000007B00ull,0x000000000000FB00ull,
0x0000000000000700ull,0x0000000000008700ull,0x0000000000004700ull,0x000000000000C700ull,0x0000000000002700ull,0x000000000000A700ull,0x0000000000006700ull,0x000000000000E700ull,
0x0000000000001700ull,0x0000000000009700ull,0x0000000000005700ull,0x000000000000D700ull,0x0000000000003700ull,0x000000000000B700ull,0x0000000000007700ull,0x000000000000F700ull,
0x0000000000000F00ull,0x0000000000008F00ull,0x0000000000004F00ull,0x000000000000CF00ull,0x0000000000002F00ull,0x000000000000AF00ull,0x0000000000006F00ull,0x000000000000EF00ull,
0x0000000000001F00ull,0x0000000000009F00ull,0x0000000000005F00ull,0x000000000000DF00ull,0x0000000000003F00ull,0x000000000000BF00ull,0x0000000000007F00ull,0x000000000000FF00ull
};
static const uint64_t t7[] = {
0x0000000000000000ull,0x0000000000000080ull,0x0000000000000040ull,0x00000000000000C0ull,0x0000000000000020ull,0x00000000000000A0ull,0x0000000000000060ull,0x00000000000000E0ull,
0x0000000000000010ull,0x0000000000000090ull,0x0000000000000050ull,0x00000000000000D0ull,0x0000000000000030ull,0x00000000000000B0ull,0x0000000000000070ull,0x00000000000000F0ull,
0x0000000000000008ull,0x0000000000000088ull,0x0000000000000048ull,0x00000000000000C8ull,0x0000000000000028ull,0x00000000000000A8ull,0x0000000000000068ull,0x00000000000000E8ull,
0x0000000000000018ull,0x0000000000000098ull,0x0000000000000058ull,0x00000000000000D8ull,0x0000000000000038ull,0x00000000000000B8ull,0x0000000000000078ull,0x00000000000000F8ull,
0x0000000000000004ull,0x0000000000000084ull,0x0000000000000044ull,0x00000000000000C4ull,0x0000000000000024ull,0x00000000000000A4ull,0x0000000000000064ull,0x00000000000000E4ull,
0x0000000000000014ull,0x0000000000000094ull,0x0000000000000054ull,0x00000000000000D4ull,0x0000000000000034ull,0x00000000000000B4ull,0x0000000000000074ull,0x00000000000000F4ull,
0x000000000000000Cull,0x000000000000008Cull,0x000000000000004Cull,0x00000000000000CCull,0x000000000000002Cull,0x00000000000000ACull,0x000000000000006Cull,0x00000000000000ECull,
0x000000000000001Cull,0x000000000000009Cull,0x000000000000005Cull,0x00000000000000DCull,0x000000000000003Cull,0x00000000000000BCull,0x000000000000007Cull,0x00000000000000FCull,
0x0000000000000002ull,0x0000000000000082ull,0x0000000000000042ull,0x00000000000000C2ull,0x0000000000000022ull,0x00000000000000A2ull,0x0000000000000062ull,0x00000000000000E2ull,
0x0000000000000012ull,0x0000000000000092ull,0x0000000000000052ull,0x00000000000000D2ull,0x0000000000000032ull,0x00000000000000B2ull,0x0000000000000072ull,0x00000000000000F2ull,
0x000000000000000Aull,0x000000000000008Aull,0x000000000000004Aull,0x00000000000000CAull,0x000000000000002Aull,0x00000000000000AAull,0x000000000000006Aull,0x00000000000000EAull,
0x000000000000001Aull,0x000000000000009Aull,0x000000000000005Aull,0x00000000000000DAull,0x000000000000003Aull,0x00000000000000BAull,0x000000000000007Aull,0x00000000000000FAull,
0x0000000000000006ull,0x0000000000000086ull,0x0000000000000046ull,0x00000000000000C6ull,0x0000000000000026ull,0x00000000000000A6ull,0x0000000000000066ull,0x00000000000000E6ull,
0x0000000000000016ull,0x0000000000000096ull,0x0000000000000056ull,0x00000000000000D6ull,0x0000000000000036ull,0x00000000000000B6ull,0x0000000000000076ull,0x00000000000000F6ull,
0x000000000000000Eull,0x000000000000008Eull,0x000000000000004Eull,0x00000000000000CEull,0x000000000000002Eull,0x00000000000000AEull,0x000000000000006Eull,0x00000000000000EEull,
0x000000000000001Eull,0x000000000000009Eull,0x000000000000005Eull,0x00000000000000DEull,0x000000000000003Eull,0x00000000000000BEull,0x000000000000007Eull,0x00000000000000FEull,
0x0000000000000001ull,0x0000000000000081ull,0x0000000000000041ull,0x00000000000000C1ull,0x0000000000000021ull,0x00000000000000A1ull,0x0000000000000061ull,0x00000000000000E1ull,
0x0000000000000011ull,0x0000000000000091ull,0x0000000000000051ull,0x00000000000000D1ull,0x0000000000000031ull,0x00000000000000B1ull,0x0000000000000071ull,0x00000000000000F1ull,
0x0000000000000009ull,0x0000000000000089ull,0x0000000000000049ull,0x00000000000000C9ull,0x0000000000000029ull,0x00000000000000A9ull,0x0000000000000069ull,0x00000000000000E9ull,
0x0000000000000019ull,0x0000000000000099ull,0x0000000000000059ull,0x00000000000000D9ull,0x0000000000000039ull,0x00000000000000B9ull,0x0000000000000079ull,0x00000000000000F9ull,
0x0000000000000005ull,0x0000000000000085ull,0x0000000000000045ull,0x00000000000000C5ull,0x0000000000000025ull,0x00000000000000A5ull,0x0000000000000065ull,0x00000000000000E5ull,
0x0000000000000015ull,0x0000000000000095ull,0x0000000000000055ull,0x00000000000000D5ull,0x0000000000000035ull,0x00000000000000B5ull,0x0000000000000075ull,0x00000000000000F5ull,
0x000000000000000Dull,0x000000000000008Dull,0x000000000000004Dull,0x00000000000000CDull,0x000000000000002Dull,0x00000000000000ADull,0x000000000000006Dull,0x00000000000000EDull,
0x000000000000001Dull,0x000000000000009Dull,0x000000000000005Dull,0x00000000000000DDull,0x000000000000003Dull,0x00000000000000BDull,0x000000000000007Dull,0x00000000000000FDull,
0x0000000000000003ull,0x0000000000000083ull,0x0000000000000043ull,0x00000000000000C3ull,0x0000000000000023ull,0x00000000000000A3ull,0x0000000000000063ull,0x00000000000000E3ull,
0x0000000000000013ull,0x0000000000000093ull,0x0000000000000053ull,0x00000000000000D3ull,0x0000000000000033ull,0x00000000000000B3ull,0x0000000000000073ull,0x00000000000000F3ull,
0x000000000000000Bull,0x000000000000008Bull,0x000000000000004Bull,0x00000000000000CBull,0x000000000000002Bull,0x00000000000000ABull,0x000000000000006Bull,0x00000000000000EBull,
0x000000000000001Bull,0x000000000000009Bull,0x000000000000005Bull,0x00000000000000DBull,0x000000000000003Bull,0x00000000000000BBull,0x000000000000007Bull,0x00000000000000FBull,
0x0000000000000007ull,0x0000000000000087ull,0x0000000000000047ull,0x00000000000000C7ull,0x0000000000000027ull,0x00000000000000A7ull,0x0000000000000067ull,0x00000000000000E7ull,
0x0000000000000017ull,0x0000000000000097ull,0x0000000000000057ull,0x00000000000000D7ull,0x0000000000000037ull,0x00000000000000B7ull,0x0000000000000077ull,0x00000000000000F7ull,
0x000000000000000Full,0x000000000000008Full,0x000000000000004Full,0x00000000000000CFull,0x000000000000002Full,0x00000000000000AFull,0x000000000000006Full,0x00000000000000EFull,
0x000000000000001Full,0x000000000000009Full,0x000000000000005Full,0x00000000000000DFull,0x000000000000003Full,0x00000000000000BFull,0x000000000000007Full,0x00000000000000FFull
};

union Encoder {
    uint8_t b[8];
    uint64_t data;
};

uint64_t encode(uint64_t data)
{
    union Encoder e;
    e.data = data;
    return t0[e.b[0]] | t1[e.b[1]] | t2[e.b[2]] | t3[e.b[3]] | t4[e.b[4]] | t5[e.b[5]] | t6[e.b[6]] | t7[e.b[7]];
}

/* Test */

#include <stdio.h>

void t(uint64_t v)
{
    printf("%016llX -> %016llX\n", v, encode(v));
}

int main()
{
    uint64_t v=1;
    int i;

    for(i=0;i<64; i++, v<<=1)
    {
        t(v);
    }

    t(0x0123456789ABCDEFull);
}

После строки /* Test */ специально для вас написал тестовый кусок.

Вот выхлоп:

0000000000000001 -> 8000000000000000
0000000000000002 -> 4000000000000000
0000000000000004 -> 2000000000000000
0000000000000008 -> 1000000000000000
0000000000000010 -> 0800000000000000
0000000000000020 -> 0400000000000000
0000000000000040 -> 0200000000000000
0000000000000080 -> 0100000000000000
0000000000000100 -> 0080000000000000
0000000000000200 -> 0040000000000000
0000000000000400 -> 0020000000000000
0000000000000800 -> 0010000000000000
0000000000001000 -> 0008000000000000
0000000000002000 -> 0004000000000000
0000000000004000 -> 0002000000000000
0000000000008000 -> 0001000000000000
0000000000010000 -> 0000800000000000
0000000000020000 -> 0000400000000000
0000000000040000 -> 0000200000000000
0000000000080000 -> 0000100000000000
0000000000100000 -> 0000080000000000
0000000000200000 -> 0000040000000000
0000000000400000 -> 0000020000000000
0000000000800000 -> 0000010000000000
0000000001000000 -> 0000008000000000
0000000002000000 -> 0000004000000000
0000000004000000 -> 0000002000000000
0000000008000000 -> 0000001000000000
0000000010000000 -> 0000000800000000
0000000020000000 -> 0000000400000000
0000000040000000 -> 0000000200000000
0000000080000000 -> 0000000100000000
0000000100000000 -> 0000000080000000
0000000200000000 -> 0000000040000000
0000000400000000 -> 0000000020000000
0000000800000000 -> 0000000010000000
0000001000000000 -> 0000000008000000
0000002000000000 -> 0000000004000000
0000004000000000 -> 0000000002000000
0000008000000000 -> 0000000001000000
0000010000000000 -> 0000000000800000
0000020000000000 -> 0000000000400000
0000040000000000 -> 0000000000200000
0000080000000000 -> 0000000000100000
0000100000000000 -> 0000000000080000
0000200000000000 -> 0000000000040000
0000400000000000 -> 0000000000020000
0000800000000000 -> 0000000000010000
0001000000000000 -> 0000000000008000
0002000000000000 -> 0000000000004000
0004000000000000 -> 0000000000002000
0008000000000000 -> 0000000000001000
0010000000000000 -> 0000000000000800
0020000000000000 -> 0000000000000400
0040000000000000 -> 0000000000000200
0080000000000000 -> 0000000000000100
0100000000000000 -> 0000000000000080
0200000000000000 -> 0000000000000040
0400000000000000 -> 0000000000000020
0800000000000000 -> 0000000000000010
1000000000000000 -> 0000000000000008
2000000000000000 -> 0000000000000004
4000000000000000 -> 0000000000000002
8000000000000000 -> 0000000000000001
0123456789ABCDEF -> F7B3D591E6A2C480

 

32 minutes ago, jcxz said:

PS: Дальнейшую дискуссию с вами прекращаю, так как вижу, что бессмысленно.

Т.е. слились. Как и следовало ожидать

 

PS. В примере закодирован своп битов (0->63, 1->62 и т.д.)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, xvr сказал:

Т.е. вы не в состоянии завернуть строку кода в функцию и проверить? (Почему то я не удивлён)

Я всего лишь добиваюсь, чтобы вы сами это сделали. Чтобы не говорили потом, что это "я неправильно вас понял" или "вы совсем не это имели в виду".

Чтобы сами убедились в бесперспективности своего способа.

Цитата

Держите:


union Encoder {
    uint8_t b[8];
    uint64_t data;
};

uint64_t encode(uint64_t data)
{
    union Encoder e;
    e.data = data;
    return t0[e.b[0]] | t1[e.b[1]] | t2[e.b[2]] | t3[e.b[3]] | t4[e.b[4]] | t5[e.b[5]] | t6[e.b[6]] | t7[e.b[7]];
}

И разве здесь не очевидно, что это будет работать КРАЙНЕ медленно? Это даже если потратить так неэффективно 16КБ внутренней быстрой ОЗУ?

Располагаем массивы во внутреннем быстром ОЗУ, компилим при максимальной оптимизации, выполняем (при запрещённых прерываниях) на CM4, получаем время выполнения = ~99 тактов!

Это при том, что тот код, который я приводил, на ту же самую операцию тратит 85 тактов. На том же МК. Без всяких гигантских таблиц

А в реальности таблицы будут во флешь, а значит время выполнения может ещё многократно увеличиться.

Так в чём же смысл вашего табличного метода?

 

Цитата

Т.е. слились. Как и следовало ожидать

Я не понимаю к чему все эти "слились", "корона не жмёт" о которой вы всё время талдычите? Когда обсуждается чисто технический вопрос. У вас какие-то проблемы в личном плане?  :unknw:

Сливались до сих пор только вы. Когда отказывались предоставить рабочий код, чтобы наглядно показать вам всю бесперспективность вашего способа. И как только его предоставили - всё стало совершенно очевидно. Теперь любой может проверить сам и убедиться.

 

PS: Ещё вопросы есть? или теперь даже до вас дошло, что ваш метод бесполезный?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, xvr сказал:

PS. В примере закодирован своп битов (0->63, 1->62 и т.д.)

И да - причём тут "своп битов" если задача состояла совсем в другом?

Ваш результат - неверный. Решение - неверное.

Правильное решение задачи будет? Или продолжите в том же духе пустой звон?

 

PS: А своп битов делается 2-мя командами RBIT. Это всего 2 такта(!) (не считая загрузки/выгрузки). И не требует воротить тонну быдлокода.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, jcxz сказал:

Как уже писал: bit-band в этой задаче - самый медленный способ.

Ок. Я тут прикинул:

void func_bb(void *p)
{
 8000600:	e92d 41f0 	stmdb	sp!, {r4, r5, r6, r7, r8, lr}
	volatile int	*dst, *src;
	for(int n = 0; n < 8; n++)
 8000604:	2400      	movs	r4, #0
	{
		dst = &RAM_BIT_ADDR(&stat_video_digit[0], n_pos[n]);
 8000606:	4d14      	ldr	r5, [pc, #80]	; 8000658 stat_video_digit
 8000608:	4a14      	ldr	r2, [pc, #80]	; 800065c digit_video
 800060a:	4f15      	ldr	r7, [pc, #84]	; 8000660 n_pos
		for(int j = 0; j < VALUE_SIZE; j++)
		{
			src = &RAM_BIT_ADDR(&digit_video[n * VALUE_SIZE + j], 7);
 800060c:	f8df e054 	ldr.w	lr, [pc, #84]	; 8000664 bb
		dst = &RAM_BIT_ADDR(&stat_video_digit[0], n_pos[n]);
 8000610:	016d      	lsls	r5, r5, #5
 8000612:	0152      	lsls	r2, r2, #5
 8000614:	4616      	mov	r6, r2
 8000616:	f817 3b01 	ldrb.w	r3, [r7], #1
 800061a:	ea45 0383 	orr.w	r3, r5, r3, lsl #2
 800061e:	f043 5308 	orr.w	r3, r3, #570425344	; 0x22000000
		for(int j = 0; j < VALUE_SIZE; j++)
 8000622:	f503 7180 	add.w	r1, r3, #256	; 0x100
 8000626:	f503 63a0 	add.w	r3, r3, #1280	; 0x500
 800062a:	f5a1 7080 	sub.w	r0, r1, #256	; 0x100
			src = &RAM_BIT_ADDR(&digit_video[n * VALUE_SIZE + j], 7);
 800062e:	ea46 0c0e 	orr.w	ip, r6, lr
			for(int i = 0; i < 8; i++)
			{
				*dst = *src;
 8000632:	f85c 8904 	ldr.w	r8, [ip], #-4
 8000636:	f840 8b20 	str.w	r8, [r0], #32
			for(int i = 0; i < 8; i++)
 800063a:	4288      	cmp	r0, r1
 800063c:	d1f9      	bne.n	8000632 ; 8 times * (ldr + str + cmp + bne) = 32 = LOOP1
 800063e:	f500 7180 	add.w	r1, r0, #256	; 0x100
		for(int j = 0; j < VALUE_SIZE; j++)
 8000642:	428b      	cmp	r3, r1
 8000644:	f106 0620 	add.w	r6, r6, #32
 8000648:	d1ef      	bne.n	800062a ; 4 times * (LOOP1 + sub + orr + add + cmp + add + bne) = 152 = LOOP2
	for(int n = 0; n < 8; n++)
 800064a:	3401      	adds	r4, #1
 800064c:	2c08      	cmp	r4, #8
 800064e:	f102 0280 	add.w	r2, r2, #128	; 0x80
 8000652:	d1df      	bne.n	8000614 ; 8 times * (LOOP2 + mov + ldrb + orr * 2 + add * 2 + cmp + bne) = 1280
				src -= 1;
				dst += 8;
			}
		}
	}
}
 8000654:	e8bd 81f0 	ldmia.w	sp!, {r4, r5, r6, r7, r8, pc} ; total = LOOP3 + 9 = 1290
 8000658:	0000022c 	.word	0x0000022c ; stat_video_digit
 800065c:	2000024c 	.word	0x2000024c ; digit_video
 8000660:	08003ead 	.word	0x08003ead ; n_pos
 8000664:	2200001c 	.word	0x2200001c ; bb

Получается 1290 инструкций. Пусть в среднем 2 такта на инструкцию и увеличим число инструкций до 1800. При развертке 100 Гц получается 360к тактов, что при 72 МГц тактовой частоты дает нагрузку 0.5%. Ядро Cortex-M3.

Добавьте в ваш код таблицу n_pos. Она константная, поэтому будем считать, что ничего не изменяется в плане быстродействия, но в плане сопровождения просто хочется видеть насколько это муторно.

У вас код 85 тактов. Умножаем на 4 (VALUE_SIZE) получается 340, т.е. примерно в 8 раз быстрее.

Кста, размер кода у меня порядка 100 байт, у вас - в три * 4 раза больше. Т.е. по размеру я выигрываю в 12 раз ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, adnega сказал:

У вас код 85 тактов. Умножаем на 4 (VALUE_SIZE) получается 340, т.е. примерно в 8 раз быстрее.

Мой тот код - он для Cortex-M4 и не будет работать на CM3. Писал там же об этом. На CM3 придётся выполнить ~64 пары UBFX/BFI. Но всё равно это должно быть многократно быстрее bit-band. Не в 8 раз, а в 4-5 наверное.

3 минуты назад, adnega сказал:

Кста, размер кода у меня порядка 100 байт, у вас - в три * 4 раза больше. Т.е. по размеру я выигрываю в 12 раз ;)

Ну понятно: при оптимизации часто так - чем-то нужно жертвовать. Или скоростью или размером. Если бы речь шла об оптимизации размера, я бы сделал всё равно не на bit-band, а в регистрах CPU. И ещё неизвестно что имело бы меньший размер. Но даже в таком виде - быстрее было бы в регистрах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, jcxz сказал:

Не в 8 раз, а в 4-5 наверное.

На самом деле исходные 8 байт идут не подряд, а с некоторым шагом (например, 4 байта). Походу, ваш алгоритм от этого становится менее быстрым.

Кста, в некоторых случаях шаг может быть значительно больше, и даже не степень двойки (например, 32 + 4 = 36).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, adnega сказал:

На самом деле исходные 8 байт идут не подряд, а с некоторым шагом (например, 4 байта). Походу, ваш алгоритм от этого становится менее быстрым.

Тогда чтение будет не 3 такта, а чуть больше. В худшем случае добавятся 16-3=13 тактов. Непринципиально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...