#endif
/* Multi-core: get current core ID */
-#define xPortGetCoreID() __extension__({int id; asm volatile("rsr.prid %0; extui %0,%0,13,1":"=r"(id)); id;})
+inline uint32_t xPortGetCoreID() {
+ int id;
+ asm volatile(
+ "rsr.prid %0\n"
+ " extui %0,%0,13,1"
+ :"=r"(id));
+ return id;
+}
#ifdef __cplusplus
}
#define portCLEAR_INTERRUPT_MASK_FROM_ISR(state) portEXIT_CRITICAL_NESTED(state)
+/*
+ * Wrapper for the Xtensa compare-and-set instruction. This subroutine will atomically compare
+ * *mux to compare, and if it's the same, will set *mux to set. It will return the old value
+ * of *addr in *set.
+ *
+ * Warning: From the ISA docs: in some (unspecified) cases, the s32c1i instruction may return the
+ * *bitwise inverse* of the old mem if the mem wasn't written. This doesn't seem to happen on the
+ * ESP32, though. (Would show up directly if it did because the magic wouldn't match.)
+ */
+inline void uxPortCompareSet(volatile uint32_t *addr, uint32_t compare, uint32_t *set) {
+ __asm__ __volatile__(
+ "WSR %2,SCOMPARE1 \n"
+ "ISYNC \n"
+ "S32C1I %0, %1, 0 \n"
+ :"=r"(*set)
+ :"r"(addr), "r"(compare), "0"(*set)
+ );
+}
+
+
/*-----------------------------------------------------------*/
/* Architecture specifics. */
configASSERT(port_interruptNesting[xPortGetCoreID()]==0)
}
-
-/*
- * Wrapper for the Xtensa compare-and-set instruction. This subroutine will atomically compare
- * *mux to compare, and if it's the same, will set *mux to set. It will return the old value
- * of *addr.
- *
- * Warning: From the ISA docs: in some (unspecified) cases, the s32c1i instruction may return the
- * *bitwise inverse* of the old mem if the mem wasn't written. This doesn't seem to happen on the
- * ESP32, though. (Would show up directly if it did because the magic wouldn't match.)
- */
-#define uxPortCompareSet(mux, compare, set) \
- __asm__ __volatile__( \
- "WSR %2,SCOMPARE1 \n" \
- "ISYNC \n" \
- "S32C1I %0, %1, 0 \n" \
- :"=r"(*set) \
- :"r"(mux), "r"(compare), "0"(*set) \
- ); \
-
/*
* For kernel use: Initialize a per-CPU mux. Mux will be initialized unlocked.
*/