Explorar o código

Optimize xPortGetCoreID to 2-instruction inline assembly.

Jeroen Domburg %!s(int64=9) %!d(string=hai) anos
pai
achega
0403d43b19

+ 1 - 2
components/freertos/include/freertos/portable.h

@@ -192,8 +192,7 @@ void vPortEndScheduler( void ) PRIVILEGED_FUNCTION;
 #endif
 
 /* Multi-core: get current core ID */
-int xPortGetCoreID( void );
-
+#define xPortGetCoreID() __extension__({int id; asm volatile("rsr.prid %0; extui %0,%0,13,1":"=r"(id)); id;})
 
 #ifdef __cplusplus
 }

+ 1 - 6
components/freertos/include/freertos/xtensa_context.h

@@ -322,12 +322,7 @@ STRUCT_END(XtSolFrame)
 #ifdef __ASSEMBLER__
 	.macro getcoreid reg
 	rsr.prid \reg
-	bbci \reg,1,1f
-	movi \reg,1
-	j 2f
-1:
-	movi \reg,0
-2:
+	extui \reg,\reg,13,1
 	.endm
 #endif
 

+ 0 - 1
components/freertos/panic.c

@@ -76,7 +76,6 @@ inline static void panicPutHex(int a) { }
 inline static void panicPutDec(int a) { }
 #endif
 
-int xPortGetCoreID();
 
 void  __attribute__((weak)) vApplicationStackOverflowHook( TaskHandle_t xTask, signed char *pcTaskName ) {
 	panicPutStr("***ERROR*** A stack overflow in task ");

+ 0 - 12
components/freertos/portasm.S

@@ -51,18 +51,6 @@ port_switch_flag:
 
     .text
 
-
-
-/* C function to get proc ID.*/
-	.global xPortGetCoreID
-	.type xPortGetCoreID,@function
-	.align 4
-xPortGetCoreID:
-	ENTRY(16)
-	getcoreid a2
-	RET(16)
-
-
 /*
 *******************************************************************************
 * _frxt_setup_switch