mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-12-27 23:10:16 +00:00
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.
This commit is contained in:
@@ -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 */
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user