mirror of
https://github.com/autc04/Retro68.git
synced 2024-11-30 19:53:46 +00:00
126 lines
2.6 KiB
ArmAsm
126 lines
2.6 KiB
ArmAsm
/* libgcc routines for Toshiba Media Processor.
|
|
Copyright (C) 2001, 2002, 2005, 2009 Free Software Foundation, Inc.
|
|
|
|
This file is free software; you can redistribute it and/or modify it
|
|
under the terms of the GNU General Public License as published by the
|
|
Free Software Foundation; either version 3 of the License, or (at your
|
|
option) any later version.
|
|
|
|
This file is distributed in the hope that it will be useful, but
|
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
General Public License for more details.
|
|
|
|
Under Section 7 of GPL version 3, you are granted additional
|
|
permissions described in the GCC Runtime Library Exception, version
|
|
3.1, as published by the Free Software Foundation.
|
|
|
|
You should have received a copy of the GNU General Public License and
|
|
a copy of the GCC Runtime Library Exception along with this program;
|
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
|
<http://www.gnu.org/licenses/>. */
|
|
|
|
#define SAVEALL \
|
|
add3 $sp, $sp, -16*4 ; \
|
|
sw $0, ($sp) ; \
|
|
sw $1, 4($sp) ; \
|
|
sw $2, 8($sp) ; \
|
|
sw $3, 12($sp) ; \
|
|
sw $4, 16($sp) ; \
|
|
sw $5, 20($sp) ; \
|
|
sw $6, 24($sp) ; \
|
|
sw $7, 28($sp) ; \
|
|
sw $8, 32($sp) ; \
|
|
sw $9, 36($sp) ; \
|
|
sw $10, 40($sp) ; \
|
|
sw $11, 44($sp) ; \
|
|
sw $12, 48($sp) ; \
|
|
sw $13, 52($sp) ; \
|
|
sw $14, 56($sp) ; \
|
|
ldc $5, $lp ; \
|
|
add $5, 3 ; \
|
|
mov $6, -4 ; \
|
|
and $5, $6
|
|
|
|
#define RESTOREALL \
|
|
stc $5, $lp ; \
|
|
lw $14, 56($sp) ; \
|
|
lw $13, 52($sp) ; \
|
|
lw $12, 48($sp) ; \
|
|
lw $11, 44($sp) ; \
|
|
lw $10, 40($sp) ; \
|
|
lw $9, 36($sp) ; \
|
|
lw $8, 32($sp) ; \
|
|
lw $7, 28($sp) ; \
|
|
lw $6, 24($sp) ; \
|
|
lw $5, 20($sp) ; \
|
|
lw $4, 16($sp) ; \
|
|
lw $3, 12($sp) ; \
|
|
lw $2, 8($sp) ; \
|
|
lw $1, 4($sp) ; \
|
|
lw $0, ($sp) ; \
|
|
add3 $sp, $sp, 16*4 ; \
|
|
ret
|
|
|
|
#ifdef L_mep_profile
|
|
.text
|
|
.global __mep_mcount
|
|
__mep_mcount:
|
|
SAVEALL
|
|
ldc $1, $lp
|
|
mov $2, $0
|
|
bsr __mep_mcount_2
|
|
RESTOREALL
|
|
#endif
|
|
|
|
#ifdef L_mep_bb_init_trace
|
|
.text
|
|
.global __mep_bb_init_trace_func
|
|
__mep_bb_init_trace_func:
|
|
SAVEALL
|
|
lw $1, ($5)
|
|
lw $2, 4($5)
|
|
add $5, 8
|
|
bsr __bb_init_trace_func
|
|
RESTOREALL
|
|
#endif
|
|
|
|
#ifdef L_mep_bb_init
|
|
.text
|
|
.global __mep_bb_init_func
|
|
__mep_bb_init_func:
|
|
SAVEALL
|
|
lw $1, ($5)
|
|
add $5, 4
|
|
bsr __bb_init_func
|
|
RESTOREALL
|
|
#endif
|
|
|
|
#ifdef L_mep_bb_trace
|
|
.text
|
|
.global __mep_bb_trace_func
|
|
__mep_bb_trace_func:
|
|
SAVEALL
|
|
movu $3, __bb
|
|
lw $1, ($5)
|
|
sw $1, ($3)
|
|
lw $2, 4($5)
|
|
sw $2, 4($3)
|
|
add $5, 8
|
|
bsr __bb_trace_func
|
|
RESTOREALL
|
|
#endif
|
|
|
|
#ifdef L_mep_bb_increment
|
|
.text
|
|
.global __mep_bb_increment_func
|
|
__mep_bb_increment_func:
|
|
SAVEALL
|
|
lw $1, ($5)
|
|
lw $0, ($1)
|
|
add $0, 1
|
|
sw $0, ($1)
|
|
add $5, 4
|
|
RESTOREALL
|
|
#endif
|