Begin building mpcpucache.c. On Sun Studio platforms, build from two

new .s files.  Bug 298630. r=rrelyea.
This commit is contained in:
nelsonb%netscape.com 2005-11-22 07:13:32 +00:00
parent f074905cfd
commit ac287b2f5a
4 changed files with 1830 additions and 1 deletions

View File

@ -333,9 +333,10 @@ else
MPI_SRCS += mp_comba.c
else
ASFILES = arcfour-amd64-sun.s mpi_amd64_sun.s sha-fast-amd64-sun.s
ASFILES += mp_comba_amd64_sun.s
ASFILES += mp_comba_amd64_sun.s mpcpucache_amd64.s
ASFLAGS += -xarch=generic64 -K PIC
SHA_SRCS =
MPCPU_SRCS =
endif
DEFINES += -DNSS_BEVAND_ARCFOUR -DMPI_AMD64 -DMP_ASSEMBLY_MULTIPLY
DEFINES += -DNSS_USE_COMBA
@ -347,6 +348,10 @@ else
DEFINES += -DMP_ASSEMBLY_MULTIPLY -DMP_ASSEMBLY_SQUARE
DEFINES += -DMP_ASSEMBLY_DIV_2DX1D
ASFILES = mpi_i86pc.s
ifndef NS_USE_GCC
MPCPU_SRCS =
ASFILES += mpcpucache_x86.s
endif
endif
endif # Solaris for non-sparc family CPUs
endif # target == SunOS

View File

@ -113,6 +113,7 @@ else
ECL_SRCS = $(NULL)
endif
SHA_SRCS = sha_fast.c
MPCPU_SRCS = mpcpucache.c
CSRCS = \
freeblver.c \
@ -140,6 +141,7 @@ CSRCS = \
shvfy.c \
tlsprfalg.c \
$(MPI_SRCS) \
$(MPCPU_SRCS) \
$(ECL_SRCS) \
$(NULL)

View File

