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"
|
||||
OPAL_ASM_SUPPORT_64BIT=1
|
||||
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],
|
||||
[What ARM assembly version to use])
|
||||
OMPI_GCC_INLINE_ASSIGN='"mov %0, #0" : "=&r"(ret)'
|
||||
@ -820,6 +821,7 @@ AC_DEFUN([OPAL_CONFIG_ASM],[
|
||||
ompi_cv_asm_arch="ARM"
|
||||
OPAL_ASM_SUPPORT_64BIT=0
|
||||
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],
|
||||
[What ARM assembly version to use])
|
||||
OMPI_GCC_INLINE_ASSIGN='"mov %0, #0" : "=&r"(ret)'
|
||||
@ -830,6 +832,7 @@ AC_DEFUN([OPAL_CONFIG_ASM],[
|
||||
ompi_cv_asm_arch="ARM"
|
||||
OPAL_ASM_SUPPORT_64BIT=0
|
||||
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],
|
||||
[What ARM assembly version to use])
|
||||
OMPI_GCC_INLINE_ASSIGN='"mov %0, #0" : "=&r"(ret)'
|
||||
|
@ -65,7 +65,9 @@ EXTRA_DIST = \
|
||||
base/default.conf \
|
||||
base/ALPHA.asm \
|
||||
base/AMD64.asm \
|
||||
base/ARM.asm \
|
||||
base/ARMV5.asm \
|
||||
base/ARMV6.asm \
|
||||
base/ARMV7.asm \
|
||||
base/IA32.asm \
|
||||
base/IA64.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