?? os_cpu_a.i
字號:
#
# OS_MPC565_A.i
#
# uC/OS-II MPC565 PowerPC Specific Assembly Language macros and definitions
#
# Author Peter S 5/4/01
#
# Version V1.00
#
#########################################################################
.page
#########################################################################
# Stack Frame Definition
# These Stack frame definitions have to be congruent with the
# Stack Frame usage in OS_MPC565_C.C
#########################################################################
OS_FP_SUPPORT .equ 1 ;set to 1 for floating point support also set in OS_CFG.h
XR1 .equ 0 ;stack pointer
XCFLR .equ XR1+4 ;called functions link register
XR0 .equ XCFLR+4
XSRR0 .equ XR0+4
XSRR1 .equ XSRR0+4
XCTR .equ XSRR1+4
XXER .equ XCTR+4
XCR .equ XXER+4
XLR .equ XCR+4
XR3 .equ XLR+4
XR4 .equ XR3+4
XR5 .equ XR4+4
XR6 .equ XR5+4
XR7 .equ XR6+4
XR8 .equ XR7+4
XR9 .equ XR8+4
XR10 .equ XR9+4
XR11 .equ XR10+4
XR12 .equ XR11+4
XR14 .equ XR12+4
XR15 .equ XR14+4
XR16 .equ XR15+4
XR17 .equ XR16+4
XR18 .equ XR17+4
XR19 .equ XR18+4
XR20 .equ XR19+4
XR21 .equ XR20+4
XR22 .equ XR21+4
XR23 .equ XR22+4
XR24 .equ XR23+4
XR25 .equ XR24+4
XR26 .equ XR25+4
XR27 .equ XR26+4
XR28 .equ XR27+4
XR29 .equ XR28+4
XR30 .equ XR29+4
XR31 .equ XR30+4
XRPAD .equ XR31+4+12 ;add padding to make mod 8 for EABI
STACK_FRAME_SIZE .set XRPAD
.if OS_FP_SUPPORT
XF0 .equ XRPAD
XF1 .equ XF0+8
XF2 .equ XF1+8
XF3 .equ XF2+8
XF4 .equ XF3+8
XF5 .equ XF4+8
XF6 .equ XF5+8
XF7 .equ XF6+8
XF8 .equ XF7+8
XF9 .equ XF8+8
XF10 .equ XF9+8
XF11 .equ XF10+8
XF12 .equ XF11+8
XF13 .equ XF12+8
XF14 .equ XF13+8
XF15 .equ XF14+8
XF16 .equ XF15+8
XF17 .equ XF16+8
XF18 .equ XF17+8
XF19 .equ XF18+8
XF20 .equ XF19+8
XF21 .equ XF20+8
XF22 .equ XF21+8
XF23 .equ XF22+8
XF24 .equ XF23+8
XF25 .equ XF24+8
XF26 .equ XF25+8
XF27 .equ XF26+8
XF28 .equ XF27+8
XF29 .equ XF28+8
XF30 .equ XF29+8
XF31 .equ XF30+8
XFPSCR .equ XF31+8
STACK_FRAME_SIZE .set XFPSCR+8
.endif
.page
#########################################################################
# Diagnostic bit set/reset macros
# These two macros were intended as a diagnostic only.
# Set DIAGNOSTICS to 0 for released code
# QADC port A, must be set as I/O elsewhere
#########################################################################
DIAGNOSTICS .equ 1 ;add bit twiddling support
QADC_A .equ 00304800H
DiaBitSet: .macro regA,regB,regC,BIT,CBIT
.if DIAGNOSTICS
addis regA,r0,(QADC_A+6)@ha
addi regB,r0,1
lbz regC,(QADC_A+6)@l(regA)
rlwimi regC,regB,BIT,CBIT,CBIT
stb regC,(QADC_A+6)@l(regA)
.endif
.endm ;QADC_A.PORTQA.B.PQA_BIT = 1; // diagnostic
DiaBitReset: .macro regA,regB,regC,BIT,CBIT
.if DIAGNOSTICS
addis regA,r0,(QADC_A+6)@ha
addi regB,r0,0
lbz regC,(QADC_A+6)@l(regA)
rlwimi regC,regB,BIT,CBIT,CBIT
stb regC,(QADC_A+6)@l(regA)
.endif
.endm ;QADC_A.PORTQA.B.PQA_BIT = 0; // diagnostic
.page
#########################################################################
# Save Context Macros
#
#########################################################################
SaveSPRs: .macro
stwu r1,-STACK_FRAME_SIZE(r1)
stw r0,XR0(r1)
mfsrr0 r0
stw r0,XSRR0(r1)
mfsrr1 r0
stw r0,XSRR1(r1)
mflr r0
stw r0,XLR(r1)
mfcr r0
stw r0,XCR(r1)
mfxer r0
stw r0,XXER(r1)
mfctr r0
stw r0,XCTR(r1)
.endm
SaveGPRs: .macro BIT,CBIT
stw r3,XR3(r1)
stw r4,XR4(r1)
.if NARG > 1
DiaBitSet r4,r3,r0,BIT,CBIT
.endc
stw r5,XR5(r1)
stw r6,XR6(r1)
stw r7,XR7(r1)
stw r8,XR8(r1)
stw r9,XR9(r1)
stw r10,XR10(r1)
stw r11,XR11(r1)
stw r12,XR12(r1)
stmw r14,XR14(r1)
.if OS_FP_SUPPORT
mfmsr r0
ori r0,r0,0x2000 ;make floating point available
mtmsr r0
stfd f0,XF0(r1)
stfd f1,XF1(r1)
stfd f2,XF2(r1)
stfd f3,XF3(r1)
stfd f4,XF4(r1)
stfd f5,XF5(r1)
stfd f6,XF6(r1)
stfd f7,XF7(r1)
stfd f8,XF8(r1)
stfd f9,XF9(r1)
stfd f10,XF10(r1)
stfd f11,XF11(r1)
stfd f12,XF12(r1)
stfd f13,XF13(r1)
stfd f14,XF14(r1)
stfd f15,XF15(r1)
stfd f16,XF16(r1)
stfd f17,XF17(r1)
stfd f18,XF18(r1)
stfd f19,XF19(r1)
stfd f20,XF20(r1)
stfd f21,XF21(r1)
stfd f22,XF22(r1)
stfd f23,XF23(r1)
stfd f24,XF24(r1)
stfd f25,XF25(r1)
stfd f26,XF26(r1)
stfd f27,XF27(r1)
stfd f28,XF28(r1)
stfd f29,XF29(r1)
stfd f30,XF30(r1)
stfd f31,XF31(r1)
mffs f0 ;save Floating Point Status Register
stfd f0,XFPSCR(r1)
.endif
.endm
.page
#########################################################################
# Restore Context Macros
#
#########################################################################
RestoreGPRs: .macro BIT,CBIT
.if OS_FP_SUPPORT
mfmsr r0
ori r0,r0,0x2000 ;make floating point available
mtmsr r0
lfd f0,XFPSCR(r1) ;restore Floating Point Status Register
mtfsf 0,f0
mtfsf 1,f0
mtfsf 2,f0
mtfsf 3,f0
mtfsf 4,f0
mtfsf 5,f0
mtfsf 6,f0
mtfsf 7,f0
lfd f31,XF31(r1)
lfd f30,XF30(r1)
lfd f29,XF29(r1)
lfd f28,XF28(r1)
lfd f27,XF27(r1)
lfd f26,XF26(r1)
lfd f25,XF25(r1)
lfd f24,XF24(r1)
lfd f23,XF23(r1)
lfd f22,XF22(r1)
lfd f21,XF21(r1)
lfd f20,XF20(r1)
lfd f19,XF19(r1)
lfd f18,XF18(r1)
lfd f17,XF17(r1)
lfd f16,XF16(r1)
lfd f15,XF15(r1)
lfd f14,XF14(r1)
lfd f13,XF13(r1)
lfd f12,XF12(r1)
lfd f11,XF11(r1)
lfd f10,XF10(r1)
lfd f9,XF9(r1)
lfd f8,XF8(r1)
lfd f7,XF7(r1)
lfd f6,XF6(r1)
lfd f5,XF5(r1)
lfd f4,XF4(r1)
lfd f3,XF3(r1)
lfd f2,XF2(r1)
lfd f1,XF1(r1)
lfd f0,XF0(r1)
.endif
lmw r14,XR14(r1)
lwz r12,XR12(r1)
lwz r11,XR11(r1)
lwz r10,XR10(r1)
lwz r9,XR9(r1)
lwz r8,XR8(r1)
lwz r7,XR7(r1)
lwz r6,XR6(r1)
lwz r5,XR5(r1)
.if NARG > 1
DiaBitReset r3,r4,r0,BIT,CBIT
.endc
lwz r4,XR4(r1)
lwz r3,XR3(r1)
.endm
RestoreSPRs: .macro
lwz r0,XCTR(r1)
mtctr r0
lwz r0,XXER(r1)
mtxer r0
lwz r0,XCR(r1)
mtcrf 255,r0
lwz r0,XLR(r1)
mtlr r0
lwz r0,XSRR1(r1)
mtsrr1 r0
lwz r0,XSRR0(r1)
mtsrr0 r0
lwz r0,XR0(r1)
addi r1,r1,STACK_FRAME_SIZE
.endm
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -