diff options
Diffstat (limited to 'tools/testing/selftests/rseq/param_test.c')
| -rw-r--r-- | tools/testing/selftests/rseq/param_test.c | 68 | 
1 files changed, 68 insertions, 0 deletions
| diff --git a/tools/testing/selftests/rseq/param_test.c b/tools/testing/selftests/rseq/param_test.c index 6a9f602a8718..642d4e12abea 100644 --- a/tools/testing/selftests/rseq/param_test.c +++ b/tools/testing/selftests/rseq/param_test.c @@ -90,6 +90,30 @@ unsigned int yield_mod_cnt, nr_abort;  #error "Unsupported architecture"  #endif +#elif defined(__s390__) + +#define RSEQ_INJECT_INPUT \ +	, [loop_cnt_1]"m"(loop_cnt[1]) \ +	, [loop_cnt_2]"m"(loop_cnt[2]) \ +	, [loop_cnt_3]"m"(loop_cnt[3]) \ +	, [loop_cnt_4]"m"(loop_cnt[4]) \ +	, [loop_cnt_5]"m"(loop_cnt[5]) \ +	, [loop_cnt_6]"m"(loop_cnt[6]) + +#define INJECT_ASM_REG	"r12" + +#define RSEQ_INJECT_CLOBBER \ +	, INJECT_ASM_REG + +#define RSEQ_INJECT_ASM(n) \ +	"l %%" INJECT_ASM_REG ", %[loop_cnt_" #n "]\n\t" \ +	"ltr %%" INJECT_ASM_REG ", %%" INJECT_ASM_REG "\n\t" \ +	"je 333f\n\t" \ +	"222:\n\t" \ +	"ahi %%" INJECT_ASM_REG ", -1\n\t" \ +	"jnz 222b\n\t" \ +	"333:\n\t" +  #elif defined(__ARMEL__)  #define RSEQ_INJECT_INPUT \ @@ -114,6 +138,26 @@ unsigned int yield_mod_cnt, nr_abort;  	"bne 222b\n\t" \  	"333:\n\t" +#elif defined(__AARCH64EL__) + +#define RSEQ_INJECT_INPUT \ +	, [loop_cnt_1] "Qo" (loop_cnt[1]) \ +	, [loop_cnt_2] "Qo" (loop_cnt[2]) \ +	, [loop_cnt_3] "Qo" (loop_cnt[3]) \ +	, [loop_cnt_4] "Qo" (loop_cnt[4]) \ +	, [loop_cnt_5] "Qo" (loop_cnt[5]) \ +	, [loop_cnt_6] "Qo" (loop_cnt[6]) + +#define INJECT_ASM_REG	RSEQ_ASM_TMP_REG32 + +#define RSEQ_INJECT_ASM(n) \ +	"	ldr	" INJECT_ASM_REG ", %[loop_cnt_" #n "]\n"	\ +	"	cbz	" INJECT_ASM_REG ", 333f\n"			\ +	"222:\n"							\ +	"	sub	" INJECT_ASM_REG ", " INJECT_ASM_REG ", #1\n"	\ +	"	cbnz	" INJECT_ASM_REG ", 222b\n"			\ +	"333:\n" +  #elif __PPC__  #define RSEQ_INJECT_INPUT \ @@ -137,6 +181,30 @@ unsigned int yield_mod_cnt, nr_abort;  	"subic. %%" INJECT_ASM_REG ", %%" INJECT_ASM_REG ", 1\n\t" \  	"bne 222b\n\t" \  	"333:\n\t" + +#elif defined(__mips__) + +#define RSEQ_INJECT_INPUT \ +	, [loop_cnt_1]"m"(loop_cnt[1]) \ +	, [loop_cnt_2]"m"(loop_cnt[2]) \ +	, [loop_cnt_3]"m"(loop_cnt[3]) \ +	, [loop_cnt_4]"m"(loop_cnt[4]) \ +	, [loop_cnt_5]"m"(loop_cnt[5]) \ +	, [loop_cnt_6]"m"(loop_cnt[6]) + +#define INJECT_ASM_REG	"$5" + +#define RSEQ_INJECT_CLOBBER \ +	, INJECT_ASM_REG + +#define RSEQ_INJECT_ASM(n) \ +	"lw " INJECT_ASM_REG ", %[loop_cnt_" #n "]\n\t" \ +	"beqz " INJECT_ASM_REG ", 333f\n\t" \ +	"222:\n\t" \ +	"addiu " INJECT_ASM_REG ", -1\n\t" \ +	"bnez " INJECT_ASM_REG ", 222b\n\t" \ +	"333:\n\t" +  #else  #error unsupported target  #endif |