Extended the range of fastcalls to 128...255.

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@15771 27425a3e-05d8-49a3-a47f-9c15f0e5edd8
This commit is contained in:
Giovanni Di Sirio 2022-09-08 11:58:33 +00:00
parent 325a92945f
commit 97df73ffdc
4 changed files with 17 additions and 17 deletions

View File

@ -228,7 +228,7 @@ SVC_Handler:
ldr r3, [r2, #24] /* PC position. */
ldrh r0, [r3, #-2] /* SVC opcode. */
and r0, #255
cmp r0, #0xF0
cmp r0, #0x80
bge __port_do_fastcall_entry
bic r12, #1
msr CONTROL, r12 /* Switching to privileged. */

View File

@ -51,9 +51,9 @@
#define SB_SYSC_LOADELF 12
#define SB_SYSC_VHAL_VGPIO 200
#define SB_SYSC_VHAL_VUART 201
#define SB_SYSC_VRQ_SET_ALARM 237
#define SB_SYSC_VRQ_RESET_ALARM 238
#define SB_SYSC_VRQ_WAIT 239
#define SB_SYSC_VRQ_SET_ALARM 125
#define SB_SYSC_VRQ_RESET_ALARM 126
#define SB_SYSC_VRQ_WAIT 127
#define SB_SYSC_VRQ_SETWT 248
#define SB_SYSC_VRQ_CLRWT 249
#define SB_SYSC_VRQ_SETEN 250

View File

@ -76,9 +76,9 @@ static void sb_api_loadelf(struct port_extctx *ectxp);
* @{
*/
#if (SB_CFG_ENABLE_VRQ == TRUE) || defined(__DOXYGEN__)
#define SB_SVC237_HANDLER sb_api_vrq_set_alarm
#define SB_SVC238_HANDLER sb_api_vrq_reset_alarm
#define SB_SVC239_HANDLER sb_api_vrq_wait
#define SB_SVC125_HANDLER sb_api_vrq_set_alarm
#define SB_SVC126_HANDLER sb_api_vrq_reset_alarm
#define SB_SVC127_HANDLER sb_api_vrq_wait
#define SB_SVC248_HANDLER sb_api_vrq_setwt
#define SB_SVC249_HANDLER sb_api_vrq_clrwt
#define SB_SVC250_HANDLER sb_api_vrq_seten
@ -870,7 +870,7 @@ static void sb_api_loadelf(struct port_extctx *ectxp);
static void sb_undef_handler(struct port_extctx *ectxp);
const port_syscall_t sb_syscalls[240] = {
const port_syscall_t sb_syscalls[128] = {
SB_SVC0_HANDLER, SB_SVC1_HANDLER, SB_SVC2_HANDLER, SB_SVC3_HANDLER,
SB_SVC4_HANDLER, SB_SVC5_HANDLER, SB_SVC6_HANDLER, SB_SVC7_HANDLER,
SB_SVC8_HANDLER, SB_SVC9_HANDLER, SB_SVC10_HANDLER, SB_SVC11_HANDLER,
@ -902,7 +902,10 @@ const port_syscall_t sb_syscalls[240] = {
SB_SVC112_HANDLER, SB_SVC113_HANDLER, SB_SVC114_HANDLER, SB_SVC115_HANDLER,
SB_SVC116_HANDLER, SB_SVC117_HANDLER, SB_SVC118_HANDLER, SB_SVC119_HANDLER,
SB_SVC120_HANDLER, SB_SVC121_HANDLER, SB_SVC122_HANDLER, SB_SVC123_HANDLER,
SB_SVC124_HANDLER, SB_SVC125_HANDLER, SB_SVC126_HANDLER, SB_SVC127_HANDLER,
SB_SVC124_HANDLER, SB_SVC125_HANDLER, SB_SVC126_HANDLER, SB_SVC127_HANDLER
};
const port_syscall_t sb_fastcalls[128] = {
SB_SVC128_HANDLER, SB_SVC129_HANDLER, SB_SVC130_HANDLER, SB_SVC131_HANDLER,
SB_SVC132_HANDLER, SB_SVC133_HANDLER, SB_SVC134_HANDLER, SB_SVC135_HANDLER,
SB_SVC136_HANDLER, SB_SVC137_HANDLER, SB_SVC138_HANDLER, SB_SVC139_HANDLER,
@ -930,10 +933,7 @@ const port_syscall_t sb_syscalls[240] = {
SB_SVC224_HANDLER, SB_SVC225_HANDLER, SB_SVC226_HANDLER, SB_SVC227_HANDLER,
SB_SVC228_HANDLER, SB_SVC229_HANDLER, SB_SVC230_HANDLER, SB_SVC231_HANDLER,
SB_SVC232_HANDLER, SB_SVC233_HANDLER, SB_SVC234_HANDLER, SB_SVC235_HANDLER,
SB_SVC236_HANDLER, SB_SVC237_HANDLER, SB_SVC238_HANDLER, SB_SVC239_HANDLER
};
const port_syscall_t sb_fastcalls[16] = {
SB_SVC236_HANDLER, SB_SVC237_HANDLER, SB_SVC238_HANDLER, SB_SVC239_HANDLER,
SB_SVC240_HANDLER, SB_SVC241_HANDLER, SB_SVC242_HANDLER, SB_SVC243_HANDLER,
SB_SVC244_HANDLER, SB_SVC245_HANDLER, SB_SVC246_HANDLER, SB_SVC247_HANDLER,
SB_SVC248_HANDLER, SB_SVC249_HANDLER, SB_SVC250_HANDLER, SB_SVC251_HANDLER,
@ -1283,7 +1283,7 @@ void __port_do_fastcall_entry(uint32_t n) {
struct port_extctx *ectxp;
ectxp = (struct port_extctx *)__get_PSP();
sb_fastcalls[n - 240](ectxp);
sb_fastcalls[n - 128](ectxp);
}
/** @} */

View File

@ -895,7 +895,7 @@ static inline void sbSleepMicroseconds(time_usecs_t usecs) {
*/
static inline void sbSetAlarm(sysinterval_t interval, bool reload) {
__syscall2r(237, (uint32_t)interval, (uint32_t)reload);
__syscall2r(125, (uint32_t)interval, (uint32_t)reload);
}
/**
@ -905,7 +905,7 @@ static inline void sbSetAlarm(sysinterval_t interval, bool reload) {
*/
static inline void sbResetAlarm(void) {
__syscall0(238);
__syscall0(126);
}
/**
@ -915,7 +915,7 @@ static inline void sbResetAlarm(void) {
*/
static inline void __sb_vrq_wait(void) {
__syscall0(239);
__syscall0(127);
}
/**