У меня есть два макроса, один из которых написан на ассемблере, а другой на C. Второй макрос использует первый макрос. Однако я также хочу написать второй макрос на ассемблере с volatile, чтобы я мог контролировать его размещение в коде. И обратите внимание, что tid - это значение времени выполнения, а не константа, как n.
Какой хороший способ написать это на ассемблере? Также, возможно ли контролировать размещение кода на Си, как в ассемблере, с помощью volatile?
#define SAVE_SP(n) __asm__ __volatile__ ("movq %rsp, msp"#n";" \
"movq ts"#n", %rsp;" \
)
#define SAVE_STACK_POINTER( tid ) \
switch( tid ) \
{ \
case 0: \
SAVE_SP( 0 ); \
break; \
case 1: \
SAVE_SP( 1 ); \
break; \
case 2: \
SAVE_SP( 2 ); \
break; \
case 3: \
SAVE_SP( 3 ); \
break; \
}