Skip to content

Instantly share code, notes, and snippets.

@chfast
Created March 17, 2017 09:24
Show Gist options
  • Save chfast/dc7cfb070947f703e57c25dc3cbb79f7 to your computer and use it in GitHub Desktop.
Save chfast/dc7cfb070947f703e57c25dc3cbb79f7 to your computer and use it in GitHub Desktop.
Compare global constant boost::multiprecision
#include <boost/multiprecision/cpp_int.hpp>
using u256 = boost::multiprecision::number<boost::multiprecision::cpp_int_backend<256, 256, boost::multiprecision::unsigned_magnitude, boost::multiprecision::unchecked, void>>;
namespace
{
u256 const lowMask256 = 0xffffffffffffffff;
auto const lowMaskNative = 0xffffffffffffffff;
}
u256 getHighBits256(u256 x)
{
return x & lowMask256;
}
u256 getHighBitsNative(u256 x)
{
return x & lowMaskNative;
}
.text
.file "u256const.cpp"
.globl _Z14getHighBits256N5boost14multiprecision6numberINS0_8backends15cpp_int_backendILj256ELj256ELNS0_16cpp_integer_typeE0ELNS0_18cpp_int_check_typeE0EvEELNS0_26expression_template_optionE0EEE
.p2align 4, 0x90
.type _Z14getHighBits256N5boost14multiprecision6numberINS0_8backends15cpp_int_backendILj256ELj256ELNS0_16cpp_integer_typeE0ELNS0_18cpp_int_check_typeE0EvEELNS0_26expression_template_optionE0EEE,@function
_Z14getHighBits256N5boost14multiprecision6numberINS0_8backends15cpp_int_backendILj256ELj256ELNS0_16cpp_integer_typeE0ELNS0_18cpp_int_check_typeE0EvEELNS0_26expression_template_optionE0EEE: # @_Z14getHighBits256N5boost14multiprecision6numberINS0_8backends15cpp_int_backendILj256ELj256ELNS0_16cpp_integer_typeE0ELNS0_18cpp_int_check_typeE0EvEELNS0_26expression_template_optionE0EEE
.cfi_startproc
# BB#0:
pushq %rbx
.Lcfi0:
.cfi_def_cfa_offset 16
subq $48, %rsp
.Lcfi1:
.cfi_def_cfa_offset 64
.Lcfi2:
.cfi_offset %rbx, -16
movq %rdi, %rbx
movq $0, (%rsp)
movq $1, 32(%rsp)
movq %rsp, %rdi
movl $_ZN12_GLOBAL__N_1L10lowMask256E, %edx
callq _ZN5boost14multiprecision11default_ops24eval_bitwise_and_defaultINS0_8backends15cpp_int_backendILj256ELj256ELNS0_16cpp_integer_typeE0ELNS0_18cpp_int_check_typeE0EvEEEEvRT_RKS8_SB_
movaps (%rsp), %xmm0
movaps 16(%rsp), %xmm1
movaps %xmm1, 16(%rbx)
movaps %xmm0, (%rbx)
movq 32(%rsp), %rax
movq %rax, 32(%rbx)
movq %rbx, %rax
addq $48, %rsp
popq %rbx
retq
.Lfunc_end0:
.size _Z14getHighBits256N5boost14multiprecision6numberINS0_8backends15cpp_int_backendILj256ELj256ELNS0_16cpp_integer_typeE0ELNS0_18cpp_int_check_typeE0EvEELNS0_26expression_template_optionE0EEE, .Lfunc_end0-_Z14getHighBits256N5boost14multiprecision6numberINS0_8backends15cpp_int_backendILj256ELj256ELNS0_16cpp_integer_typeE0ELNS0_18cpp_int_check_typeE0EvEELNS0_26expression_template_optionE0EEE
.cfi_endproc
.globl _Z17getHighBitsNativeN5boost14multiprecision6numberINS0_8backends15cpp_int_backendILj256ELj256ELNS0_16cpp_integer_typeE0ELNS0_18cpp_int_check_typeE0EvEELNS0_26expression_template_optionE0EEE
.p2align 4, 0x90
.type _Z17getHighBitsNativeN5boost14multiprecision6numberINS0_8backends15cpp_int_backendILj256ELj256ELNS0_16cpp_integer_typeE0ELNS0_18cpp_int_check_typeE0EvEELNS0_26expression_template_optionE0EEE,@function
_Z17getHighBitsNativeN5boost14multiprecision6numberINS0_8backends15cpp_int_backendILj256ELj256ELNS0_16cpp_integer_typeE0ELNS0_18cpp_int_check_typeE0EvEELNS0_26expression_template_optionE0EEE: # @_Z17getHighBitsNativeN5boost14multiprecision6numberINS0_8backends15cpp_int_backendILj256ELj256ELNS0_16cpp_integer_typeE0ELNS0_18cpp_int_check_typeE0EvEELNS0_26expression_template_optionE0EEE
.cfi_startproc
# BB#0:
pushq %rbx
.Lcfi3:
.cfi_def_cfa_offset 16
subq $96, %rsp
.Lcfi4:
.cfi_def_cfa_offset 112
.Lcfi5:
.cfi_offset %rbx, -16
movq %rdi, %rbx
movq $0, (%rsp)
movq $1, 32(%rsp)
movq $-1, 48(%rsp)
movq $1, 80(%rsp)
movq %rsp, %rdi
leaq 48(%rsp), %rdx
callq _ZN5boost14multiprecision11default_ops24eval_bitwise_and_defaultINS0_8backends15cpp_int_backendILj256ELj256ELNS0_16cpp_integer_typeE0ELNS0_18cpp_int_check_typeE0EvEEEEvRT_RKS8_SB_
movaps (%rsp), %xmm0
movaps 16(%rsp), %xmm1
movaps %xmm1, 16(%rbx)
movaps %xmm0, (%rbx)
movq 32(%rsp), %rax
movq %rax, 32(%rbx)
movq %rbx, %rax
addq $96, %rsp
popq %rbx
retq
.Lfunc_end1:
.size _Z17getHighBitsNativeN5boost14multiprecision6numberINS0_8backends15cpp_int_backendILj256ELj256ELNS0_16cpp_integer_typeE0ELNS0_18cpp_int_check_typeE0EvEELNS0_26expression_template_optionE0EEE, .Lfunc_end1-_Z17getHighBitsNativeN5boost14multiprecision6numberINS0_8backends15cpp_int_backendILj256ELj256ELNS0_16cpp_integer_typeE0ELNS0_18cpp_int_check_typeE0EvEELNS0_26expression_template_optionE0EEE
.cfi_endproc
.section .text._ZN5boost14multiprecision11default_ops24eval_bitwise_and_defaultINS0_8backends15cpp_int_backendILj256ELj256ELNS0_16cpp_integer_typeE0ELNS0_18cpp_int_check_typeE0EvEEEEvRT_RKS8_SB_,"axG",@progbits,_ZN5boost14multiprecision11default_ops24eval_bitwise_and_defaultINS0_8backends15cpp_int_backendILj256ELj256ELNS0_16cpp_integer_typeE0ELNS0_18cpp_int_check_typeE0EvEEEEvRT_RKS8_SB_,comdat
.weak _ZN5boost14multiprecision11default_ops24eval_bitwise_and_defaultINS0_8backends15cpp_int_backendILj256ELj256ELNS0_16cpp_integer_typeE0ELNS0_18cpp_int_check_typeE0EvEEEEvRT_RKS8_SB_
.p2align 4, 0x90
.type _ZN5boost14multiprecision11default_ops24eval_bitwise_and_defaultINS0_8backends15cpp_int_backendILj256ELj256ELNS0_16cpp_integer_typeE0ELNS0_18cpp_int_check_typeE0EvEEEEvRT_RKS8_SB_,@function
_ZN5boost14multiprecision11default_ops24eval_bitwise_and_defaultINS0_8backends15cpp_int_backendILj256ELj256ELNS0_16cpp_integer_typeE0ELNS0_18cpp_int_check_typeE0EvEEEEvRT_RKS8_SB_: # @_ZN5boost14multiprecision11default_ops24eval_bitwise_and_defaultINS0_8backends15cpp_int_backendILj256ELj256ELNS0_16cpp_integer_typeE0ELNS0_18cpp_int_check_typeE0EvEEEEvRT_RKS8_SB_
.cfi_startproc
# BB#0:
pushq %r15
.Lcfi6:
.cfi_def_cfa_offset 16
pushq %r14
.Lcfi7:
.cfi_def_cfa_offset 24
pushq %r13
.Lcfi8:
.cfi_def_cfa_offset 32
pushq %r12
.Lcfi9:
.cfi_def_cfa_offset 40
pushq %rbx
.Lcfi10:
.cfi_def_cfa_offset 48
.Lcfi11:
.cfi_offset %rbx, -48
.Lcfi12:
.cfi_offset %r12, -40
.Lcfi13:
.cfi_offset %r13, -32
.Lcfi14:
.cfi_offset %r14, -24
.Lcfi15:
.cfi_offset %r15, -16
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %rbx
cmpq %r14, %rbx
je .LBB2_1
# BB#24:
cmpq %r15, %rbx
je .LBB2_25
# BB#48:
movq 32(%r15), %rax
movq %rax, 32(%rbx)
movq 32(%r15), %rax
shlq $3, %rax
movabsq $34359738360, %rdx # imm = 0x7FFFFFFF8
andq %rax, %rdx
movq %rbx, %rdi
movq %r15, %rsi
callq memcpy
movl 32(%rbx), %r13d
movq 32(%r14), %r15
cmpl %r15d, %r13d
movl %r13d, %r12d
cmovbl %r15d, %r12d
cmpl $4, %r12d
movl $4, %eax
cmovbl %r12d, %eax
cmpl %r15d, %r13d
movq %rax, 32(%rbx)
jae .LBB2_50
# BB#49:
leaq (%rbx,%r13,8), %rdi
movl %r13d, %eax
notl %eax
addl %r12d, %eax
leaq 8(,%rax,8), %rdx
xorl %esi, %esi
callq memset
jmp .LBB2_51
.LBB2_1:
movl 32(%rbx), %r13d
movq 32(%r15), %r14
cmpl %r14d, %r13d
movl %r13d, %r12d
cmovbl %r14d, %r12d
cmpl $4, %r12d
movl $4, %eax
cmovbl %r12d, %eax
cmpl %r14d, %r13d
movq %rax, 32(%rbx)
jae .LBB2_3
# BB#2:
leaq (%rbx,%r13,8), %rdi
movl %r13d, %eax
notl %eax
addl %r12d, %eax
leaq 8(,%rax,8), %rdx
xorl %esi, %esi
callq memset
jmp .LBB2_4
.LBB2_25:
movl 32(%rbx), %r13d
movq 32(%r14), %r15
cmpl %r15d, %r13d
movl %r13d, %r12d
cmovbl %r15d, %r12d
cmpl $4, %r12d
movl $4, %eax
cmovbl %r12d, %eax
cmpl %r15d, %r13d
movq %rax, 32(%rbx)
jae .LBB2_27
# BB#26:
leaq (%rbx,%r13,8), %rdi
movl %r13d, %eax
notl %eax
addl %r12d, %eax
leaq 8(,%rax,8), %rdx
xorl %esi, %esi
callq memset
jmp .LBB2_28
.LBB2_50:
testl %r15d, %r15d
je .LBB2_65
.LBB2_51:
movl %r15d, %eax
cmpq $3, %rax
jbe .LBB2_52
# BB#59:
movl %r15d, %r8d
andl $3, %r8d
movq %rax, %rcx
subq %r8, %rcx
je .LBB2_52
# BB#60:
leaq (%r14,%rax,8), %rdx
cmpq %rbx, %rdx
jbe .LBB2_62
# BB#61:
leaq (%rbx,%rax,8), %rdx
cmpq %r14, %rdx
jbe .LBB2_62
.LBB2_52:
xorl %ecx, %ecx
.LBB2_53:
movl %r15d, %esi
subl %ecx, %esi
leaq -1(%rax), %rdx
subq %rcx, %rdx
andq $3, %rsi
je .LBB2_56
# BB#54:
negq %rsi
.p2align 4, 0x90
.LBB2_55: # =>This Inner Loop Header: Depth=1
movq (%r14,%rcx,8), %rdi
andq %rdi, (%rbx,%rcx,8)
incq %rcx
incq %rsi
jne .LBB2_55
.LBB2_56:
cmpq $3, %rdx
jb .LBB2_65
# BB#57:
subq %rcx, %rax
leaq 24(%r14,%rcx,8), %rdx
leaq 24(%rbx,%rcx,8), %rcx
.p2align 4, 0x90
.LBB2_58: # =>This Inner Loop Header: Depth=1
movq -24(%rdx), %rsi
andq %rsi, -24(%rcx)
movq -16(%rdx), %rsi
andq %rsi, -16(%rcx)
movq -8(%rdx), %rsi
andq %rsi, -8(%rcx)
movq (%rdx), %rsi
andq %rsi, (%rcx)
addq $32, %rdx
addq $32, %rcx
addq $-4, %rax
jne .LBB2_58
.LBB2_65:
cmpl %r13d, %r15d
jae .LBB2_67
# BB#66:
movl %r15d, %eax
leaq (%rbx,%rax,8), %rdi
notl %r15d
addl %r15d, %r12d
leaq 8(,%r12,8), %rdx
xorl %esi, %esi
callq memset
.LBB2_67:
movq 32(%rbx), %rax
decq %rax
jne .LBB2_69
jmp .LBB2_71
.p2align 4, 0x90
.LBB2_70: # in Loop: Header=BB2_69 Depth=1
movq %rax, 32(%rbx)
decq %rax
je .LBB2_71
.LBB2_69: # =>This Inner Loop Header: Depth=1
cmpq $0, (%rbx,%rax,8)
je .LBB2_70
jmp .LBB2_71
.LBB2_3:
testl %r14d, %r14d
je .LBB2_18
.LBB2_4:
movl %r14d, %eax
cmpq $3, %rax
jbe .LBB2_5
# BB#12:
movl %r14d, %r8d
andl $3, %r8d
movq %rax, %rcx
subq %r8, %rcx
je .LBB2_5
# BB#13:
leaq (%r15,%rax,8), %rdx
cmpq %rbx, %rdx
jbe .LBB2_15
# BB#14:
leaq (%rbx,%rax,8), %rdx
cmpq %r15, %rdx
jbe .LBB2_15
.LBB2_5:
xorl %ecx, %ecx
.LBB2_6:
movl %r14d, %esi
subl %ecx, %esi
leaq -1(%rax), %rdx
subq %rcx, %rdx
andq $3, %rsi
je .LBB2_9
# BB#7:
negq %rsi
.p2align 4, 0x90
.LBB2_8: # =>This Inner Loop Header: Depth=1
movq (%r15,%rcx,8), %rdi
andq %rdi, (%rbx,%rcx,8)
incq %rcx
incq %rsi
jne .LBB2_8
.LBB2_9:
cmpq $3, %rdx
jb .LBB2_18
# BB#10:
subq %rcx, %rax
leaq 24(%r15,%rcx,8), %rdx
leaq 24(%rbx,%rcx,8), %rcx
.p2align 4, 0x90
.LBB2_11: # =>This Inner Loop Header: Depth=1
movq -24(%rdx), %rsi
andq %rsi, -24(%rcx)
movq -16(%rdx), %rsi
andq %rsi, -16(%rcx)
movq -8(%rdx), %rsi
andq %rsi, -8(%rcx)
movq (%rdx), %rsi
andq %rsi, (%rcx)
addq $32, %rdx
addq $32, %rcx
addq $-4, %rax
jne .LBB2_11
.LBB2_18:
cmpl %r13d, %r14d
jae .LBB2_20
# BB#19:
movl %r14d, %eax
leaq (%rbx,%rax,8), %rdi
notl %r14d
addl %r14d, %r12d
leaq 8(,%r12,8), %rdx
xorl %esi, %esi
callq memset
.LBB2_20:
movq 32(%rbx), %rax
decq %rax
jne .LBB2_22
jmp .LBB2_71
.p2align 4, 0x90
.LBB2_23: # in Loop: Header=BB2_22 Depth=1
movq %rax, 32(%rbx)
decq %rax
je .LBB2_71
.LBB2_22: # =>This Inner Loop Header: Depth=1
cmpq $0, (%rbx,%rax,8)
je .LBB2_23
jmp .LBB2_71
.LBB2_27:
testl %r15d, %r15d
je .LBB2_42
.LBB2_28:
movl %r15d, %eax
cmpq $3, %rax
jbe .LBB2_29
# BB#36:
movl %r15d, %r8d
andl $3, %r8d
movq %rax, %rcx
subq %r8, %rcx
je .LBB2_29
# BB#37:
leaq (%r14,%rax,8), %rdx
cmpq %rbx, %rdx
jbe .LBB2_39
# BB#38:
leaq (%rbx,%rax,8), %rdx
cmpq %r14, %rdx
jbe .LBB2_39
.LBB2_29:
xorl %ecx, %ecx
.LBB2_30:
movl %r15d, %esi
subl %ecx, %esi
leaq -1(%rax), %rdx
subq %rcx, %rdx
andq $3, %rsi
je .LBB2_33
# BB#31:
negq %rsi
.p2align 4, 0x90
.LBB2_32: # =>This Inner Loop Header: Depth=1
movq (%r14,%rcx,8), %rdi
andq %rdi, (%rbx,%rcx,8)
incq %rcx
incq %rsi
jne .LBB2_32
.LBB2_33:
cmpq $3, %rdx
jb .LBB2_42
# BB#34:
subq %rcx, %rax
leaq 24(%r14,%rcx,8), %rdx
leaq 24(%rbx,%rcx,8), %rcx
.p2align 4, 0x90
.LBB2_35: # =>This Inner Loop Header: Depth=1
movq -24(%rdx), %rsi
andq %rsi, -24(%rcx)
movq -16(%rdx), %rsi
andq %rsi, -16(%rcx)
movq -8(%rdx), %rsi
andq %rsi, -8(%rcx)
movq (%rdx), %rsi
andq %rsi, (%rcx)
addq $32, %rdx
addq $32, %rcx
addq $-4, %rax
jne .LBB2_35
.LBB2_42:
cmpl %r13d, %r15d
jae .LBB2_44
# BB#43:
movl %r15d, %eax
leaq (%rbx,%rax,8), %rdi
notl %r15d
addl %r15d, %r12d
leaq 8(,%r12,8), %rdx
xorl %esi, %esi
callq memset
.LBB2_44:
movq 32(%rbx), %rax
decq %rax
jne .LBB2_46
jmp .LBB2_71
.p2align 4, 0x90
.LBB2_47: # in Loop: Header=BB2_46 Depth=1
movq %rax, 32(%rbx)
decq %rax
je .LBB2_71
.LBB2_46: # =>This Inner Loop Header: Depth=1
cmpq $0, (%rbx,%rax,8)
je .LBB2_47
.LBB2_71:
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
.LBB2_62:
leaq 16(%rbx), %rsi
leaq 16(%r14), %rdi
movq %rcx, %rdx
.p2align 4, 0x90
.LBB2_63: # =>This Inner Loop Header: Depth=1
movups -16(%rsi), %xmm0
movups (%rsi), %xmm1
movups -16(%rdi), %xmm2
movups (%rdi), %xmm3
andps %xmm0, %xmm2
andps %xmm1, %xmm3
movups %xmm2, -16(%rsi)
movups %xmm3, (%rsi)
addq $32, %rsi
addq $32, %rdi
addq $-4, %rdx
jne .LBB2_63
# BB#64:
testq %r8, %r8
jne .LBB2_53
jmp .LBB2_65
.LBB2_15:
leaq 16(%rbx), %rsi
leaq 16(%r15), %rdi
movq %rcx, %rdx
.p2align 4, 0x90
.LBB2_16: # =>This Inner Loop Header: Depth=1
movups -16(%rsi), %xmm0
movups (%rsi), %xmm1
movups -16(%rdi), %xmm2
movups (%rdi), %xmm3
andps %xmm0, %xmm2
andps %xmm1, %xmm3
movups %xmm2, -16(%rsi)
movups %xmm3, (%rsi)
addq $32, %rsi
addq $32, %rdi
addq $-4, %rdx
jne .LBB2_16
# BB#17:
testq %r8, %r8
jne .LBB2_6
jmp .LBB2_18
.LBB2_39:
leaq 16(%rbx), %rsi
leaq 16(%r14), %rdi
movq %rcx, %rdx
.p2align 4, 0x90
.LBB2_40: # =>This Inner Loop Header: Depth=1
movups -16(%rsi), %xmm0
movups (%rsi), %xmm1
movups -16(%rdi), %xmm2
movups (%rdi), %xmm3
andps %xmm0, %xmm2
andps %xmm1, %xmm3
movups %xmm2, -16(%rsi)
movups %xmm3, (%rsi)
addq $32, %rsi
addq $32, %rdi
addq $-4, %rdx
jne .LBB2_40
# BB#41:
testq %r8, %r8
jne .LBB2_30
jmp .LBB2_42
.Lfunc_end2:
.size _ZN5boost14multiprecision11default_ops24eval_bitwise_and_defaultINS0_8backends15cpp_int_backendILj256ELj256ELNS0_16cpp_integer_typeE0ELNS0_18cpp_int_check_typeE0EvEEEEvRT_RKS8_SB_, .Lfunc_end2-_ZN5boost14multiprecision11default_ops24eval_bitwise_and_defaultINS0_8backends15cpp_int_backendILj256ELj256ELNS0_16cpp_integer_typeE0ELNS0_18cpp_int_check_typeE0EvEEEEvRT_RKS8_SB_
.cfi_endproc
.section .text.startup,"ax",@progbits
.p2align 4, 0x90
.type _GLOBAL__sub_I_u256const.cpp,@function
_GLOBAL__sub_I_u256const.cpp: # @_GLOBAL__sub_I_u256const.cpp
.cfi_startproc
# BB#0:
pushq %rax
.Lcfi16:
.cfi_def_cfa_offset 16
movl $_ZStL8__ioinit, %edi
callq _ZNSt8ios_base4InitC1Ev
movl $_ZNSt8ios_base4InitD1Ev, %edi
movl $_ZStL8__ioinit, %esi
movl $__dso_handle, %edx
popq %rax
jmp __cxa_atexit # TAILCALL
.Lfunc_end3:
.size _GLOBAL__sub_I_u256const.cpp, .Lfunc_end3-_GLOBAL__sub_I_u256const.cpp
.cfi_endproc
.type _ZStL8__ioinit,@object # @_ZStL8__ioinit
.local _ZStL8__ioinit
.comm _ZStL8__ioinit,1,1
.type _ZN12_GLOBAL__N_1L10lowMask256E,@object # @_ZN12_GLOBAL__N_1L10lowMask256E
.section .rodata,"a",@progbits
.p2align 4
_ZN12_GLOBAL__N_1L10lowMask256E:
.quad -1 # 0xffffffffffffffff
.zero 24
.quad 1 # 0x1
.zero 8
.size _ZN12_GLOBAL__N_1L10lowMask256E, 48
.section .init_array,"aw",@init_array
.p2align 3
.quad _GLOBAL__sub_I_u256const.cpp
.ident "clang version 4.0.0-svn297204-1~exp1 (branches/release_40)"
.section ".note.GNU-stack","",@progbits
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment