summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2019-01-24 14:29:03 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2019-01-25 15:40:11 +0100
commit81aec1814674750f7ac2d59c4d55931251b22986 (patch)
treeb9b7681ccb367f1c1e4626709306748ccfb9b01c
parentlibmisc: Fix swapped parameters and enable floating point usage. (diff)
downloadrtems-81aec1814674750f7ac2d59c4d55931251b22986.tar.bz2
bsps/powerpc: Fix 64-bit issues in assembler files
We have to be careful with instructions which operate explicitly on words or doublewords. Update #3082.
-rw-r--r--bsps/powerpc/include/libcpu/powerpc-utility.h24
-rw-r--r--bsps/powerpc/qoriq/start/start.S4
-rw-r--r--bsps/powerpc/shared/cpu_asm.S8
-rw-r--r--bsps/powerpc/shared/start/bsp-start-zero.S8
4 files changed, 34 insertions, 10 deletions
diff --git a/bsps/powerpc/include/libcpu/powerpc-utility.h b/bsps/powerpc/include/libcpu/powerpc-utility.h
index 4d6af38485..931fb87d7c 100644
--- a/bsps/powerpc/include/libcpu/powerpc-utility.h
+++ b/bsps/powerpc/include/libcpu/powerpc-utility.h
@@ -974,6 +974,30 @@ void ShowBATS(void);
#endif
.endm
+.macro SHIFT_RIGHT_IMMEDIATE rd, rs, imm
+#if defined(__powerpc64__)
+ srdi \rd, \rs, \imm
+#else
+ srwi \rd, \rs, \imm
+#endif
+.endm
+
+.macro COMPARE_LOGICAL cr, ra, rb
+#if defined(__powerpc64__)
+ cmpld \cr, \ra, \rb
+#else
+ cmplw \cr, \ra, \rb
+#endif
+.endm
+
+.macro CLEAR_RIGHT_IMMEDIATE rd, rs, imm
+#if defined(__powerpc64__)
+ clrrdi \rd, \rs, \imm
+#else
+ clrrwi \rd, \rs, \imm
+#endif
+.endm
+
#define LINKER_SYMBOL(sym) .extern sym
#endif /* ASM */
diff --git a/bsps/powerpc/qoriq/start/start.S b/bsps/powerpc/qoriq/start/start.S
index 87db3cfff2..1d11301cdf 100644
--- a/bsps/powerpc/qoriq/start/start.S
+++ b/bsps/powerpc/qoriq/start/start.S
@@ -106,7 +106,7 @@ _start:
cmpwi r3, 0
bne .Lnull_area_setup_done
LA r3, bsp_section_start_begin
- srawi r3, r3, 2
+ SHIFT_RIGHT_IMMEDIATE r3, r3, 2
mtctr r3
li r3, -4
LWI r4, 0x44000002
@@ -319,7 +319,7 @@ _start_thread:
/* Initialize start stack */
PPC_REG_LOAD r3, PER_CPU_INTERRUPT_STACK_HIGH(CPU_SELF)
subi r1, r3, PPC_MINIMUM_STACK_FRAME_SIZE
- clrrwi r1, r1, PPC_STACK_ALIGN_POWER
+ CLEAR_RIGHT_IMMEDIATE r1, r1, PPC_STACK_ALIGN_POWER
li r0, 0
PPC_REG_STORE r0, 0(r1)
diff --git a/bsps/powerpc/shared/cpu_asm.S b/bsps/powerpc/shared/cpu_asm.S
index 5b095d9cea..e4d627016c 100644
--- a/bsps/powerpc/shared/cpu_asm.S
+++ b/bsps/powerpc/shared/cpu_asm.S
@@ -266,8 +266,8 @@ PROC (_CPU_Context_switch):
#endif
/* Align to a cache line */
- clrrwi r3, r3, PPC_DEFAULT_CACHE_LINE_POWER
- clrrwi r5, r4, PPC_DEFAULT_CACHE_LINE_POWER
+ CLEAR_RIGHT_IMMEDIATE r3, r3, PPC_DEFAULT_CACHE_LINE_POWER
+ CLEAR_RIGHT_IMMEDIATE r5, r4, PPC_DEFAULT_CACHE_LINE_POWER
DATA_CACHE_ZERO_AND_TOUCH(r10, PPC_CONTEXT_CACHE_LINE_0)
@@ -557,7 +557,7 @@ restore_context:
PUBLIC_PROC (_CPU_Context_restore)
PROC (_CPU_Context_restore):
/* Align to a cache line */
- clrrwi r5, r3, PPC_DEFAULT_CACHE_LINE_POWER
+ CLEAR_RIGHT_IMMEDIATE r5, r3, PPC_DEFAULT_CACHE_LINE_POWER
GET_SELF_CPU_CONTROL r12
@@ -586,7 +586,7 @@ PROC (_CPU_Context_restore):
/* Calculate the heir context pointer */
sub r7, r4, r7
add r4, r8, r7
- clrrwi r5, r4, PPC_DEFAULT_CACHE_LINE_POWER
+ CLEAR_RIGHT_IMMEDIATE r5, r4, PPC_DEFAULT_CACHE_LINE_POWER
/* Update the executing */
PPC_REG_STORE r8, PER_CPU_OFFSET_EXECUTING(r12)
diff --git a/bsps/powerpc/shared/start/bsp-start-zero.S b/bsps/powerpc/shared/start/bsp-start-zero.S
index e87efff8c3..b559dfb166 100644
--- a/bsps/powerpc/shared/start/bsp-start-zero.S
+++ b/bsps/powerpc/shared/start/bsp-start-zero.S
@@ -21,7 +21,7 @@
*/
#include <rtems/asm.h>
-#include <rtems/powerpc/powerpc.h>
+#include <libcpu/powerpc-utility.h>
#include <bspopts.h>
.globl bsp_start_zero
@@ -35,10 +35,10 @@ bsp_start_zero:
bsp_start_zero_begin:
li r0, 0
subi r11, r3, 1
- clrrwi r11, r11, PPC_CACHE_ALIGN_POWER
+ CLEAR_RIGHT_IMMEDIATE r11, r11, PPC_CACHE_ALIGN_POWER
addi r10, r11, PPC_CACHE_ALIGNMENT
subf r11, r3, r10
- cmplw cr7, r11, r4
+ COMPARE_LOGICAL cr7, r11, r4
add r9, r3, r4
ble- cr7, head_end_done
mr r10, r9
@@ -56,7 +56,7 @@ head_loop_update:
bdnz+ head_loop_begin
subf r11, r3, r9
- srwi r11, r11, PPC_CACHE_ALIGN_POWER
+ SHIFT_RIGHT_IMMEDIATE r11, r11, PPC_CACHE_ALIGN_POWER
addi r11, r11, 1
mtctr r11