qemu/tests/tcg/xtensa/test_flix.S
Max Filippov b9ec52188f target/xtensa: fix break_dependency for repeated resources
break_dependency incorrectly handles the case of dependency on an opcode
that references the same register multiple times. E.g. the following
instruction is translated incorrectly:

  { or a2, a3, a3 ; or a3, a2, a2 }

This happens because resource indices of both dependency graph nodes are
incremented, and a copy for the second instance of the same register in
the ending node is not done.
Only increment resource index of the ending node of the dependency.
Add test.

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
2019-03-21 21:47:50 -07:00

78 lines
989 B
ArmAsm

#include "macros.inc"
test_suite flix
#if XCHAL_HAVE_FLIX3
test misc
{
mov a3, a4
mov a2, a3
nop
}
{
nop
bne.w18 a2, a3, 1f
}
movi a2, 1f
{
mov a2, a3
mov a3, a2
nop
}
{
l32i a2, a3, 0
add a4, a4, a2
nop
}
{
mov a3, a4
jx a3
nop
}
1:
test_end
test sum
movi a2, 0
movi a3, 2f
movi a4, 0
movi a5, 4
loop a5, 1f
{
l32i a2, a3, 0
addi a3, a3, 4
add a4, a4, a2
}
1:
add a4, a4, a2
assert eqi, a4, 10
.data
2:
.word 1, 2, 3, 4
.previous
test_end
test rep_dependency
{
movi a2, 1
movi a3, 2
nop
}
{
or a2, a3, a3
or a3, a2, a2
nop
}
assert eqi, a2, 2
assert eqi, a3, 1
test_end
#endif
test_suite_end