123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- /*
- * tbidspram.S
- *
- * Copyright (C) 2009, 2012 Imagination Technologies.
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License version 2 as published by the
- * Free Software Foundation.
- *
- * Explicit state save and restore routines forming part of the thread binary
- * interface for META processors
- */
- .file "tbidspram.S"
- /* These aren't generally useful to a user so for now, they arent publically available */
- #define _TBIECH_DSPRAM_DUA_S 8
- #define _TBIECH_DSPRAM_DUA_BITS 0x7f00
- #define _TBIECH_DSPRAM_DUB_S 0
- #define _TBIECH_DSPRAM_DUB_BITS 0x007f
- /*
- * void *__TBIDspramSaveA( short DspramSizes, void *pExt )
- */
- .text
- .balign 4
- .global ___TBIDspramSaveA
- .type ___TBIDspramSaveA,function
- ___TBIDspramSaveA:
- SETL [A0StP++], D0.5, D1.5
- MOV A0.3, D0Ar2
- /* D1Ar1 - Dspram Sizes
- * A0.4 - Pointer to buffer
- */
- /* Save the specified amount of dspram DUA */
- DL MOV D0AR.0, #0
- LSR D1Ar1, D1Ar1, #_TBIECH_DSPRAM_DUA_S
- AND D1Ar1, D1Ar1, #(_TBIECH_DSPRAM_DUA_BITS >> _TBIECH_DSPRAM_DUA_S)
- SUB TXRPT, D1Ar1, #1
- $L1:
- DL MOV D0Re0, [D0AR.0++]
- DL MOV D0Ar6, [D0AR.0++]
- DL MOV D0Ar4, [D0AR.0++]
- DL MOV D0.5, [D0AR.0++]
- MSETL [A0.3++], D0Re0, D0Ar6, D0Ar4, D0.5
- BR $L1
- GETL D0.5, D1.5, [--A0StP]
- MOV PC, D1RtP
- .size ___TBIDspramSaveA,.-___TBIDspramSaveA
- /*
- * void *__TBIDspramSaveB( short DspramSizes, void *pExt )
- */
- .balign 4
- .global ___TBIDspramSaveB
- .type ___TBIDspramSaveB,function
- ___TBIDspramSaveB:
- SETL [A0StP++], D0.5, D1.5
- MOV A0.3, D0Ar2
- /* D1Ar1 - Dspram Sizes
- * A0.3 - Pointer to buffer
- */
- /* Save the specified amount of dspram DUA */
- DL MOV D0BR.0, #0
- LSR D1Ar1, D1Ar1, #_TBIECH_DSPRAM_DUB_S
- AND D1Ar1, D1Ar1, #(_TBIECH_DSPRAM_DUB_BITS >> _TBIECH_DSPRAM_DUB_S)
- SUB TXRPT, D1Ar1, #1
- $L2:
- DL MOV D0Re0, [D0BR.0++]
- DL MOV D0Ar6, [D0BR.0++]
- DL MOV D0Ar4, [D0BR.0++]
- DL MOV D0.5, [D0BR.0++]
- MSETL [A0.3++], D0Re0, D0Ar6, D0Ar4, D0.5
- BR $L2
- GETL D0.5, D1.5, [--A0StP]
- MOV PC, D1RtP
- .size ___TBIDspramSaveB,.-___TBIDspramSaveB
- /*
- * void *__TBIDspramRestoreA( short DspramSizes, void *pExt )
- */
- .balign 4
- .global ___TBIDspramRestoreA
- .type ___TBIDspramRestoreA,function
- ___TBIDspramRestoreA:
- SETL [A0StP++], D0.5, D1.5
- MOV A0.3, D0Ar2
- /* D1Ar1 - Dspram Sizes
- * A0.3 - Pointer to buffer
- */
- /* Restore the specified amount of dspram DUA */
- DL MOV D0AW.0, #0
- LSR D1Ar1, D1Ar1, #_TBIECH_DSPRAM_DUA_S
- AND D1Ar1, D1Ar1, #(_TBIECH_DSPRAM_DUA_BITS >> _TBIECH_DSPRAM_DUA_S)
- SUB TXRPT, D1Ar1, #1
- $L3:
- MGETL D0Re0, D0Ar6, D0Ar4, D0.5, [A0.3++]
- DL MOV [D0AW.0++], D0Re0
- DL MOV [D0AW.0++], D0Ar6
- DL MOV [D0AW.0++], D0Ar4
- DL MOV [D0AW.0++], D0.5
- BR $L3
- GETL D0.5, D1.5, [--A0StP]
- MOV PC, D1RtP
- .size ___TBIDspramRestoreA,.-___TBIDspramRestoreA
- /*
- * void *__TBIDspramRestoreB( short DspramSizes, void *pExt )
- */
- .balign 4
- .global ___TBIDspramRestoreB
- .type ___TBIDspramRestoreB,function
- ___TBIDspramRestoreB:
- SETL [A0StP++], D0.5, D1.5
- MOV A0.3, D0Ar2
- /* D1Ar1 - Dspram Sizes
- * A0.3 - Pointer to buffer
- */
- /* Restore the specified amount of dspram DUA */
- DL MOV D0BW.0, #0
- LSR D1Ar1, D1Ar1, #_TBIECH_DSPRAM_DUB_S
- AND D1Ar1, D1Ar1, #(_TBIECH_DSPRAM_DUB_BITS >> _TBIECH_DSPRAM_DUB_S)
- SUB TXRPT, D1Ar1, #1
- $L4:
- MGETL D0Re0, D0Ar6, D0Ar4, D0.5, [A0.3++]
- DL MOV [D0BW.0++], D0Re0
- DL MOV [D0BW.0++], D0Ar6
- DL MOV [D0BW.0++], D0Ar4
- DL MOV [D0BW.0++], D0.5
- BR $L4
- GETL D0.5, D1.5, [--A0StP]
- MOV PC, D1RtP
- .size ___TBIDspramRestoreB,.-___TBIDspramRestoreB
- /*
- * End of tbidspram.S
- */
|