Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unsigned int BranchlessABS(signed long long Value)
- {
- unsigned long long Result; // the result goes here
- signed long long const Mask = Value >> sizeof(unsigned long long) * CHAR_BIT - 1;
- Result = (Value + Mask) ^ Mask;
- return Result;
- }
- unsigned long long BranchlessAbsolute(const signed long long Value) {
- unsigned long long Result = 0ULL;
- unsigned long long const Mask = Value >> sizeof(unsigned long long) * CHAR_BIT - 1;
- Result = (Value + Mask) ^ Mask;
- return Result;
- }
- I rewrote your version to be more descriptive, and to use the same sized ints I was, Your version is called BranchlessABS, My version is called BranchlessAbsolute.
- Here's the results for the compiling.
- ARM64 GCC 6.3:
- BranchlessABS(long long):
- add x1, x0, x0, asr 63
- eor x0, x1, x0, asr 63
- ret
- BranchlessAbsolute(long long):
- add x1, x0, x0, asr 63
- eor x0, x1, x0, asr 63
- ret
- x86_64 Clang 5.0:
- BranchlessABS(long long): # @BranchlessABS(long long)
- mov rax, rdi
- sar rax, 63
- add edi, eax
- xor edi, eax
- mov eax, edi
- ret
- BranchlessAbsolute(long long): # @BranchlessAbsolute(long long)
- mov rcx, rdi
- sar rcx, 63
- lea rax, [rdi + rcx]
- xor rax, rcx
- ret
- MIPS64 GCC 5.4:
- BranchlessABS(long long):
- dsra $2,$4,63
- daddu $4,$4,$2
- xor $2,$4,$2
- j $31
- sll $2,$2,0
- BranchlessAbsolute(long long):
- dsra $2,$4,63
- daddu $4,$4,$2
- j $31
- xor $2,$4,$2
- Why does my version consistently use one less instruction than yours, and why do they use different shifting instructions?
- Here's the link to the online compiler: https://godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAKxAEZSBnVAV2OUxAHIBSAJgGY8AO2QAbZlgDU3fgGFReALaEGAOgQzs3AAwBBPoJHipM2QwLoFAI3Wad%2BvcyEM8wIZnSThBSVdEB9AEMrBghvSQA3AEp7bgB2ACFY7QBOJxc3Dy8hH2IZBMlJAHoiyQIETEliTAZmUR9gVBrJCurpPR0U8LRnH0VAhgBraX4AEUiRrX5sSRcAL0xUADMwnKjJACpJWQAJXQAlfwSASQAVSQBaSVp85IcU4hHxiAjpXgL%2BofXuAFYZz8Gtw6qWqBFYQiqQP0cVGd3SrncnnCViCIVWPmisUSyS6S0kLxGskk2hiwJSnVB4MuEShFMwYOIEJp/CSHRhcOcCKyyN4qNC4UxbNZ9zweIJpmJpPu8WFnTpDIhAD9XnwCjcWTj4rDgfdKYzIrT2Tr4ZkkTlJNY%2BejIlKZTi9RDgqFMRq2aNOFFSKIuD9OKQhFxtH7UFxZKrVbMWGxKgZaH6CIGPZ7BnQUqoUnF%2BHFtJm4ileD9CykvVwACx%2BgOcIOkEOcP0MEDaUgJqse0hwWBINCKAAOeFEmDIFAg3b7A%2BIIGAcV4pCW/YIg4bECsidIVmEgWIAE8uHHSN3FJgcgB5ISiHet0hYfpCYAD1f4arIAh4CI1VeYAAemGQzAXu79bxMG9S8CGIJQAM9awG0gT1UB7F9UGcLgLmPfh6yjdg6FIAB3QITwQ44hCWWs4ygn0K1XWtPwADgANguOjS0kYBkGQSQ4lUXh8VwQgSDefh6G2VBe37QcBNoKJ40TKJkxAXhtFUbReDo3h81UnNSy0/gS04ct/Sorh60bZsZPbGBEBQESx0HchKFHMSJzEfDgB%2BbQmznepF0oFdL3XIRNwvPcDyPAhT3PB9MBvO8OEvR8fxfN8G0vL8fz/WK9yAkDqzAiDWygvAQngOCELwJDktQ9DGEwjhJN030DMvaj6MY5jnNvSQfiUpSePwIhHljUhhNE8cBN4KTTPyuSFKU9y5vm%2BbS10/TK2rWtjKbFsg09DtLIc8c7JHazHJATdFCY4A6P4Dz5285dV38wKAP3ETDxPM8L2ra8XPvOK8CfRL3xS79f3/ThMpyYDV1yxQzOg4qa1K8qULQjDWCwuqQIa1bgy4A4AFkmJYtjJDo1R%2BB6iBeP6iShtkY7RoMfgJq2pNSBTGaFq5ualpAlbDLrRgTNZnaLIgLsGds4d9sHEBlB7BgfiY2dbuIJdfOrR7t2ekL3oiuKop%2B2Kvv%2BhLXyB6tUtBjLAMh7L43A2H8q9QqYIgErEOQzhKrR6M6HIzhsYF/HjgABQAZSJ1j2K65iqb6/jBuGmyBoEUsWZk6bFO57nebLSimqMoXNsz3TeALtai5Fz03zVsqA1LIA%3D
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement