version 1.1.1.2, 2000/12/01 05:45:00 |
version 1.1.1.3, 2003/08/25 16:06:28 |
|
|
dnl AMD K6-2 mpn_popcount, mpn_hamdist -- mpn bit population count and |
dnl AMD K6-2 mpn_popcount, mpn_hamdist -- mpn bit population count and |
dnl hamming distance. |
dnl hamming distance. |
dnl |
|
dnl popcount hamdist |
|
dnl K6-2: 9.0 11.5 cycles/limb |
|
dnl K6: 12.5 13.0 |
|
|
|
|
dnl Copyright 2000, 2001, 2002 Free Software Foundation, Inc. |
dnl Copyright (C) 2000 Free Software Foundation, Inc. |
|
dnl |
dnl |
dnl This file is part of the GNU MP Library. |
dnl This file is part of the GNU MP Library. |
dnl |
dnl |
Line 25 dnl License along with the GNU MP Library; see the fi |
|
Line 20 dnl License along with the GNU MP Library; see the fi |
|
dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - |
dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - |
dnl Suite 330, Boston, MA 02111-1307, USA. |
dnl Suite 330, Boston, MA 02111-1307, USA. |
|
|
|
|
include(`../config.m4') |
include(`../config.m4') |
|
|
|
|
|
C popcount hamdist |
|
C K6-2: 9.0 11.5 cycles/limb |
|
C K6: 12.5 13.0 |
|
|
|
|
C unsigned long mpn_popcount (mp_srcptr src, mp_size_t size); |
C unsigned long mpn_popcount (mp_srcptr src, mp_size_t size); |
C unsigned long mpn_hamdist (mp_srcptr src, mp_srcptr src2, mp_size_t size); |
C unsigned long mpn_hamdist (mp_srcptr src, mp_srcptr src2, mp_size_t size); |
C |
C |
Line 67 MULFUNC_PROLOGUE(mpn_popcount mpn_hamdist) |
|
Line 66 MULFUNC_PROLOGUE(mpn_popcount mpn_hamdist) |
|
ifdef(`PIC',,` |
ifdef(`PIC',,` |
dnl non-PIC |
dnl non-PIC |
|
|
DATA |
RODATA |
ALIGN(8) |
ALIGN(8) |
|
|
define(LS, |
L(rodata_AAAAAAAAAAAAAAAA): |
m4_assert_numargs(1) |
|
`LF(M4_function,`$1')') |
|
|
|
LS(rodata_AAAAAAAAAAAAAAAA): |
|
.long 0xAAAAAAAA |
.long 0xAAAAAAAA |
.long 0xAAAAAAAA |
.long 0xAAAAAAAA |
|
|
LS(rodata_3333333333333333): |
L(rodata_3333333333333333): |
.long 0x33333333 |
.long 0x33333333 |
.long 0x33333333 |
.long 0x33333333 |
|
|
LS(rodata_0F0F0F0F0F0F0F0F): |
L(rodata_0F0F0F0F0F0F0F0F): |
.long 0x0F0F0F0F |
.long 0x0F0F0F0F |
.long 0x0F0F0F0F |
.long 0x0F0F0F0F |
|
|
LS(rodata_000000FF000000FF): |
L(rodata_000000FF000000FF): |
.long 0x000000FF |
.long 0x000000FF |
.long 0x000000FF |
.long 0x000000FF |
') |
') |
|
|
.text |
TEXT |
ALIGN(32) |
ALIGN(32) |
|
|
POP(`ifdef(`PIC', ` |
POP(`ifdef(`PIC', ` |
Line 102 PROLOGUE(M4_function) |
|
Line 97 PROLOGUE(M4_function) |
|
deflit(`FRAME',0) |
deflit(`FRAME',0) |
|
|
movl PARAM_SIZE, %ecx |
movl PARAM_SIZE, %ecx |
orl %ecx, %ecx |
|
jz L(zero) |
|
|
|
ifdef(`PIC',` |
ifdef(`PIC',` |
movl $0xAAAAAAAA, %eax |
movl $0xAAAAAAAA, %eax |
|
|
punpckldq %mm4, %mm4 |
punpckldq %mm4, %mm4 |
',` |
',` |
|
|
movq LS(rodata_AAAAAAAAAAAAAAAA), %mm7 |
movq L(rodata_AAAAAAAAAAAAAAAA), %mm7 |
movq LS(rodata_3333333333333333), %mm6 |
movq L(rodata_3333333333333333), %mm6 |
movq LS(rodata_0F0F0F0F0F0F0F0F), %mm5 |
movq L(rodata_0F0F0F0F0F0F0F0F), %mm5 |
movq LS(rodata_000000FF000000FF), %mm4 |
movq L(rodata_000000FF000000FF), %mm4 |
') |
') |
|
|
define(REG_AAAAAAAAAAAAAAAA, %mm7) |
define(REG_AAAAAAAAAAAAAAAA, %mm7) |
Line 229 HAM(` nop C code alignment') |
|
Line 222 HAM(` nop C code alignment') |
|
|
|
movd %mm2, %eax |
movd %mm2, %eax |
emms_or_femms |
emms_or_femms |
ret |
|
|
|
L(zero): |
|
movl $0, %eax |
|
ret |
ret |
|
|
EPILOGUE() |
EPILOGUE() |