Advertisement
Guest User

Untitled

a guest
Sep 21st, 2019
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.36 KB | None | 0 0
  1. void matrix2d_fill(uint8_t** ptr, const uint32_t x, const uint32_t y, const uint8_t val)
  2. {
  3.     const uint64_t val64 = (uint64_t)(((uint64_t)(val) << 56)   |
  4.                                    ((uint64_t)(val)  << 48) |
  5.                                    ((uint64_t)(val)  << 40) |
  6.                                    ((uint64_t)(val)  << 32) |
  7.                                    ((uint64_t)(val)  << 24) |
  8.                                    ((uint64_t)(val)  << 16) |
  9.                                    ((uint64_t)(val)  << 8)  |
  10.                                    ((uint64_t)(val))        );
  11.     uint64_t size       = x * y;
  12.     uint64_t iterator64 = size / 8;
  13.     uint64_t balance64  = size - (iterator64 * 8);
  14.     uint64_t iterator32 = balance64 / 8;
  15.     uint64_t balance32  = balance64 - 4;
  16.     uint64_t iterator16 = balance32 / 8;
  17.     uint64_t balance16  = balance32 - 2;
  18.     uint64_t iterator8  = balance16 / 8;
  19.     uint64_t balance8   = (balance16 == 1);
  20.     uint64_t* begin64   = (uint64_t*)ptr;
  21.     uint64_t* end64     = (uint64_t*)(ptr + balance64);
  22.     uint32_t* begin32   = (uint32_t*)end64;
  23.     uint32_t* end32     = (uint32_t*)(begin32 + balance32);
  24.     uint16_t* begin16   = (uint16_t*)end32;
  25.     uint16_t* end16     = (uint16_t*)(begin16 + balance16);
  26.     uint8_t* begin8     = (uint8_t*)end16;
  27.     uint8_t* end8       = (uint8_t*)(begin8 + balance8);
  28.     for(;begin64 < end64; begin64++)
  29.         *begin64 = val64;
  30.     for(;begin32 < end32; begin32++)
  31.         *begin32 = (uint32_t)val64;
  32.     for(;begin16 < end16; begin16++)
  33.         *begin16 = (uint16_t)val64;
  34.     for(;begin8 < end8; begin8++)
  35.         *begin8 = (uint8_t)val64;
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement