The patch from ticket #3469 adapted for the trunk.
This commit was SVN r27882.
Этот коммит содержится в:
родитель
42753b4690
Коммит
8649b5eece
@ -811,6 +811,7 @@ AC_DEFUN([OPAL_CONFIG_ASM],[
|
|||||||
ompi_cv_asm_arch="ARM"
|
ompi_cv_asm_arch="ARM"
|
||||||
OPAL_ASM_SUPPORT_64BIT=1
|
OPAL_ASM_SUPPORT_64BIT=1
|
||||||
OPAL_ASM_ARM_VERSION=7
|
OPAL_ASM_ARM_VERSION=7
|
||||||
|
cp -f "$top_ompi_builddir/opal/asm/base/ARMV7.asm" "$top_ompi_builddir/opal/asm/base/ARM.asm"
|
||||||
AC_DEFINE_UNQUOTED([OPAL_ASM_ARM_VERSION], [$OPAL_ASM_ARM_VERSION],
|
AC_DEFINE_UNQUOTED([OPAL_ASM_ARM_VERSION], [$OPAL_ASM_ARM_VERSION],
|
||||||
[What ARM assembly version to use])
|
[What ARM assembly version to use])
|
||||||
OMPI_GCC_INLINE_ASSIGN='"mov %0, #0" : "=&r"(ret)'
|
OMPI_GCC_INLINE_ASSIGN='"mov %0, #0" : "=&r"(ret)'
|
||||||
@ -820,6 +821,7 @@ AC_DEFUN([OPAL_CONFIG_ASM],[
|
|||||||
ompi_cv_asm_arch="ARM"
|
ompi_cv_asm_arch="ARM"
|
||||||
OPAL_ASM_SUPPORT_64BIT=0
|
OPAL_ASM_SUPPORT_64BIT=0
|
||||||
OPAL_ASM_ARM_VERSION=6
|
OPAL_ASM_ARM_VERSION=6
|
||||||
|
cp -f "$top_ompi_builddir/opal/asm/base/ARMV6.asm" "$top_ompi_builddir/opal/asm/base/ARM.asm"
|
||||||
AC_DEFINE_UNQUOTED([OPAL_ASM_ARM_VERSION], [$OPAL_ASM_ARM_VERSION],
|
AC_DEFINE_UNQUOTED([OPAL_ASM_ARM_VERSION], [$OPAL_ASM_ARM_VERSION],
|
||||||
[What ARM assembly version to use])
|
[What ARM assembly version to use])
|
||||||
OMPI_GCC_INLINE_ASSIGN='"mov %0, #0" : "=&r"(ret)'
|
OMPI_GCC_INLINE_ASSIGN='"mov %0, #0" : "=&r"(ret)'
|
||||||
@ -830,6 +832,7 @@ AC_DEFUN([OPAL_CONFIG_ASM],[
|
|||||||
ompi_cv_asm_arch="ARM"
|
ompi_cv_asm_arch="ARM"
|
||||||
OPAL_ASM_SUPPORT_64BIT=0
|
OPAL_ASM_SUPPORT_64BIT=0
|
||||||
OPAL_ASM_ARM_VERSION=5
|
OPAL_ASM_ARM_VERSION=5
|
||||||
|
cp -f "$top_ompi_builddir/opal/asm/base/ARMV5.asm" "$top_ompi_builddir/opal/asm/base/ARM.asm"
|
||||||
AC_DEFINE_UNQUOTED([OPAL_ASM_ARM_VERSION], [$OPAL_ASM_ARM_VERSION],
|
AC_DEFINE_UNQUOTED([OPAL_ASM_ARM_VERSION], [$OPAL_ASM_ARM_VERSION],
|
||||||
[What ARM assembly version to use])
|
[What ARM assembly version to use])
|
||||||
OMPI_GCC_INLINE_ASSIGN='"mov %0, #0" : "=&r"(ret)'
|
OMPI_GCC_INLINE_ASSIGN='"mov %0, #0" : "=&r"(ret)'
|
||||||
|
@ -65,7 +65,9 @@ EXTRA_DIST = \
|
|||||||
base/default.conf \
|
base/default.conf \
|
||||||
base/ALPHA.asm \
|
base/ALPHA.asm \
|
||||||
base/AMD64.asm \
|
base/AMD64.asm \
|
||||||
base/ARM.asm \
|
base/ARMV5.asm \
|
||||||
|
base/ARMV6.asm \
|
||||||
|
base/ARMV7.asm \
|
||||||
base/IA32.asm \
|
base/IA32.asm \
|
||||||
base/IA64.asm \
|
base/IA64.asm \
|
||||||
base/MIPS.asm \
|
base/MIPS.asm \
|
||||||
|
109
opal/asm/base/ARMV5.asm
Обычный файл
109
opal/asm/base/ARMV5.asm
Обычный файл
@ -0,0 +1,109 @@
|
|||||||
|
START_FILE
|
||||||
|
TEXT
|
||||||
|
|
||||||
|
ALIGN(4)
|
||||||
|
START_FUNC(opal_atomic_mb)
|
||||||
|
mcr p15, 0, r0, c7, c10, 5
|
||||||
|
bx lr
|
||||||
|
END_FUNC(opal_atomic_mb)
|
||||||
|
|
||||||
|
|
||||||
|
START_FUNC(opal_atomic_rmb)
|
||||||
|
mcr p15, 0, r0, c7, c10, 5
|
||||||
|
bx lr
|
||||||
|
END_FUNC(opal_atomic_rmb)
|
||||||
|
|
||||||
|
|
||||||
|
START_FUNC(opal_atomic_wmb)
|
||||||
|
mcr p15, 0, r0, c7, c10, 5
|
||||||
|
bx lr
|
||||||
|
END_FUNC(opal_atomic_wmb)
|
||||||
|
|
||||||
|
|
||||||
|
START_FUNC(opal_atomic_cmpset_32)
|
||||||
|
push {r4, lr}
|
||||||
|
mov r3, r0
|
||||||
|
mov r0, r1
|
||||||
|
mov r1, r2
|
||||||
|
mov r2, r3
|
||||||
|
ldr r3, REFLSYM(1)
|
||||||
|
blx r3
|
||||||
|
movcc r0, #0
|
||||||
|
movcs r0, #1
|
||||||
|
pop {r4, lr}
|
||||||
|
bx lr
|
||||||
|
.align 2
|
||||||
|
LSYM(1)
|
||||||
|
.word 0xffff0fc0
|
||||||
|
END_FUNC(opal_atomic_cmpset_32)
|
||||||
|
|
||||||
|
|
||||||
|
START_FUNC(opal_atomic_cmpset_acq_32)
|
||||||
|
push {r4, lr}
|
||||||
|
mov r3, r0
|
||||||
|
mov r0, r1
|
||||||
|
mov r1, r2
|
||||||
|
mov r2, r3
|
||||||
|
ldr r3, REFLSYM(2)
|
||||||
|
blx r3
|
||||||
|
movcc r0, #0
|
||||||
|
movcs r0, #1
|
||||||
|
pop {r4, lr}
|
||||||
|
bx lr
|
||||||
|
.align 2
|
||||||
|
LSYM(2)
|
||||||
|
.word 0xffff0fc0
|
||||||
|
END_FUNC(opal_atomic_cmpset_acq_32)
|
||||||
|
|
||||||
|
|
||||||
|
START_FUNC(opal_atomic_cmpset_rel_32)
|
||||||
|
push {r4, lr}
|
||||||
|
mov r3, r0
|
||||||
|
mov r0, r1
|
||||||
|
mov r1, r2
|
||||||
|
mov r2, r3
|
||||||
|
ldr r3, REFLSYM(3)
|
||||||
|
blx r3
|
||||||
|
movcc r0, #0
|
||||||
|
movcs r0, #1
|
||||||
|
pop {r4, lr}
|
||||||
|
bx lr
|
||||||
|
.align 2
|
||||||
|
LSYM(3)
|
||||||
|
.word 0xffff0fc0
|
||||||
|
END_FUNC(opal_atomic_cmpset_rel_32)
|
||||||
|
|
||||||
|
START_FUNC(opal_atomic_add_32)
|
||||||
|
push {r4, lr}
|
||||||
|
mov r4, r1
|
||||||
|
mov r2, r0
|
||||||
|
LSYM(4)
|
||||||
|
ldr r0, [r2]
|
||||||
|
ldr r3, REFLSYM(5)
|
||||||
|
add r1, r0, r4
|
||||||
|
blx r3
|
||||||
|
bcc REFLSYM(4)
|
||||||
|
pop {r4, lr}
|
||||||
|
bx lr
|
||||||
|
.align 2
|
||||||
|
LSYM(5)
|
||||||
|
.word 0xffff0fc0
|
||||||
|
END_FUNC(opal_atomic_add_32)
|
||||||
|
|
||||||
|
|
||||||
|
START_FUNC(opal_atomic_sub_32)
|
||||||
|
push {r4, lr}
|
||||||
|
mov r4, r1
|
||||||
|
mov r2, r0
|
||||||
|
LSYM(6)
|
||||||
|
ldr r0, [r2]
|
||||||
|
ldr r3, REFLSYM(7)
|
||||||
|
sub r1, r0, r4
|
||||||
|
blx r3
|
||||||
|
bcc REFLSYM(6)
|
||||||
|
pop {r4, lr}
|
||||||
|
bx lr
|
||||||
|
.align 2
|
||||||
|
LSYM(7)
|
||||||
|
.word 0xffff0fc0
|
||||||
|
END_FUNC(opal_atomic_sub_32)
|
153
opal/asm/base/ARMV6.asm
Обычный файл
153
opal/asm/base/ARMV6.asm
Обычный файл
@ -0,0 +1,153 @@
|
|||||||
|
START_FILE
|
||||||
|
TEXT
|
||||||
|
|
||||||
|
ALIGN(4)
|
||||||
|
START_FUNC(opal_atomic_mb)
|
||||||
|
mcr p15, 0, r0, c7, c10, 5
|
||||||
|
bx lr
|
||||||
|
END_FUNC(opal_atomic_mb)
|
||||||
|
|
||||||
|
|
||||||
|
START_FUNC(opal_atomic_rmb)
|
||||||
|
mcr p15, 0, r0, c7, c10, 5
|
||||||
|
bx lr
|
||||||
|
END_FUNC(opal_atomic_rmb)
|
||||||
|
|
||||||
|
|
||||||
|
START_FUNC(opal_atomic_wmb)
|
||||||
|
mcr p15, 0, r0, c7, c10, 5
|
||||||
|
bx lr
|
||||||
|
END_FUNC(opal_atomic_wmb)
|
||||||
|
|
||||||
|
|
||||||
|
START_FUNC(opal_atomic_cmpset_32)
|
||||||
|
LSYM(1)
|
||||||
|
ldrex r3, [r0]
|
||||||
|
cmp r1, r3
|
||||||
|
bne REFLSYM(2)
|
||||||
|
strex r12, r2, [r0]
|
||||||
|
cmp r12, #0
|
||||||
|
bne REFLSYM(1)
|
||||||
|
mov r0, #1
|
||||||
|
LSYM(2)
|
||||||
|
movne r0, #0
|
||||||
|
bx lr
|
||||||
|
END_FUNC(opal_atomic_cmpset_32)
|
||||||
|
|
||||||
|
|
||||||
|
START_FUNC(opal_atomic_cmpset_acq_32)
|
||||||
|
LSYM(3)
|
||||||
|
ldrex r3, [r0]
|
||||||
|
cmp r1, r3
|
||||||
|
bne REFLSYM(4)
|
||||||
|
strex r12, r2, [r0]
|
||||||
|
cmp r12, #0
|
||||||
|
bne REFLSYM(3)
|
||||||
|
dmb
|
||||||
|
mov r0, #1
|
||||||
|
LSYM(4)
|
||||||
|
movne r0, #0
|
||||||
|
bx lr
|
||||||
|
END_FUNC(opal_atomic_cmpset_acq_32)
|
||||||
|
|
||||||
|
|
||||||
|
START_FUNC(opal_atomic_cmpset_rel_32)
|
||||||
|
LSYM(5)
|
||||||
|
ldrex r3, [r0]
|
||||||
|
cmp r1, r3
|
||||||
|
bne REFLSYM(6)
|
||||||
|
dmb
|
||||||
|
strex r12, r2, [r0]
|
||||||
|
cmp r12, #0
|
||||||
|
bne REFLSYM(4)
|
||||||
|
mov r0, #1
|
||||||
|
LSYM(6)
|
||||||
|
movne r0, #0
|
||||||
|
bx lr
|
||||||
|
END_FUNC(opal_atomic_cmpset_rel_32)
|
||||||
|
|
||||||
|
#START_64BIT
|
||||||
|
START_FUNC(opal_atomic_cmpset_64)
|
||||||
|
push {r4-r7}
|
||||||
|
ldrd r6, r7, [sp, #16]
|
||||||
|
LSYM(7)
|
||||||
|
ldrexd r4, r5, [r0]
|
||||||
|
cmp r4, r2
|
||||||
|
it eq
|
||||||
|
cmpeq r5, r3
|
||||||
|
bne REFLSYM(8)
|
||||||
|
strexd r1, r6, r7, [r0]
|
||||||
|
cmp r1, #0
|
||||||
|
bne REFLSYM(7)
|
||||||
|
mov r0, #1
|
||||||
|
LSYM(8)
|
||||||
|
movne r0, #0
|
||||||
|
pop {r4-r7}
|
||||||
|
bx lr
|
||||||
|
END_FUNC(opal_atomic_cmpset_64)
|
||||||
|
|
||||||
|
START_FUNC(opal_atomic_cmpset_acq_64)
|
||||||
|
push {r4-r7}
|
||||||
|
ldrd r6, r7, [sp, #16]
|
||||||
|
LSYM(9)
|
||||||
|
ldrexd r4, r5, [r0]
|
||||||
|
cmp r4, r2
|
||||||
|
it eq
|
||||||
|
cmpeq r5, r3
|
||||||
|
bne REFLSYM(10)
|
||||||
|
strexd r1, r6, r7, [r0]
|
||||||
|
cmp r1, #0
|
||||||
|
bne REFLSYM(9)
|
||||||
|
dmb
|
||||||
|
mov r0, #1
|
||||||
|
LSYM(10)
|
||||||
|
movne r0, #0
|
||||||
|
pop {r4-r7}
|
||||||
|
bx lr
|
||||||
|
END_FUNC(opal_atomic_cmpset_acq_64)
|
||||||
|
|
||||||
|
|
||||||
|
START_FUNC(opal_atomic_cmpset_rel_64)
|
||||||
|
push {r4-r7}
|
||||||
|
ldrd r6, r7, [sp, #16]
|
||||||
|
LSYM(11)
|
||||||
|
ldrexd r4, r5, [r0]
|
||||||
|
cmp r4, r2
|
||||||
|
it eq
|
||||||
|
cmpeq r5, r3
|
||||||
|
bne REFLSYM(12)
|
||||||
|
dmb
|
||||||
|
strexd r1, r6, r7, [r0]
|
||||||
|
cmp r1, #0
|
||||||
|
bne REFLSYM(11)
|
||||||
|
mov r0, #1
|
||||||
|
LSYM(12)
|
||||||
|
movne r0, #0
|
||||||
|
pop {r4-r7}
|
||||||
|
bx lr
|
||||||
|
END_FUNC(opal_atomic_cmpset_rel_64)
|
||||||
|
#END_64BIT
|
||||||
|
|
||||||
|
|
||||||
|
START_FUNC(opal_atomic_add_32)
|
||||||
|
LSYM(13)
|
||||||
|
ldrex r2, [r0]
|
||||||
|
add r2, r2, r1
|
||||||
|
strex r3, r2, [r0]
|
||||||
|
cmp r3, #0
|
||||||
|
bne REFLSYM(13)
|
||||||
|
mov r0, r2
|
||||||
|
bx lr
|
||||||
|
END_FUNC(opal_atomic_add_32)
|
||||||
|
|
||||||
|
|
||||||
|
START_FUNC(opal_atomic_sub_32)
|
||||||
|
LSYM(14)
|
||||||
|
ldrex r2, [r0]
|
||||||
|
sub r2, r2, r1
|
||||||
|
strex r3, r2, [r0]
|
||||||
|
cmp r3, #0
|
||||||
|
bne REFLSYM(14)
|
||||||
|
mov r0, r2
|
||||||
|
bx lr
|
||||||
|
END_FUNC(opal_atomic_sub_32)
|
Загрузка…
x
Ссылка в новой задаче
Block a user