@ -0,0 +1,891 @@
//* ***** BEGIN LICENSE BLOCK *****
/ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
/ *
/ * The contents of this file are subject to the Mozilla Public License Version
/ * 1.1 (the "License"); you may not use this file except in compliance with
/ * the License. You may obtain a copy of the License at
/ * http://www.mozilla.org/MPL/
/ *
/ * Software distributed under the License is distributed on an "AS IS" basis,
/ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
/ * for the specific language governing rights and limitations under the
/ * License.
/ *
/ * The Initial Developer of the Original Code is
/ * Red Hat, Inc.
/ * Portions created by the Initial Developer are Copyright (C) 2005
/ * the Initial Developer. All Rights Reserved.
/ *
/ * Contributor(s):
/ * Robert Relyea <rrelyea@redhat.com>
/ *
/ * Alternatively, the contents of this file may be used under the terms of
/ * either the GNU General Public License Version 2 or later (the "GPL"), or
/ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
/ * in which case the provisions of the GPL or the LGPL are applicable instead
/ * of those above. If you wish to allow use of your version of this file only
/ * under the terms of either the GPL or the LGPL, and not to allow others to
/ * use your version of this file under the terms of the MPL, indicate your
/ * decision by deleting the provisions above and replace them with the notice
/ * and other provisions required by the GPL or the LGPL. If you do not delete
/ * the provisions above, a recipient may use your version of this file under
/ * the terms of any one of the MPL, the GPL or the LGPL.
/ *
/ * ***** END LICENSE BLOCK ***** */
.file "mpcpucache.c"
/ .section .rodata.str1.1,"aMS",@progbits,1
.section .rodata
.LC0:
.string "GenuineIntel"
.LC1:
.string "AuthenticAMD"
.LC2:
.string "CyrixInstead"
.LC3:
.string "CentaurHauls"
.LC4:
.string "NexGenDriven"
.LC5:
.string "GenuineTMx86"
.LC6:
.string "RiseRiseRise"
.LC7:
.string "UMC UMC UMC "
.LC8:
.string "Sis Sis Sis "
.LC9:
.string "Geode by NSC"
.section .data.rel.ro.local,"aw",@progbits
.align 32
.type manMap, @object
.size manMap, 80
manMap:
.quad .LC0
.quad .LC1
.quad .LC2
.quad .LC3
.quad .LC4
.quad .LC5
.quad .LC6
.quad .LC7
.quad .LC8
.quad .LC9
.section .rodata
.align 32
.type CacheMap, @object
.size CacheMap, 512
CacheMap:
.byte 0
.byte 0
.byte 3
.byte 0
.byte 3
.byte 0
.byte 4
.byte 0
.byte 4
.zero 1
.byte 1
.byte 0
.byte 7
.byte 32
.byte 1
.byte 0
.byte 7
.byte 32
.byte 1
.byte 0
.byte 8
.byte 32
.byte 1
.byte 0
.byte 8
.byte 32
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 12
.byte 64
.byte 12
.byte 64
.byte 1
.byte 0
.byte 12
.byte 64
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 12
.byte 64
.byte 1
.byte 0
.byte 1
.byte 0
.byte 8
.byte 64
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 7
.byte 64
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 9
.byte 64
.byte 1
.byte 0
.byte 9
.byte 64
.byte 9
.byte 64
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 9
.byte 0
.byte 9
.byte 32
.byte 9
.byte 32
.byte 9
.byte 32
.byte 9
.byte 32
.byte 9
.byte 32
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 3
.byte 0
.byte 3
.byte 0
.byte 3
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 4
.byte 0
.byte 4
.byte 0
.byte 4
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 8
.byte 64
.byte 8
.byte 64
.byte 8
.byte 64
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 5
.byte 1
.byte 5
.byte 1
.byte 5
.byte 1
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 9
.byte 64
.byte 9
.byte 64
.byte 9
.byte 64
.byte 9
.byte 64
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 9
.byte 32
.byte 9
.byte 32
.byte 9
.byte 32
.byte 9
.byte 32
.byte 9
.byte 64
.byte 9
.byte 64
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 3
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 4
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.text
.align 16
.type cpuid, @function
cpuid:
.LFB2:
movq %rdx, %r10
pushq %rbx
.LCFI0:
movq %rcx, %r11
movq %rdi, %rax
/APP
cpuid
/NO_APP
movq %rax, (%rsi)
movq %rbx, (%r10)
popq %rbx
movq %rcx, (%r11)
movq %rdx, (%r8)
ret
.LFE2:
.size cpuid, .-cpuid
.align 16
.type getIntelCacheEntryLineSize, @function
getIntelCacheEntryLineSize:
.LFB3:
leaq CacheMap(%rip), %r9
movq %rdx, %r10
movzbl 1(%r9,%rdi,2), %ecx
movzbl (%r9,%rdi,2), %r8d
testb %cl, %cl
je .L2
cmpl $6, %r8d
sete %dl
cmpl $8, %r8d
sete %al
orl %edx, %eax
testb $1, %al
je .L4
movl $1, (%rsi)
.L9:
movzbl %cl, %eax
movq %rax, (%r10)
ret
.align 16
.L4:
movl (%rsi), %r11d
cmpl $1, %r11d
jg .L11
.L6:
cmpl $2, %r11d
jle .L2
cmpl $12, %r8d
sete %dl
cmpl $14, %r8d
sete %al
orl %edx, %eax
testb $1, %al
je .L2
movzbq 1(%r9,%rdi,2), %rax
movl $3, (%rsi)
movq %rax, (%r10)
.align 16
.L2:
rep ; ret
.align 16
.L11:
cmpl $9, %r8d
sete %dl
cmpl $11, %r8d
sete %al
orl %edx, %eax
testb $1, %al
je .L6
movl $2, (%rsi)
jmp .L9
.LFE3:
.size getIntelCacheEntryLineSize, .-getIntelCacheEntryLineSize
.align 16
.type getIntelRegisterCacheLineSize, @function
getIntelRegisterCacheLineSize:
.LFB4:
pushq %rbp
.LCFI1:
movq %rsp, %rbp
.LCFI2:
movq %rbx, -24(%rbp)
.LCFI3:
movq %rdi, %rbx
shrq $24, %rdi
movq %r12, -16(%rbp)
.LCFI4:
movq %r13, -8(%rbp)
.LCFI5:
andl $255, %edi
subq $24, %rsp
.LCFI6:
movq %rsi, %r13
movq %rdx, %r12
call getIntelCacheEntryLineSize
movq %rbx, %rdi
movq %r12, %rdx
movq %r13, %rsi
shrq $16, %rdi
andl $255, %edi
call getIntelCacheEntryLineSize
movq %rbx, %rdi
movq %r12, %rdx
movq %r13, %rsi
shrq $8, %rdi
andl $255, %ebx
andl $255, %edi
call getIntelCacheEntryLineSize
movq %r12, %rdx
movq %r13, %rsi
movq %rbx, %rdi
movq 8(%rsp), %r12
movq (%rsp), %rbx
movq 16(%rsp), %r13
leave
jmp getIntelCacheEntryLineSize
.LFE4:
.size getIntelRegisterCacheLineSize, .-getIntelRegisterCacheLineSize
.align 16
.globl s_mpi_getProcessorLineSize
.type s_mpi_getProcessorLineSize, @function
s_mpi_getProcessorLineSize:
.LFB7:
pushq %rbp
.LCFI7:
xorl %edi, %edi
movq %rsp, %rbp
.LCFI8:
pushq %r15
.LCFI9:
leaq -136(%rbp), %r8
leaq -144(%rbp), %rcx
leaq -152(%rbp), %rdx
pushq %r14
.LCFI10:
leaq -160(%rbp), %rsi
leaq -128(%rbp), %r14
pushq %r13
.LCFI11:
leaq manMap(%rip), %r13
pushq %r12
.LCFI12:
movl $9, %r12d
pushq %rbx
.LCFI13:
xorl %ebx, %ebx
subq $200, %rsp
.LCFI14:
call cpuid
movq -152(%rbp), %rax
movq -160(%rbp), %r15
movb $0, -116(%rbp)
movl %eax, -128(%rbp)
movq -136(%rbp), %rax
movl %eax, -124(%rbp)
movq -144(%rbp), %rax
movl %eax, -120(%rbp)
.align 16
.L18:
movslq %ebx,%rax
movq %r14, %rsi
movq (%r13,%rax,8), %rdi
call strcmp@PLT
testl %eax, %eax
cmove %ebx, %r12d
incl %ebx
cmpl $9, %ebx
jle .L18
testl %r12d, %r12d
jne .L19
xorl %eax, %eax
decl %r15d
movl $4, -204(%rbp)
movq $0, -200(%rbp)
jle .L21
leaq -168(%rbp), %r8
leaq -176(%rbp), %rcx
leaq -184(%rbp), %rdx
leaq -192(%rbp), %rsi
movl $2, %edi
xorl %ebx, %ebx
call cpuid
movq -192(%rbp), %rdi
movl %edi, %r12d
andl $15, %r12d
cmpl %r12d, %ebx
jl .L30
jmp .L38
.align 16
.L25:
movq -184(%rbp), %rdi
testl $2147483648, %edi
je .L40
.L26:
movq -176(%rbp), %rdi
testl $2147483648, %edi
je .L41
.L27:
movq -168(%rbp), %rdi
testl $2147483648, %edi
je .L42
.L28:
incl %ebx
cmpl %r12d, %ebx
je .L24
leaq -168(%rbp), %r8
leaq -176(%rbp), %rcx
leaq -184(%rbp), %rdx
leaq -192(%rbp), %rsi
movl $2, %edi
call cpuid
.L24:
cmpl %r12d, %ebx
jge .L38
movq -192(%rbp), %rdi
.L30:
testl $2147483648, %edi
jne .L25
leaq -200(%rbp), %rdx
leaq -204(%rbp), %rsi
andl $4294967040, %edi
call getIntelRegisterCacheLineSize
movq -184(%rbp), %rdi
testl $2147483648, %edi
jne .L26
.L40:
leaq -200(%rbp), %rdx
leaq -204(%rbp), %rsi
call getIntelRegisterCacheLineSize
movq -176(%rbp), %rdi
testl $2147483648, %edi
jne .L27
.L41:
leaq -200(%rbp), %rdx
leaq -204(%rbp), %rsi
call getIntelRegisterCacheLineSize
movq -168(%rbp), %rdi
testl $2147483648, %edi
jne .L28
.L42:
leaq -200(%rbp), %rdx
leaq -204(%rbp), %rsi
call getIntelRegisterCacheLineSize
jmp .L28
.L38:
movq -200(%rbp), %rax
.L21:
movq %rax, %rdx
movl $32, %eax
testq %rdx, %rdx
cmoveq %rax, %rdx
addq $200, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
leave
movq %rdx, %rax
ret
.L19:
leaq -216(%rbp), %r8
leaq -224(%rbp), %rcx
leaq -232(%rbp), %rdx
leaq -240(%rbp), %rsi
movl $2147483648, %edi
xorl %ebx, %ebx
call cpuid
movl $2147483652, %eax
cmpq %rax, -240(%rbp)
ja .L43
.L32:
movq %rbx, %rdx
movl $32, %eax
testq %rdx, %rdx
cmoveq %rax, %rdx
addq $200, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
leave
movq %rdx, %rax
ret
.L43:
leaq -216(%rbp), %r8
leaq -224(%rbp), %rcx
leaq -232(%rbp), %rdx
leaq -240(%rbp), %rsi
movl $2147483653, %edi
call cpuid
movzbq -224(%rbp), %rbx
jmp .L32
.LFE7:
.size s_mpi_getProcessorLineSize, .-s_mpi_getProcessorLineSize

