mirror of
https://github.com/antonblanchard/microwatt.git
synced 2026-04-10 14:28:53 +00:00
Merge pull request #334 from antonblanchard/icbi-issue
Add a test for icbi and dcbz issues
This commit is contained in:
@@ -185,3 +185,75 @@ test_loadhitstore:
|
||||
or %r7,%r6,%r7
|
||||
subf %r3,%r0,%r7
|
||||
blr
|
||||
|
||||
/* Test for double execution of addi */
|
||||
.balign 64
|
||||
.global test_icbi
|
||||
test_icbi:
|
||||
1: li %r3,0
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
icbi 0,%r0
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
addi %r3,%r3,1
|
||||
blr
|
||||
|
||||
.global test_dcbz_near_store
|
||||
test_dcbz_near_store:
|
||||
li %r0,-1
|
||||
addi %r10,%r1,-64
|
||||
# cacheline align stack pointer
|
||||
srdi %r10,%r10,6
|
||||
sldi %r10,%r10,6
|
||||
|
||||
std %r0,0(%r10)
|
||||
std %r0,8(%r10)
|
||||
std %r0,16(%r10)
|
||||
std %r0,24(%r10)
|
||||
std %r0,32(%r10)
|
||||
std %r0,40(%r10)
|
||||
std %r0,48(%r10)
|
||||
std %r0,56(%r10)
|
||||
|
||||
li %r3,0xa5
|
||||
# Store to same cacheline as dcbz, although it doesn't seem
|
||||
# necessary to hit the issue.
|
||||
std %r3,0(%r10)
|
||||
dcbz 0,%r10
|
||||
|
||||
ld %r0,0(%r10)
|
||||
ld %r3,8(%r10)
|
||||
ld %r4,16(%r10)
|
||||
ld %r5,24(%r10)
|
||||
ld %r6,32(%r10)
|
||||
ld %r7,40(%r10)
|
||||
ld %r8,48(%r10)
|
||||
ld %r9,56(%r10)
|
||||
|
||||
or %r3,%r3,%r0
|
||||
or %r3,%r3,%r4
|
||||
or %r3,%r3,%r5
|
||||
or %r3,%r3,%r6
|
||||
or %r3,%r3,%r7
|
||||
or %r3,%r3,%r8
|
||||
or %r3,%r3,%r9
|
||||
|
||||
blr
|
||||
|
||||
@@ -16,6 +16,8 @@ extern long test_mfpvr(void);
|
||||
extern long test_mtpvr(void);
|
||||
extern long test_bdnzl(void);
|
||||
extern long test_loadhitstore(void);
|
||||
extern long test_icbi(void);
|
||||
extern long test_dcbz_near_store(void);
|
||||
|
||||
// i < 100
|
||||
void print_test_number(int i)
|
||||
@@ -74,5 +76,19 @@ int main(void)
|
||||
} else
|
||||
puts(PASS);
|
||||
|
||||
print_test_number(7);
|
||||
if (test_icbi() != 1) {
|
||||
fail = 1;
|
||||
puts(FAIL);
|
||||
} else
|
||||
puts(PASS);
|
||||
|
||||
print_test_number(8);
|
||||
if (test_dcbz_near_store() != 0) {
|
||||
fail = 1;
|
||||
puts(FAIL);
|
||||
} else
|
||||
puts(PASS);
|
||||
|
||||
return fail;
|
||||
}
|
||||
|
||||
Binary file not shown.
@@ -4,3 +4,5 @@ Test 03:PASS
|
||||
Test 04:PASS
|
||||
Test 05:PASS
|
||||
Test 06:PASS
|
||||
Test 07:PASS
|
||||
Test 08:PASS
|
||||
|
||||
Reference in New Issue
Block a user