# Checking the generated assembly # ## The test ## In `asm_test.cpp` you can find a small program that asks the user for three input floats. The program will add these values together and use the int result as its return value. You can compile different versions of this program so you can compare the binaries: with or without VectorWrapper (`-DWITH_VWR`) and using `std::array` (`-DUSE_STD_ARRAY`) (which will force VectorWrapper's implementation to go through the `get_at()` implementation rather than using the offset-based one) or using just a plain struct. Please have a look at the source code, it's very short. ## Compiling ## You can compile four different binaries with the following commands: ``` g++ -o bin_vwr -O3 -std=gnu++14 asm_test.cpp -DWITH_VWR g++ -o bin_vwr_array -O3 -std=gnu++14 asm_test.cpp -DWITH_VWR -DUSE_STD_ARRAY g++ -o bin_plain -O3 -std=gnu++14 asm_test.cpp g++ -o bin_plain_array -O3 -std=gnu++14 asm_test.cpp -DUSE_STD_ARRAY ``` * bin_vwr will use VectorWrapper and the custom struct (offset based accessors) * bin_vwr_array will use VectorWrapper and `std::array` (`get_at()` method based accessors) * bin_plain will use the custom struct directly, without VectorWrapper * bin_plain_array will use `std::array` directly, without VectorWrapper ## Running ## An input file is provided for convenience. You can run each binary like: ``` ./bin_vwr < sample_input.txt ``` but of course using a debugger will give you some insight: ``` gdb ./bin_vwr break main layout asm run < sample_input.txt ni ... ``` ## Results ## On my system (amd64, g++ 8.3.0) this generates four identical binaries (you can check their hash). Feel free to insert bad syntax in the code to make sure that you're indeed compiling different ifdef branches. This is enough to say that at least in this simple case VectorWrapper has no overhead.