View File

@ -0,0 +1,931 @@
//* ***** BEGIN LICENSE BLOCK *****
/ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
/ *
/ * The contents of this file are subject to the Mozilla Public License Version
/ * 1.1 (the "License"); you may not use this file except in compliance with
/ * the License. You may obtain a copy of the License at
/ * http://www.mozilla.org/MPL/
/ *
/ * Software distributed under the License is distributed on an "AS IS" basis,
/ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
/ * for the specific language governing rights and limitations under the
/ * License.
/ *
/ * The Initial Developer of the Original Code is
/ * Red Hat, Inc.
/ * Portions created by the Initial Developer are Copyright (C) 2005
/ * the Initial Developer. All Rights Reserved.
/ *
/ * Contributor(s):
/ * Robert Relyea <rrelyea@redhat.com>
/ *
/ * Alternatively, the contents of this file may be used under the terms of
/ * either the GNU General Public License Version 2 or later (the "GPL"), or
/ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
/ * in which case the provisions of the GPL or the LGPL are applicable instead
/ * of those above. If you wish to allow use of your version of this file only
/ * under the terms of either the GPL or the LGPL, and not to allow others to
/ * use your version of this file under the terms of the MPL, indicate your
/ * decision by deleting the provisions above and replace them with the notice
/ * and other provisions required by the GPL or the LGPL. If you do not delete
/ * the provisions above, a recipient may use your version of this file under
/ * the terms of any one of the MPL, the GPL or the LGPL.
/ *
/ * ***** END LICENSE BLOCK ***** */
.file "mpcpucache.c"
/ .section .rodata.str1.1,"aMS",@progbits,1
.section .rodata
.LC0:
.string "GenuineIntel"
.LC1:
.string "AuthenticAMD"
.LC2:
.string "CyrixInstead"
.LC3:
.string "CentaurHauls"
.LC4:
.string "NexGenDriven"
.LC5:
.string "GenuineTMx86"
.LC6:
.string "RiseRiseRise"
.LC7:
.string "UMC UMC UMC "
.LC8:
.string "Sis Sis Sis "
.LC9:
.string "Geode by NSC"
.section .data.rel.ro.local,"aw",@progbits
.align 32
.type manMap, @object
.size manMap, 40
manMap:
.long .LC0
.long .LC1
.long .LC2
.long .LC3
.long .LC4
.long .LC5
.long .LC6
.long .LC7
.long .LC8
.long .LC9
.section .rodata
.align 32
.type CacheMap, @object
.size CacheMap, 512
CacheMap:
.byte 0
.byte 0
.byte 3
.byte 0
.byte 3
.byte 0
.byte 4
.byte 0
.byte 4
.zero 1
.byte 1
.byte 0
.byte 7
.byte 32
.byte 1
.byte 0
.byte 7
.byte 32
.byte 1
.byte 0
.byte 8
.byte 32
.byte 1
.byte 0
.byte 8
.byte 32
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 12
.byte 64
.byte 12
.byte 64
.byte 1
.byte 0
.byte 12
.byte 64
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 12
.byte 64
.byte 1
.byte 0
.byte 1
.byte 0
.byte 8
.byte 64
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 7
.byte 64
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 9
.byte 64
.byte 1
.byte 0
.byte 9
.byte 64
.byte 9
.byte 64
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 9
.byte 0
.byte 9
.byte 32
.byte 9
.byte 32
.byte 9
.byte 32
.byte 9
.byte 32
.byte 9
.byte 32
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 3
.byte 0
.byte 3
.byte 0
.byte 3
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 4
.byte 0
.byte 4
.byte 0
.byte 4
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 8
.byte 64
.byte 8
.byte 64
.byte 8
.byte 64
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 5
.byte 1
.byte 5
.byte 1
.byte 5
.byte 1
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 9
.byte 64
.byte 9
.byte 64
.byte 9
.byte 64
.byte 9
.byte 64
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 9
.byte 32
.byte 9
.byte 32
.byte 9
.byte 32
.byte 9
.byte 32
.byte 9
.byte 64
.byte 9
.byte 64
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 3
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 4
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 0
.text
.align 4
.type cpuid, @function
cpuid:
pushl %ebp
pushl %edi
pushl %esi
subl $8, %esp
movl %edx, %ebp
/APP
pushl %ebx
cpuid
mov %ebx,%esi
popl %ebx
/NO_APP
movl %eax, (%ebp)
movl 24(%esp), %eax
movl %esi, (%eax)
movl 28(%esp), %eax
movl %ecx, (%eax)
movl 32(%esp), %eax
movl %edx, (%eax)
addl $8, %esp
popl %esi
popl %edi
popl %ebp
ret
.size cpuid, .-cpuid
.align 4
.type changeFlag, @function
changeFlag:
/APP
pushfl
popl %edx
movl %edx,%ecx
xorl %eax,%edx
pushl %edx
popfl
pushfl
popl %edx
pushl %ecx
popfl
/NO_APP
xorl %ecx, %edx
movl %edx, %eax
ret
.size changeFlag, .-changeFlag
.align 4
.type getIntelCacheEntryLineSize, @function
getIntelCacheEntryLineSize:
pushl %edi
pushl %esi
pushl %ebx
call .L17
.L17:
popl %ebx
addl $_GLOBAL_OFFSET_TABLE_+[.-.L17], %ebx
movzbl CacheMap@GOTOFF(%ebx,%eax,2), %ecx
movb 1+CacheMap@GOTOFF(%ebx,%eax,2), %al
testb %al, %al
movl 16(%esp), %edi
je .L3
cmpl $6, %ecx
je .L6
cmpl $8, %ecx
je .L6
movl (%edx), %esi
cmpl $1, %esi
jg .L15
.L8:
cmpl $2, %esi
jle .L3
cmpl $12, %ecx
je .L12
cmpl $14, %ecx
je .L12
.align 4
.L3:
popl %ebx
popl %esi
popl %edi
ret
.align 4
.L6:
movzbl %al, %eax
movl $1, (%edx)
movl %eax, (%edi)
.L16:
popl %ebx
popl %esi
popl %edi
ret
.align 4
.L15:
cmpl $9, %ecx
je .L9
cmpl $11, %ecx
jne .L8
.L9:
movzbl %al, %eax
movl $2, (%edx)
movl %eax, (%edi)
jmp .L16
.L12:
movzbl %al, %eax
movl $3, (%edx)
movl %eax, (%edi)
jmp .L16
.size getIntelCacheEntryLineSize, .-getIntelCacheEntryLineSize
.align 4
.type getIntelRegisterCacheLineSize, @function
getIntelRegisterCacheLineSize:
pushl %ebp
movl %esp, %ebp
pushl %edi
pushl %esi
pushl %ecx
movl 8(%ebp), %edi
movl %eax, %esi
movl %edx, -12(%ebp)
shrl $24, %eax
pushl %edi
call getIntelCacheEntryLineSize
movl %esi, %eax
pushl %edi
shrl $16, %eax
movl -12(%ebp), %edx
andl $255, %eax
call getIntelCacheEntryLineSize
pushl %edi
movl %esi, %edx
movzbl %dh, %eax
movl -12(%ebp), %edx
call getIntelCacheEntryLineSize
andl $255, %esi
movl %edi, 8(%ebp)
movl -12(%ebp), %edx
addl $12, %esp
leal -8(%ebp), %esp
movl %esi, %eax
popl %esi
popl %edi
leave
jmp getIntelCacheEntryLineSize
.size getIntelRegisterCacheLineSize, .-getIntelRegisterCacheLineSize
.align 4
.globl s_mpi_getProcessorLineSize
.type s_mpi_getProcessorLineSize, @function
s_mpi_getProcessorLineSize:
pushl %ebp
movl %esp, %ebp
pushl %edi
pushl %esi
pushl %ebx
subl $188, %esp
call .L52
.L52:
popl %ebx
addl $_GLOBAL_OFFSET_TABLE_+[.-.L52], %ebx
movl $9, -168(%ebp)
movl $262144, %eax
call changeFlag
xorl %edx, %edx
testl %eax, %eax
jne .L50
.L19:
leal -12(%ebp), %esp
popl %ebx
popl %esi
movl %edx, %eax
popl %edi
leave
ret
.align 4
.L50:
movl $2097152, %eax
call changeFlag
testl %eax, %eax
movl $32, %edx
je .L19
leal -108(%ebp), %eax
pushl %eax
leal -112(%ebp), %eax
pushl %eax
leal -116(%ebp), %eax
pushl %eax
leal -120(%ebp), %edx
xorl %eax, %eax
call cpuid
movl -120(%ebp), %eax
movl %eax, -164(%ebp)
movl -116(%ebp), %eax
movl %eax, -104(%ebp)
movl -108(%ebp), %eax
movl %eax, -100(%ebp)
movl -112(%ebp), %eax
movl %eax, -96(%ebp)
movb $0, -92(%ebp)
xorl %esi, %esi
addl $12, %esp
leal -104(%ebp), %edi
.align 4
.L28:
subl $8, %esp
pushl %edi
pushl manMap@GOTOFF(%ebx,%esi,4)
call strcmp@PLT
addl $16, %esp
testl %eax, %eax
jne .L26
movl %esi, -168(%ebp)
.L26:
incl %esi
cmpl $9, %esi
jle .L28
movl -168(%ebp), %eax
testl %eax, %eax
jne .L29
xorl %eax, %eax
cmpl $1, -164(%ebp)
movl $4, -144(%ebp)
movl $0, -140(%ebp)
jle .L41
leal -124(%ebp), %edx
movl %edx, -188(%ebp)
leal -128(%ebp), %eax
pushl %edx
movl %eax, -184(%ebp)
leal -132(%ebp), %edx
pushl %eax
movl %edx, -180(%ebp)
movl $2, %eax
pushl %edx
leal -136(%ebp), %edx
call cpuid
movl -136(%ebp), %eax
movl %eax, %edi
andl $15, %edi
xorl %esi, %esi
addl $12, %esp
leal -140(%ebp), %edx
cmpl %edi, %esi
movl %edx, -176(%ebp)
jl .L40
jmp .L48
.align 4
.L49:
movl -136(%ebp), %eax
.L40:
testl %eax, %eax
js .L35
xorb %al, %al
pushl -176(%ebp)
leal -144(%ebp), %edx
call getIntelRegisterCacheLineSize
popl %eax
.L35:
movl -132(%ebp), %eax
testl %eax, %eax
js .L36
pushl -176(%ebp)
leal -144(%ebp), %edx
call getIntelRegisterCacheLineSize
popl %eax
.L36:
movl -128(%ebp), %eax
testl %eax, %eax
js .L37
pushl -176(%ebp)
leal -144(%ebp), %edx
call getIntelRegisterCacheLineSize
popl %eax
.L37:
movl -124(%ebp), %eax
testl %eax, %eax
js .L38
pushl -176(%ebp)
leal -144(%ebp), %edx
call getIntelRegisterCacheLineSize
popl %eax
.L38:
incl %esi
cmpl %edi, %esi
je .L34
pushl -188(%ebp)
pushl -184(%ebp)
pushl -180(%ebp)
leal -136(%ebp), %edx
movl $2, %eax
call cpuid
addl $12, %esp
.L34:
cmpl %edi, %esi
jl .L49
.L48:
movl -140(%ebp), %eax
.L41:
testl %eax, %eax
jne .L44
movb $32, %al
.L44:
leal -12(%ebp), %esp
popl %ebx
popl %esi
movl %eax, %edx
movl %edx, %eax
popl %edi
leave
ret
.L29:
leal -148(%ebp), %eax
movl %eax, -192(%ebp)
movl $0, -172(%ebp)
leal -152(%ebp), %edi
pushl %eax
pushl %edi
leal -156(%ebp), %esi
pushl %esi
leal -160(%ebp), %edx
movl $-2147483648, %eax
call cpuid
addl $12, %esp
cmpl $-2147483644, -160(%ebp)
ja .L51
.L42:
movl -172(%ebp), %eax
jmp .L41
.L51:
pushl -192(%ebp)
pushl %edi
pushl %esi
leal -160(%ebp), %edx
movl $-2147483643, %eax
call cpuid
movzbl -152(%ebp), %edx
addl $12, %esp
movl %edx, -172(%ebp)
jmp .L42
.size s_mpi_getProcessorLineSize, .-s_mpi_getProcessorLineSize