#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
#define EXC_RETURN_TASK_NOFP EXC_RETURN_TASK_NOFP_NONSECURE
#endif
#else
#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
#define EXC_RETURN_TASK_NOFP_NEG (~EXC_RETURN_TASK_NOFP + 1)