...

Text file src/github.com/bits-and-blooms/bitset/popcnt_amd64.s

Documentation: github.com/bits-and-blooms/bitset

     1// +build !go1.9
     2// +build amd64,!appengine
     3
     4TEXT ·hasAsm(SB),4,$0-1
     5MOVQ $1, AX
     6CPUID
     7SHRQ $23, CX
     8ANDQ $1, CX
     9MOVB CX, ret+0(FP)
    10RET
    11
    12#define POPCNTQ_DX_DX BYTE $0xf3; BYTE $0x48; BYTE $0x0f; BYTE $0xb8; BYTE $0xd2
    13
    14TEXT ·popcntSliceAsm(SB),4,$0-32
    15XORQ	AX, AX
    16MOVQ	s+0(FP), SI
    17MOVQ	s_len+8(FP), CX
    18TESTQ	CX, CX
    19JZ		popcntSliceEnd
    20popcntSliceLoop:
    21BYTE $0xf3; BYTE $0x48; BYTE $0x0f; BYTE $0xb8; BYTE $0x16 // POPCNTQ (SI), DX
    22ADDQ	DX, AX
    23ADDQ	$8, SI
    24LOOP	popcntSliceLoop
    25popcntSliceEnd:
    26MOVQ	AX, ret+24(FP)
    27RET
    28
    29TEXT ·popcntMaskSliceAsm(SB),4,$0-56
    30XORQ	AX, AX
    31MOVQ	s+0(FP), SI
    32MOVQ	s_len+8(FP), CX
    33TESTQ	CX, CX
    34JZ		popcntMaskSliceEnd
    35MOVQ	m+24(FP), DI
    36popcntMaskSliceLoop:
    37MOVQ	(DI), DX
    38NOTQ	DX
    39ANDQ	(SI), DX
    40POPCNTQ_DX_DX
    41ADDQ	DX, AX
    42ADDQ	$8, SI
    43ADDQ	$8, DI
    44LOOP	popcntMaskSliceLoop
    45popcntMaskSliceEnd:
    46MOVQ	AX, ret+48(FP)
    47RET
    48
    49TEXT ·popcntAndSliceAsm(SB),4,$0-56
    50XORQ	AX, AX
    51MOVQ	s+0(FP), SI
    52MOVQ	s_len+8(FP), CX
    53TESTQ	CX, CX
    54JZ		popcntAndSliceEnd
    55MOVQ	m+24(FP), DI
    56popcntAndSliceLoop:
    57MOVQ	(DI), DX
    58ANDQ	(SI), DX
    59POPCNTQ_DX_DX
    60ADDQ	DX, AX
    61ADDQ	$8, SI
    62ADDQ	$8, DI
    63LOOP	popcntAndSliceLoop
    64popcntAndSliceEnd:
    65MOVQ	AX, ret+48(FP)
    66RET
    67
    68TEXT ·popcntOrSliceAsm(SB),4,$0-56
    69XORQ	AX, AX
    70MOVQ	s+0(FP), SI
    71MOVQ	s_len+8(FP), CX
    72TESTQ	CX, CX
    73JZ		popcntOrSliceEnd
    74MOVQ	m+24(FP), DI
    75popcntOrSliceLoop:
    76MOVQ	(DI), DX
    77ORQ		(SI), DX
    78POPCNTQ_DX_DX
    79ADDQ	DX, AX
    80ADDQ	$8, SI
    81ADDQ	$8, DI
    82LOOP	popcntOrSliceLoop
    83popcntOrSliceEnd:
    84MOVQ	AX, ret+48(FP)
    85RET
    86
    87TEXT ·popcntXorSliceAsm(SB),4,$0-56
    88XORQ	AX, AX
    89MOVQ	s+0(FP), SI
    90MOVQ	s_len+8(FP), CX
    91TESTQ	CX, CX
    92JZ		popcntXorSliceEnd
    93MOVQ	m+24(FP), DI
    94popcntXorSliceLoop:
    95MOVQ	(DI), DX
    96XORQ	(SI), DX
    97POPCNTQ_DX_DX
    98ADDQ	DX, AX
    99ADDQ	$8, SI
   100ADDQ	$8, DI
   101LOOP	popcntXorSliceLoop
   102popcntXorSliceEnd:
   103MOVQ	AX, ret+48(FP)
   104RET

View as plain text