# Simd operation for combining multiple u64 values

**URL:** <https://ziggit.dev/t/simd-operation-for-combining-multiple-u64-values/16647>\
**Category:** Help\
**Tags:** language\
**Created:** [July 11, 2026, 8:28am UTC](https://ziggit.dev/t/simd-operation-for-combining-multiple-u64-values/16647 "2026-07-11T08:28:57Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![ericlang](https://ziggit.dev/user_avatar/ziggit.dev/ericlang/32/8515_2.png) [@ericlang](https://ziggit.dev/u/ericlang)\
**Post date:** [July 11, 2026, 8:28am UTC](https://ziggit.dev/t/simd-operation-for-combining-multiple-u64-values/16647/1 "2026-07-11T08:28:57Z")

</div>

I have (almost) never done anything with simd operations. Time to play around with it.  
When I want to bitwise combine the following (chess) struct would that be a good candidate for simd (instead of ‘manually’ combine all fields with another `Threats` struct)?  
Operations like `and, or, xor`.  
Or something like `~self`.

```zig
pub const Threats = struct {
    by_pawns: u64 = 0,
    by_knights: u64 = 0,
    by_bishops: u64 = 0,
    by_rooks: u64 = 0,
    by_queens: u64 = 0,
    by_king: u64 = 0,
};

```

---

<div class="post-metadata">

**Author:** ![IntegratedQuantum](https://ziggit.dev/user_avatar/ziggit.dev/integratedquantum/32/782_2.png) [@IntegratedQuantum](https://ziggit.dev/u/IntegratedQuantum)\
**Post date:** [July 11, 2026, 8:47am UTC](https://ziggit.dev/t/simd-operation-for-combining-multiple-u64-values/16647/2 "2026-07-11T08:47:30Z")

</div>

Yes it would make sense to use vectors here, the resulting assembly code can get a lot simpler and the code you write yourself is also shorter and less prone to copy-paste mistakes.  
See a comparison on [godbolt](https://godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYgATKVpMGoAF55gpJfWQE8Ayo3QBhVLQCuLBiABsAVlInABk8BkwAOU8AI0xifQBmUgAHVAVCewZXDy9fAJS0uwEQsMiWGLi9ROtMWwyhAiZiAizPb38rTBtChnrGgmKI6NiEqwamlpz2hTH%2B0MGy4cqASitUd2Jkdg40BmmAamn0PYBSeIARPYABPBYUpohjvT1Dx70l04AhY40AQW%2BfpLuKJ7Hb7AAqCGImCYBAUJ3OeySTGQAGtMEdpsR3LYTgB2L6/PZEvZRACeAH0kQB3XYgPbuHySeEXDSkf7EkkUlEMCwIWF0hlM04stmE4lk8lRPAKBCoJIKAWM5l7Vns8UU4ioVAohX0pXClWin4ciUAR3cmEYusFytVYqJEpRoVAeqFCLtf1xZ0%2B/3%2BgOBmFUdwIeyoDD2JDBxCY%2BG6YggBEh0NhPzpACpQSGIVCYQpSHtEznYR905m9tnk3m9lCFO5aAR0xXc0s9gA3VB4I7HfFqok1usEAB0aeVg%2B7BONHOJg4l1N2ysLlZ%2BM4pc7h3ecBaTuY%2BK8pTBped7U733N5sIX25Tp55wD569xm8XO5v56P9pPEqlMrl64Rz%2BvL9pVleU8SfK8FF3ICf3lI0p2nCVNW1P8LgAhRl0QrUdTArci0gvckJ1OD4L2PdzUtecDTQjCKXIq0cLQqDaItK1iPg09nUvPCaPJJ0TAYiCmN4502Lxb14gnbtvV%2BP0gT2QNg1DcMSCEG50ATCDUz2DMBHBCD80Y0tdKzfTq0wWt60bCCW3bTs8QnDky1bGoiGILTLgANRckgIB8fNBRbA1LilZomGmDTuOHd4JOPJzvOIEsri82wfL811AoRYLCGcMKCAiytdzTaKHOJft62HZUstC8LnJStycNq1yPmK30vX%2BDgVloTg/F4bwOC0UhUE4AAtCwDjWDZMBOSo9F4Bt%2Bo6lYEGhLA4ggFYURASQAE5B3iAAOXE/H2jRjv2874j8bbDE4SReBYCQNFZPqBqGjheAVVl5q0FY4FgJA0FuOhYnIShAaSYG4lMDQuB8VkaHrWIFQgKJNF4KVmGIUlOB4UgMcaUkAHkom0Fycd4QG2EEQmGFobGFtILAoncYActoWgFW4XgsBYYxgHEBn8ChWpnM5gbAxqdwCC2AbQmlrqGdoPAomjLHXCwNHSAIYgbnJ0hnOIKJUkwM5MF5kwlZMNGVioIxgAUDy8EwKlCaSRg9f4QQRDEdgpBkQRFBUdQGd0AwjCt8xLCVqIFUgFY5W6TmAFpCYAJU6aElAAMVy3hUANnWsFj9aOi6DJHAYFw3FaCRAkrgZSnKWv8nSAQJm8LhklSVuGAboY4k76pagEXpxmrnJB4z4eehmPuFgH0Y%2Bnb2vpj6Oem64FYFAmzZ9E67res1t69kjlVB1hwcND2CBcEIEhpviN45utpaVuGEvNr8DRBx8Lg9EkLg20AFcBAYyRICs7qkAelwJ6pAXp504B9EAX0X43Q4LNOBR9EFa1QQbNIDhJBAA%3D) (which is a great tool for answering these kinds of questions)

---

<div class="post-metadata">

**Author:** ![ericlang](https://ziggit.dev/user_avatar/ziggit.dev/ericlang/32/8515_2.png) [@ericlang](https://ziggit.dev/u/ericlang)\
**Post date:** [July 11, 2026, 9:19am UTC](https://ziggit.dev/t/simd-operation-for-combining-multiple-u64-values/16647/3 "2026-07-11T09:19:38Z")

</div>

Thank you very much! Thats enough to get me started.

---

<div class="post-metadata">

**Author:** ![Plebosaur](https://ziggit.dev/user_avatar/ziggit.dev/plebosaur/32/6857_2.png) [@Plebosaur](https://ziggit.dev/u/Plebosaur)\
**Post date:** [July 11, 2026, 12:32pm UTC](https://ziggit.dev/t/simd-operation-for-combining-multiple-u64-values/16647/4 "2026-07-11T12:32:02Z")

</div>

Yes Vectors 100%  
A pattern that I like to use in cases like this is to use a union:

```zig
pub const Threats = extern union {
    breakdown: extern struct {
        by_pawns: u64 = 0,
        by_knights: u64 = 0,
        by_bishops: u64 = 0,
        by_rooks: u64 = 0,
        by_queens: u64 = 0,
        by_king: u64 = 0,
    },
    arr: [6]u64,
}

```

Now you can convert very eazily between vectors and Threats with  
const vec: @Vector(6, u64) = t.arr;  
If it was size 8 you could also put the vector in the union, but because the size is 6, if you put a vector in that union it will increase its size.

---

<div class="post-metadata">

**Author:** ![ericlang](https://ziggit.dev/user_avatar/ziggit.dev/ericlang/32/8515_2.png) [@ericlang](https://ziggit.dev/u/ericlang)\
**Post date:** [July 11, 2026, 12:37pm UTC](https://ziggit.dev/t/simd-operation-for-combining-multiple-u64-values/16647/5 "2026-07-11T12:37:18Z")

</div>

Now that is a great trick! I actually looked for something like this several times.
