Skip to content

Instantly share code, notes, and snippets.

@alexey-milovidov
Created November 1, 2019 15:21
Show Gist options
  • Select an option

  • Save alexey-milovidov/55092ce63210d55b51d1e19922ed0fd5 to your computer and use it in GitHub Desktop.

Select an option

Save alexey-milovidov/55092ce63210d55b51d1e19922ed0fd5 to your computer and use it in GitHub Desktop.
#include <vector>
#include <cstdint>
using uint8_no_alias = unsigned int __attribute__((mode(QI)));
struct uint8_struct
{
uint8_t value;
operator const uint8_t & () const { return value; }
operator uint8_t & () { return value; }
};
void __attribute__((__noinline__)) vector8_inc(std::vector<uint8_t>& v)
{
for (size_t i = 0; i < v.size(); i++)
v[i]++;
}
void __attribute__((__noinline__)) vector32_inc(std::vector<uint32_t> & v)
{
for (size_t i = 0; i < v.size(); i++)
v[i]++;
}
void __attribute__((__noinline__)) vector8_inc_no_alias(std::vector<uint8_no_alias> & v)
{
for (size_t i = 0; i < v.size(); i++)
v[i]++;
}
void __attribute__((__noinline__)) vector8_inc_struct(std::vector<uint8_struct> & v)
{
for (size_t i = 0; i < v.size(); i++)
v[i].value++;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment