Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void matrix2d_fill(uint8_t** ptr, const uint32_t x, const uint32_t y, const uint8_t val)
- {
- const uint64_t val64 = (uint64_t)(((uint64_t)(val) << 56) |
- ((uint64_t)(val) << 48) |
- ((uint64_t)(val) << 40) |
- ((uint64_t)(val) << 32) |
- ((uint64_t)(val) << 24) |
- ((uint64_t)(val) << 16) |
- ((uint64_t)(val) << 8) |
- ((uint64_t)(val)) );
- uint64_t size = x * y;
- uint64_t iterator64 = size / 8;
- uint64_t balance64 = size - (iterator64 * 8);
- uint64_t iterator32 = balance64 / 8;
- uint64_t balance32 = balance64 - 4;
- uint64_t iterator16 = balance32 / 8;
- uint64_t balance16 = balance32 - 2;
- uint64_t iterator8 = balance16 / 8;
- uint64_t balance8 = (balance16 == 1);
- uint64_t* begin64 = (uint64_t*)ptr;
- uint64_t* end64 = (uint64_t*)(ptr + balance64);
- uint32_t* begin32 = (uint32_t*)end64;
- uint32_t* end32 = (uint32_t*)(begin32 + balance32);
- uint16_t* begin16 = (uint16_t*)end32;
- uint16_t* end16 = (uint16_t*)(begin16 + balance16);
- uint8_t* begin8 = (uint8_t*)end16;
- uint8_t* end8 = (uint8_t*)(begin8 + balance8);
- for(;begin64 < end64; begin64++)
- *begin64 = val64;
- for(;begin32 < end32; begin32++)
- *begin32 = (uint32_t)val64;
- for(;begin16 < end16; begin16++)
- *begin16 = (uint16_t)val64;
- for(;begin8 < end8; begin8++)
- *begin8 = (uint8_t)val64;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement