rt 0.19.1

A real-time operating system capable of full preemption
Documentation
#pragma once

#include <rt/arch/profile.h>

#define EXC_RETURN_PREFIX 0xFF000000

#define EXC_RETURN_PSP 0x4
#define EXC_RETURN_THREAD 0x8
#define EXC_RETURN_NOFP 0x10

#if RT_ARM_V8M

#define EXC_RETURN_RESONE 0x00FFFF80

#define EXC_RETURN_SECURE 0x1
#define EXC_RETURN_DCRS 0x20
#define EXC_RETURN_SSP 0x40

#ifndef RT_ARM_TRUSTZONE_ENABLE
#define RT_ARM_TRUSTZONE_ENABLE 0
#endif

#define EXC_RETURN_TASK_NOFP_NONSECURE                                         \
    (EXC_RETURN_PREFIX | EXC_RETURN_RESONE | EXC_RETURN_DCRS |                 \
     EXC_RETURN_NOFP | EXC_RETURN_THREAD | EXC_RETURN_PSP)

#define EXC_RETURN_TASK_NOFP_SECURE                                            \
    (EXC_RETURN_TASK_NOFP_NONSECURE | EXC_RETURN_SSP | EXC_RETURN_SECURE)

#if RT_ARM_TRUSTZONE_ENABLE
#define EXC_RETURN_TASK_NOFP EXC_RETURN_TASK_NOFP_SECURE
#else // !RT_ARM_TRUSTZONE_ENABLE
#define EXC_RETURN_TASK_NOFP EXC_RETURN_TASK_NOFP_NONSECURE
#endif // RT_ARM_TRUSTZONE_ENABLE

#else // !RT_ARM_V8M (v6m or v7m)

#define EXC_RETURN_RESONE 0x00FFFFE1

#define EXC_RETURN_TASK_NOFP                                                   \
    (EXC_RETURN_PREFIX | EXC_RETURN_RESONE | EXC_RETURN_NOFP |                 \
     EXC_RETURN_THREAD | EXC_RETURN_PSP)

#endif // RT_ARM_V8M

// Provide the negative value for v6m and v8m.base.
#define EXC_RETURN_TASK_NOFP_NEG (~EXC_RETURN_TASK_NOFP + 1)