1
1

The patch from ticket #3469 adapted for the trunk.

This commit was SVN r27882.
Этот коммит содержится в:
George Bosilca 2013-01-21 11:45:05 +00:00
родитель 42753b4690
Коммит 8649b5eece
5 изменённых файлов: 268 добавлений и 1 удалений

Просмотреть файл

@ -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 Обычный файл
Просмотреть файл

@ -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 Обычный файл
Просмотреть файл

@ -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)

Просмотреть файл