; /* @(#)pswmacro.ah 1.1 96/05/23 08:56:58, TEI */
|
; /* @(#)pswmacro.ah 1.1 96/05/23 08:56:58, TEI */
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
; macros: Do_install and init_TLB
|
; macros: Do_install and init_TLB
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
; /* pswmacro.ah,v 1.2 2000/09/22 13:59:41 joel Exp */
|
; /* pswmacro.ah,v 1.2 2000/09/22 13:59:41 joel Exp */
|
|
|
;* File information and includes.
|
;* File information and includes.
|
|
|
.file "macro.ah"
|
.file "macro.ah"
|
.ident "@(#)pswmacro.ah 1.1 96/05/23 08:56:58, TEI"
|
.ident "@(#)pswmacro.ah 1.1 96/05/23 08:56:58, TEI"
|
|
|
|
|
.macro CONST32, RegName, RegValue
|
.macro CONST32, RegName, RegValue
|
const RegName, RegValue
|
const RegName, RegValue
|
consth RegName, RegValue
|
consth RegName, RegValue
|
.endm
|
.endm
|
|
|
.macro CONSTX, RegName, RegValue
|
.macro CONSTX, RegName, RegValue
|
.if (RegValue) <= 0x0000ffff
|
.if (RegValue) <= 0x0000ffff
|
const RegName, RegValue
|
const RegName, RegValue
|
.else
|
.else
|
const RegName, RegValue
|
const RegName, RegValue
|
consth RegName, RegValue
|
consth RegName, RegValue
|
.endif
|
.endif
|
.endm
|
.endm
|
|
|
.macro PRODEV, RegName
|
.macro PRODEV, RegName
|
srl RegName, RegName, 24
|
srl RegName, RegName, 24
|
.endm
|
.endm
|
|
|
;
|
;
|
;* MACRO TO INSTALL VECTOR TABLE ENTRIES
|
;* MACRO TO INSTALL VECTOR TABLE ENTRIES
|
;
|
;
|
|
|
;* Assumes vector table address in v0
|
;* Assumes vector table address in v0
|
|
|
.macro _setvec, trapnum, trapaddr
|
.macro _setvec, trapnum, trapaddr
|
mfsr v0, vab ;
|
mfsr v0, vab ;
|
const v2, trapnum ;
|
const v2, trapnum ;
|
sll v1, v2, 2 ;
|
sll v1, v2, 2 ;
|
add v1, v1, v0 ; v0 has location of vector tab
|
add v1, v1, v0 ; v0 has location of vector tab
|
|
|
const v2, trapaddr ;
|
const v2, trapaddr ;
|
consth v2, trapaddr ;
|
consth v2, trapaddr ;
|
store 0, 0, v2, v1 ;
|
store 0, 0, v2, v1 ;
|
nop ;
|
nop ;
|
.endm
|
.endm
|
|
|
.macro syscall, name
|
.macro syscall, name
|
const tav, HIF_@name ;
|
const tav, HIF_@name ;
|
asneq V_SYSCALL, gr1, gr1 ;
|
asneq V_SYSCALL, gr1, gr1 ;
|
nop ;
|
nop ;
|
nop ;
|
nop ;
|
.endm
|
.endm
|
|
|
|
|
|
|
;* MACRO TO INSTALL VECTOR TABLE ENTRIES
|
;* MACRO TO INSTALL VECTOR TABLE ENTRIES
|
|
|
.macro Do_Install, V_Number, V_Address
|
.macro Do_Install, V_Number, V_Address
|
const lr4, V_Address
|
const lr4, V_Address
|
consth lr4, V_Address
|
consth lr4, V_Address
|
const lr3, V_Number * 4
|
const lr3, V_Number * 4
|
consth lr3, V_Number * 4
|
consth lr3, V_Number * 4
|
call lr0, V_Install
|
call lr0, V_Install
|
nop
|
nop
|
.endm
|
.endm
|
|
|
.macro Do_InstallX, V_Number, V_Address
|
.macro Do_InstallX, V_Number, V_Address
|
const lr4, V_Address
|
const lr4, V_Address
|
consth lr4, V_Address
|
consth lr4, V_Address
|
const lr3, V_Number * 4
|
const lr3, V_Number * 4
|
consth lr3, V_Number * 4
|
consth lr3, V_Number * 4
|
call lr0, V_InstallX
|
call lr0, V_InstallX
|
nop
|
nop
|
.endm
|
.endm
|
|
|
|
|
|
|
; push a register onto the stack
|
; push a register onto the stack
|
.macro pushreg, reg, sp
|
.macro pushreg, reg, sp
|
sub sp, sp, 4 ; adjust stack pointer
|
sub sp, sp, 4 ; adjust stack pointer
|
store 0, 0, reg, sp ; push register
|
store 0, 0, reg, sp ; push register
|
.endm
|
.endm
|
|
|
.macro push, sp, reg
|
.macro push, sp, reg
|
sub sp, sp, 4
|
sub sp, sp, 4
|
store 0, 0, reg, sp
|
store 0, 0, reg, sp
|
.endm
|
.endm
|
|
|
; pop the register from stack
|
; pop the register from stack
|
.macro popreg, reg, sp
|
.macro popreg, reg, sp
|
load 0, 0, reg, sp ; pop register
|
load 0, 0, reg, sp ; pop register
|
add sp, sp, 4 ; adjust stack pointer
|
add sp, sp, 4 ; adjust stack pointer
|
.endm
|
.endm
|
.macro pop, reg, sp
|
.macro pop, reg, sp
|
load 0, 0, reg, sp
|
load 0, 0, reg, sp
|
add sp, sp, 4
|
add sp, sp, 4
|
.endm
|
.endm
|
|
|
; push a special register onto stack
|
; push a special register onto stack
|
.macro pushspcl, spcl, tmpreg, sp
|
.macro pushspcl, spcl, tmpreg, sp
|
sub sp, sp, 4 ; adjust stack pointer
|
sub sp, sp, 4 ; adjust stack pointer
|
mfsr tmpreg, spcl ; get spcl reg
|
mfsr tmpreg, spcl ; get spcl reg
|
store 0, 0, tmpreg, sp ; push onto stack
|
store 0, 0, tmpreg, sp ; push onto stack
|
.endm
|
.endm
|
|
|
.macro pushsr, sp, reg, sreg
|
.macro pushsr, sp, reg, sreg
|
mfsr reg, sreg
|
mfsr reg, sreg
|
sub sp, sp, 4
|
sub sp, sp, 4
|
store 0, 0, reg, sp
|
store 0, 0, reg, sp
|
.endm
|
.endm
|
|
|
; pop a special register from stack
|
; pop a special register from stack
|
.macro popspcl, spcl, tmpreg, sp
|
.macro popspcl, spcl, tmpreg, sp
|
load 0, 0, tmpreg, sp ; pop from stack
|
load 0, 0, tmpreg, sp ; pop from stack
|
add sp, sp, 4 ; adjust stack pointer
|
add sp, sp, 4 ; adjust stack pointer
|
mtsr spcl, tmpreg ; set spcl reg
|
mtsr spcl, tmpreg ; set spcl reg
|
.endm
|
.endm
|
|
|
.macro popsr, sreg, reg, sp
|
.macro popsr, sreg, reg, sp
|
load 0, 0, reg, sp
|
load 0, 0, reg, sp
|
add sp, sp, 4
|
add sp, sp, 4
|
mtsr sreg, reg
|
mtsr sreg, reg
|
.endm
|
.endm
|
|
|
;
|
;
|
; save freeze mode registers on memory stack.
|
; save freeze mode registers on memory stack.
|
;
|
;
|
|
|
.macro SaveFZState, tmp1, tmp2
|
.macro SaveFZState, tmp1, tmp2
|
|
|
; save freeze mode registers.
|
; save freeze mode registers.
|
|
|
pushspcl pc0, tmp1, msp
|
pushspcl pc0, tmp1, msp
|
pushspcl pc1, tmp1, msp
|
pushspcl pc1, tmp1, msp
|
pushspcl alu, tmp1, msp
|
pushspcl alu, tmp1, msp
|
|
|
pushspcl cha, tmp1, msp
|
pushspcl cha, tmp1, msp
|
pushspcl chd, tmp1, msp
|
pushspcl chd, tmp1, msp
|
pushspcl chc, tmp1, msp
|
pushspcl chc, tmp1, msp
|
|
|
pushspcl ops, tmp1, msp
|
pushspcl ops, tmp1, msp
|
|
|
; turn freeze off
|
; turn freeze off
|
|
|
const tmp2, FZ
|
const tmp2, FZ
|
mfsr tmp1, cps
|
mfsr tmp1, cps
|
andn tmp1, tmp1, tmp2
|
andn tmp1, tmp1, tmp2
|
mtsr cps, tmp1
|
mtsr cps, tmp1
|
.endm
|
.endm
|
|
|
; restore freeze mode registers from memory stack.
|
; restore freeze mode registers from memory stack.
|
|
|
.macro RestoreFZState, tmp1, tmp2
|
.macro RestoreFZState, tmp1, tmp2
|
|
|
; turn freeze on
|
; turn freeze on
|
|
|
const tmp2, (FZ|DI|DA)
|
const tmp2, (FZ|DI|DA)
|
mfsr tmp1, cps
|
mfsr tmp1, cps
|
or tmp1, tmp1, tmp2
|
or tmp1, tmp1, tmp2
|
mtsr cps, tmp1
|
mtsr cps, tmp1
|
|
|
; restore freeze mode registers.
|
; restore freeze mode registers.
|
|
|
popspcl ops, tmp1, msp
|
popspcl ops, tmp1, msp
|
popspcl chc, tmp1, msp
|
popspcl chc, tmp1, msp
|
popspcl chd, tmp1, msp
|
popspcl chd, tmp1, msp
|
popspcl cha, tmp1, msp
|
popspcl cha, tmp1, msp
|
popspcl alu, tmp1, msp
|
popspcl alu, tmp1, msp
|
popspcl pc1, tmp1, msp
|
popspcl pc1, tmp1, msp
|
popspcl pc0, tmp1, msp
|
popspcl pc0, tmp1, msp
|
.endm
|
.endm
|
|
|
;
|
;
|
;*
|
;*
|
;
|
;
|
.equ WS, 512 ; window size
|
.equ WS, 512 ; window size
|
.equ RALLOC, 4 * 4 ; stack alloc for C
|
.equ RALLOC, 4 * 4 ; stack alloc for C
|
.equ SIGCTX_UM_SIZE, 40 * 4 ;
|
.equ SIGCTX_UM_SIZE, 40 * 4 ;
|
.equ SIGCTX_RFB, (38) * 4 ; user mode saved
|
.equ SIGCTX_RFB, (38) * 4 ; user mode saved
|
.equ SIGCTX_SM_SIZE, 12 * 4 ;
|
.equ SIGCTX_SM_SIZE, 12 * 4 ;
|
.equ SIGCTX_SIG, (11)*4 + SIGCTX_UM_SIZE ;
|
.equ SIGCTX_SIG, (11)*4 + SIGCTX_UM_SIZE ;
|
.equ SIGCTX_GR1, (10)*4 + SIGCTX_UM_SIZE ;
|
.equ SIGCTX_GR1, (10)*4 + SIGCTX_UM_SIZE ;
|
.equ SIGCTX_RAB, (9)*4 + SIGCTX_UM_SIZE ;
|
.equ SIGCTX_RAB, (9)*4 + SIGCTX_UM_SIZE ;
|
.equ SIGCTX_PC0, (8)*4 + SIGCTX_UM_SIZE ;
|
.equ SIGCTX_PC0, (8)*4 + SIGCTX_UM_SIZE ;
|
.equ SIGCTX_PC1, (7)*4 + SIGCTX_UM_SIZE ;
|
.equ SIGCTX_PC1, (7)*4 + SIGCTX_UM_SIZE ;
|
.equ SIGCTX_PC2, (6)*4 + SIGCTX_UM_SIZE ;
|
.equ SIGCTX_PC2, (6)*4 + SIGCTX_UM_SIZE ;
|
.equ SIGCTX_CHC, (3)*4 + SIGCTX_UM_SIZE ;
|
.equ SIGCTX_CHC, (3)*4 + SIGCTX_UM_SIZE ;
|
.equ SIGCTX_OPS, (1)*4 + SIGCTX_UM_SIZE ;
|
.equ SIGCTX_OPS, (1)*4 + SIGCTX_UM_SIZE ;
|
.equ SIGCTX_TAV, (0)*4 + SIGCTX_UM_SIZE ;
|
.equ SIGCTX_TAV, (0)*4 + SIGCTX_UM_SIZE ;
|
|
|
.macro sup_sv
|
.macro sup_sv
|
add it2, trapreg, 0 ; transfer signal #
|
add it2, trapreg, 0 ; transfer signal #
|
sub msp, msp, 4 ;
|
sub msp, msp, 4 ;
|
store 0, 0, it2, msp ; save signal number
|
store 0, 0, it2, msp ; save signal number
|
sub msp, msp, 4 ; push gr1
|
sub msp, msp, 4 ; push gr1
|
|
|
store 0, 0, gr1, msp ;
|
store 0, 0, gr1, msp ;
|
sub msp, msp, 4 ; push rab
|
sub msp, msp, 4 ; push rab
|
store 0, 0, rab, msp ;
|
store 0, 0, rab, msp ;
|
const it0, WS ; Window size
|
const it0, WS ; Window size
|
|
|
sub rab, rfb, it0 ; set rab = rfb-512
|
sub rab, rfb, it0 ; set rab = rfb-512
|
pushsr msp, it0, PC0 ; save program counter0
|
pushsr msp, it0, PC0 ; save program counter0
|
pushsr msp, it0, PC1 ; save program counter1
|
pushsr msp, it0, PC1 ; save program counter1
|
pushsr msp, it0, PC2 ; save program counter2
|
pushsr msp, it0, PC2 ; save program counter2
|
|
|
pushsr msp, it0, CHA ; save channel address
|
pushsr msp, it0, CHA ; save channel address
|
pushsr msp, it0, CHD ; save channel data
|
pushsr msp, it0, CHD ; save channel data
|
pushsr msp, it0, CHC ; save channel control
|
pushsr msp, it0, CHC ; save channel control
|
pushsr msp, it0, ALU ; save alu
|
pushsr msp, it0, ALU ; save alu
|
|
|
pushsr msp, it0, OPS ; save ops
|
pushsr msp, it0, OPS ; save ops
|
sub msp, msp, 4 ;
|
sub msp, msp, 4 ;
|
store 0, 0, tav, msp ; push tav
|
store 0, 0, tav, msp ; push tav
|
mtsrim chc, 0 ; no loadm/storem
|
mtsrim chc, 0 ; no loadm/storem
|
|
|
mfsr it0, ops ; get ops value
|
mfsr it0, ops ; get ops value
|
const it1, (TD | DI) ; disable interrupts
|
const it1, (TD | DI) ; disable interrupts
|
consth it1, (TD | DI) ; disable interrupts
|
consth it1, (TD | DI) ; disable interrupts
|
or it0, it0, it1 ; set bits
|
or it0, it0, it1 ; set bits
|
|
|
mtsr ops, it0 ; set new ops
|
mtsr ops, it0 ; set new ops
|
const it0, _sigcode ; signal handler
|
const it0, _sigcode ; signal handler
|
consth it0, _sigcode ; signal handler
|
consth it0, _sigcode ; signal handler
|
mtsr pc1, it0 ; store pc1
|
mtsr pc1, it0 ; store pc1
|
|
|
add it1, it0, 4 ; next addr
|
add it1, it0, 4 ; next addr
|
mtsr pc0, it1 ; store pc1 location
|
mtsr pc0, it1 ; store pc1 location
|
iret ; return
|
iret ; return
|
nop ; ALIGN
|
nop ; ALIGN
|
.endm
|
.endm
|
|
|
.macro sig_return
|
.macro sig_return
|
mfsr it0, cps ; get processor status
|
mfsr it0, cps ; get processor status
|
const it1, FZ|DA ; Freeze + traps disable
|
const it1, FZ|DA ; Freeze + traps disable
|
or it0, it0, it1 ; to set FZ+DA
|
or it0, it0, it1 ; to set FZ+DA
|
mtsr cps, it0 ; in freeze mode
|
mtsr cps, it0 ; in freeze mode
|
|
|
load 0, 0, tav, msp ; restore tav
|
load 0, 0, tav, msp ; restore tav
|
add msp, msp, 4 ;
|
add msp, msp, 4 ;
|
|
|
popsr OPS,it0, msp ;
|
popsr OPS,it0, msp ;
|
popsr ALU,it0, msp ;
|
popsr ALU,it0, msp ;
|
popsr CHC,it0, msp ;
|
popsr CHC,it0, msp ;
|
popsr CHD,it0, msp ;
|
popsr CHD,it0, msp ;
|
|
|
popsr CHA,it0, msp ;
|
popsr CHA,it0, msp ;
|
popsr PC2,it0, msp ;
|
popsr PC2,it0, msp ;
|
popsr PC1,it0, msp ;
|
popsr PC1,it0, msp ;
|
popsr PC0,it0, msp ;
|
popsr PC0,it0, msp ;
|
|
|
load 0, 0, rab, msp ;
|
load 0, 0, rab, msp ;
|
add msp, msp, 4 ;
|
add msp, msp, 4 ;
|
load 0, 0, it0, msp ;
|
load 0, 0, it0, msp ;
|
add gr1, it0, 0 ; pop rsp
|
add gr1, it0, 0 ; pop rsp
|
|
|
add msp, msp, 8 ; discount signal #
|
add msp, msp, 8 ; discount signal #
|
iret
|
iret
|
.endm
|
.endm
|
|
|
.macro repair_R_stack
|
.macro repair_R_stack
|
add v0, msp, SIGCTX_GR1 ; interrupted gr1
|
add v0, msp, SIGCTX_GR1 ; interrupted gr1
|
load 0, 0, v2, v0 ;
|
load 0, 0, v2, v0 ;
|
add v0, msp, SIGCTX_RFB ;
|
add v0, msp, SIGCTX_RFB ;
|
load 0, 0, v3, v0 ; interupted rfb
|
load 0, 0, v3, v0 ; interupted rfb
|
|
|
const v1, WS ;
|
const v1, WS ;
|
sub v1, v3, v1 ; rfb-512
|
sub v1, v3, v1 ; rfb-512
|
cpltu v0, v2, v1 ; test gr1 < rfb-512
|
cpltu v0, v2, v1 ; test gr1 < rfb-512
|
jmpf v0, $1 ;
|
jmpf v0, $1 ;
|
|
|
add gr1, rab, 0 ;
|
add gr1, rab, 0 ;
|
add v2, v1, 0 ; set LB = rfb-512
|
add v2, v1, 0 ; set LB = rfb-512
|
$1:
|
$1:
|
;* if gr1 < rfb-512 yes LB = rfb-512 signalled during spill
|
;* if gr1 < rfb-512 yes LB = rfb-512 signalled during spill
|
;* if no, LB=gr1 interrupted cache < 126 registers
|
;* if no, LB=gr1 interrupted cache < 126 registers
|
cpleu v0, v2, rfb ; test LB<=rfb
|
cpleu v0, v2, rfb ; test LB<=rfb
|
jmpf v0, $2 ;
|
jmpf v0, $2 ;
|
nop ;
|
nop ;
|
add v2, rfb, 0 ;
|
add v2, rfb, 0 ;
|
$2:
|
$2:
|
cpeq v0, v3, rfb ; fill rfb->rfb
|
cpeq v0, v3, rfb ; fill rfb->rfb
|
jmpt v0, $3 ; if rfb==rfb
|
jmpt v0, $3 ; if rfb==rfb
|
const tav, (0x80<<2) ; prepare for fill
|
const tav, (0x80<<2) ; prepare for fill
|
or tav, tav, v2 ;
|
or tav, tav, v2 ;
|
|
|
mtsr IPA, tav ; IPA=LA<<2
|
mtsr IPA, tav ; IPA=LA<<2
|
sub tav, v3, gr98 ; cache fill LA->rfb
|
sub tav, v3, gr98 ; cache fill LA->rfb
|
srl tav, tav, 2 ; convert to words
|
srl tav, tav, 2 ; convert to words
|
sub tav, tav, 1 ;
|
sub tav, tav, 1 ;
|
|
|
mtsr cr, tav ;
|
mtsr cr, tav ;
|
loadm 0, 0, gr0, v2 ; fill from LA->rfb
|
loadm 0, 0, gr0, v2 ; fill from LA->rfb
|
$3:
|
$3:
|
add rfb, v3, 0 ; move rfb upto rfb
|
add rfb, v3, 0 ; move rfb upto rfb
|
sub rab, v1, 0 ; assign rab to rfb-512
|
sub rab, v1, 0 ; assign rab to rfb-512
|
|
|
add v0, msp, SIGCTX_GR1 ;
|
add v0, msp, SIGCTX_GR1 ;
|
load 0, 0, v2, v0 ; v0 = interrupted gr1
|
load 0, 0, v2, v0 ; v0 = interrupted gr1
|
add gr1, v2, 0 ; move gr1 upto gr1
|
add gr1, v2, 0 ; move gr1 upto gr1
|
nop ;
|
nop ;
|
.endm
|
.endm
|
|
|
.macro repair_regs
|
.macro repair_regs
|
mtsrim cr, 29 - 1 ; to restore locals
|
mtsrim cr, 29 - 1 ; to restore locals
|
loadm 0, 0, v0, msp ;
|
loadm 0, 0, v0, msp ;
|
add msp, msp, 29*4 ;
|
add msp, msp, 29*4 ;
|
popsr Q, tav, msp ;
|
popsr Q, tav, msp ;
|
|
|
popsr IPC, tav, msp ;
|
popsr IPC, tav, msp ;
|
popsr IPB, tav, msp ;
|
popsr IPB, tav, msp ;
|
popsr IPA, tav, msp ;
|
popsr IPA, tav, msp ;
|
pop FPStat3, msp ; floating point regs
|
pop FPStat3, msp ; floating point regs
|
|
|
pop FPStat2, msp ; floating point regs
|
pop FPStat2, msp ; floating point regs
|
pop FPStat1, msp ; floating point regs
|
pop FPStat1, msp ; floating point regs
|
pop FPStat0, msp ; floating point regs
|
pop FPStat0, msp ; floating point regs
|
|
|
add msp, msp, 3*4 ; R-stack repaired
|
add msp, msp, 3*4 ; R-stack repaired
|
.endm
|
.endm
|
|
|
;
|
;
|
;*HIF related...
|
;*HIF related...
|
;
|
;
|
|
|
|
|
|
|
|
|
; send the message in bufaddr to Montip.
|
; send the message in bufaddr to Montip.
|
.macro SendMessageToMontip, bufaddr
|
.macro SendMessageToMontip, bufaddr
|
const lr2, bufaddr
|
const lr2, bufaddr
|
$1:
|
$1:
|
call lr0, _msg_send
|
call lr0, _msg_send
|
consth lr2, bufaddr
|
consth lr2, bufaddr
|
cpeq gr96, gr96, 0
|
cpeq gr96, gr96, 0
|
jmpf gr96, $1
|
jmpf gr96, $1
|
const lr2, bufaddr
|
const lr2, bufaddr
|
.endm
|
.endm
|
|
|
; build a HIF_CALL message in bufaddr to send to montip.
|
; build a HIF_CALL message in bufaddr to send to montip.
|
.macro BuildHIFCALLMsg, bufaddr, tmp1, tmp2
|
.macro BuildHIFCALLMsg, bufaddr, tmp1, tmp2
|
const tmp1, bufaddr
|
const tmp1, bufaddr
|
consth tmp1, bufaddr
|
consth tmp1, bufaddr
|
const tmp2, HIF_CALL_MSGCODE
|
const tmp2, HIF_CALL_MSGCODE
|
store 0, 0, tmp2, tmp1 ; msg code
|
store 0, 0, tmp2, tmp1 ; msg code
|
add tmp1, tmp1, 4
|
add tmp1, tmp1, 4
|
const tmp2, HIF_CALL_MSGLEN
|
const tmp2, HIF_CALL_MSGLEN
|
store 0, 0, tmp2, tmp1 ; msg len
|
store 0, 0, tmp2, tmp1 ; msg len
|
add tmp1, tmp1, 4
|
add tmp1, tmp1, 4
|
store 0, 0, gr121, tmp1 ; service number
|
store 0, 0, gr121, tmp1 ; service number
|
add tmp1, tmp1, 4
|
add tmp1, tmp1, 4
|
store 0, 0, lr2, tmp1 ; lr2
|
store 0, 0, lr2, tmp1 ; lr2
|
add tmp1, tmp1, 4
|
add tmp1, tmp1, 4
|
store 0, 0, lr3, tmp1 ; lr3
|
store 0, 0, lr3, tmp1 ; lr3
|
add tmp1, tmp1, 4
|
add tmp1, tmp1, 4
|
store 0, 0, lr4, tmp1 ; lr4
|
store 0, 0, lr4, tmp1 ; lr4
|
.endm
|
.endm
|
|
|
;
|
;
|
;*
|
;*
|
;* All the funky AMD style macros go in here...simply for
|
;* All the funky AMD style macros go in here...simply for
|
;* compatility
|
;* compatility
|
;
|
;
|
;
|
;
|
.macro IMPORT, symbol
|
.macro IMPORT, symbol
|
.extern symbol
|
.extern symbol
|
.endm
|
.endm
|
|
|
.macro GLOBAL, symbol
|
.macro GLOBAL, symbol
|
.global symbol
|
.global symbol
|
.endm
|
.endm
|
|
|
.macro USESECT, name, type
|
.macro USESECT, name, type
|
.sect name, type
|
.sect name, type
|
.use name
|
.use name
|
.endm
|
.endm
|
|
|
.macro SECTION, name, type
|
.macro SECTION, name, type
|
.sect name, type
|
.sect name, type
|
.endm
|
.endm
|
|
|
.macro FUNC, fname, lineno
|
.macro FUNC, fname, lineno
|
.global fname
|
.global fname
|
fname:
|
fname:
|
.endm
|
.endm
|
|
|
.macro ENDFUNC, fname, lineno
|
.macro ENDFUNC, fname, lineno
|
.endm
|
.endm
|
|
|
;*************************************LONG
|
;*************************************LONG
|
.macro LONG, varname
|
.macro LONG, varname
|
varname:
|
varname:
|
.block 4
|
.block 4
|
.endm
|
.endm
|
|
|
;*************************************UNSIGNED LONG
|
;*************************************UNSIGNED LONG
|
.macro ULONG, varname
|
.macro ULONG, varname
|
varname:
|
varname:
|
.block 4
|
.block 4
|
.endm
|
.endm
|
|
|
;*************************************SHORT
|
;*************************************SHORT
|
.macro SHORT, varname
|
.macro SHORT, varname
|
varname:
|
varname:
|
.block 2
|
.block 2
|
.endm
|
.endm
|
|
|
;*************************************CHAR
|
;*************************************CHAR
|
.macro CHAR, varname
|
.macro CHAR, varname
|
varname:
|
varname:
|
.block 1
|
.block 1
|
.endm
|
.endm
|
|
|
;*************************************LONGARRAY
|
;*************************************LONGARRAY
|
.macro LONGARRAY, name, count
|
.macro LONGARRAY, name, count
|
name:
|
name:
|
.block count*4
|
.block count*4
|
.endm
|
.endm
|
|
|
;*************************************SHORTARRAY
|
;*************************************SHORTARRAY
|
|
|
.macro SHORTARRAY, name, count
|
.macro SHORTARRAY, name, count
|
name:
|
name:
|
.block count*2
|
.block count*2
|
.endm
|
.endm
|
|
|
;*************************************CHARARRAY
|
;*************************************CHARARRAY
|
|
|
.macro CHARARRAY, name, count
|
.macro CHARARRAY, name, count
|
name:
|
name:
|
.block count
|
.block count
|
.endm
|
.endm
|
|
|
|
|
;*************************************VOID_FPTR
|
;*************************************VOID_FPTR
|
|
|
.macro VOID_FPTR, name
|
.macro VOID_FPTR, name
|
name:
|
name:
|
.block 4
|
.block 4
|
.endm
|
.endm
|
|
|