Skip to content

Commit

Permalink
add tests for daifset
Browse files Browse the repository at this point in the history
  • Loading branch information
JeanPichon committed Jun 4, 2024
1 parent 95813f0 commit 823299c
Show file tree
Hide file tree
Showing 3 changed files with 210 additions and 0 deletions.
68 changes: 68 additions & 0 deletions litmus/litmus_tests/exc/MP+daifset+dmb.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@

#include "lib.h"

#define VARS x, y
#define REGS p1x0, p1x2

static void P0(litmus_test_run* data) {
asm volatile (
"mov x0, #1\n\t"
"str x0, [%[x]]\n\t"

"msr daifset, #5\n\t"

"mov x2, #1\n\t"
"str x2, [%[y]]\n\t"
:
: ASM_VARS(data, VARS),
ASM_REGS(data, REGS)
: "cc", "memory", "x0", "x2"
);
}

static void P1(litmus_test_run* data) {
asm volatile (
/* load variables into machine registers */
"mov x1, %[y]\n\t"
"mov x3, %[x]\n\t"

/* test */
"ldr x0, [x1]\n\t"

"dmb sy\n\t"

"ldr x2, [x3]\n\t"

/* extract values */
"str x0, [%[outp1r0]]\n\t"
"str x2, [%[outp1r2]]\n\t"
:
: ASM_VARS(data, VARS),
ASM_REGS(data, REGS)
: "cc", "memory", "x0", "x1", "x2", "x3", "x4", "x5", "x6",
"x7" /* dont touch parameter registers */
);
}



litmus_test_t MP_daifset_dmb = {
"MP+daifset+dmb",
MAKE_THREADS(2),
MAKE_VARS(VARS),
MAKE_REGS(REGS),
INIT_STATE(
2,
INIT_VAR(x, 0),
INIT_VAR(y, 0)
),
.thread_sync_handlers =
(u32**[]){
(u32*[]){NULL, NULL},
(u32*[]){NULL, NULL},
},
.interesting_result = (u64[]){
/* p1:x0 =*/1,
/* p1:x2 =*/0,
},
};
68 changes: 68 additions & 0 deletions litmus/litmus_tests/exc/MP+dmb+daifset.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@

#include "lib.h"

#define VARS x, y
#define REGS p1x0, p1x2

static void P0(litmus_test_run* data) {
asm volatile (
"mov x0, #1\n\t"
"str x0, [%[x]]\n\t"

"dmb sy\n\t"

"mov x2, #1\n\t"
"str x2, [%[y]]\n\t"
:
: ASM_VARS(data, VARS),
ASM_REGS(data, REGS)
: "cc", "memory", "x0", "x2"
);
}

static void P1(litmus_test_run* data) {
asm volatile (
/* load variables into machine registers */
"mov x1, %[y]\n\t"
"mov x3, %[x]\n\t"

/* test */
"ldr x0, [x1]\n\t"

"msr daifset, #5\n\t"

"ldr x2, [x3]\n\t"

/* extract values */
"str x0, [%[outp1r0]]\n\t"
"str x2, [%[outp1r2]]\n\t"
:
: ASM_VARS(data, VARS),
ASM_REGS(data, REGS)
: "cc", "memory", "x0", "x1", "x2", "x3", "x4", "x5", "x6",
"x7" /* dont touch parameter registers */
);
}



litmus_test_t MP_dmb_daifset = {
"MP+dmb+daifset",
MAKE_THREADS(2),
MAKE_VARS(VARS),
MAKE_REGS(REGS),
INIT_STATE(
2,
INIT_VAR(x, 0),
INIT_VAR(y, 0)
),
.thread_sync_handlers =
(u32**[]){
(u32*[]){NULL, NULL},
(u32*[]){NULL, NULL},
},
.interesting_result = (u64[]){
/* p1:x0 =*/1,
/* p1:x2 =*/0,
},
};
74 changes: 74 additions & 0 deletions litmus/litmus_tests/exc/SB+daifsets.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#include "lib.h"

#define VARS x, y
#define REGS p0x2, p1x2

static void P0(litmus_test_run* data) {
asm volatile (
/* initial registers */
"mov x0, #1\n\t"
"mov x1, %[x]\n\t"
"mov x3, %[y]\n\t"

/* test */
"str x0, [x1]\n\t"

"msr daifset, #5\n\t"

"ldr x2, [x3]\n\t"

/* extract values */
"str x2, [%[outp0r2]]\n\t"
:
: ASM_VARS(data, VARS),
ASM_REGS(data, REGS)
: "cc", "memory", "x0", "x1", "x2", "x3"
);
}

static void P1(litmus_test_run* data) {
asm volatile (
/* initial registers */
"mov x0, #1\n\t"
"mov x1, %[y]\n\t"
"mov x3, %[x]\n\t"

/* test */
"str x0, [x1]\n\t"

"msr daifset, #5\n\t"

"ldr x2, [x3]\n\t"

/* extract values */
"str x2, [%[outp1r2]]\n\t"
:
: ASM_VARS(data, VARS),
ASM_REGS(data, REGS)
: "cc", "memory", "x0", "x1", "x2", "x3"
);
}

litmus_test_t SB_daifsets = {
"SB+daifsets",
MAKE_THREADS(2),
MAKE_VARS(VARS),
MAKE_REGS(REGS),
INIT_STATE(
2,
INIT_VAR(x, 0),
INIT_VAR(y, 0)
),
.thread_sync_handlers = (u32**[]){
(u32*[]){NULL, NULL},
(u32*[]){NULL, NULL},
},
.interesting_result = (u64[]){
/* p0:x2 =*/0,
/* p1:x2 =*/0,
},
.no_sc_results=3,
.expected_allowed = (arch_allow_st[]) {
{"armv8", OUTCOME_UNKNOWN},
}
};

0 comments on commit 823299c

Please sign in to comment.