forked from mirror/qemu
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
2.8 KiB
ArmAsm
152 lines
2.8 KiB
ArmAsm
#include "macros.inc"
|
|
|
|
test_suite quo
|
|
|
|
#if XCHAL_HAVE_DIV32
|
|
|
|
test quou_pp
|
|
movi a2, 0x5a5a137f
|
|
mov a3, a2
|
|
movi a4, 0x137f5a5a
|
|
movi a6, 0x4
|
|
quou a5, a2, a4
|
|
assert eq, a5, a6
|
|
quou a2, a2, a4
|
|
assert eq, a2, a6
|
|
quou a4, a3, a4
|
|
assert eq, a4, a6
|
|
test_end
|
|
|
|
test quou_np
|
|
movi a2, 0xa5a5137f
|
|
mov a3, a2
|
|
movi a4, 0x137f5a5a
|
|
movi a6, 0x8
|
|
quou a5, a2, a4
|
|
assert eq, a5, a6
|
|
quou a2, a2, a4
|
|
assert eq, a2, a6
|
|
quou a4, a3, a4
|
|
assert eq, a4, a6
|
|
test_end
|
|
|
|
test quou_pn
|
|
movi a2, 0x5a5a137f
|
|
mov a3, a2
|
|
movi a4, 0xf7315a5a
|
|
movi a6, 0
|
|
quou a5, a2, a4
|
|
assert eq, a5, a6
|
|
quou a2, a2, a4
|
|
assert eq, a2, a6
|
|
quou a4, a3, a4
|
|
assert eq, a4, a6
|
|
test_end
|
|
|
|
test quou_nn
|
|
movi a2, 0xf7315a5a
|
|
mov a3, a2
|
|
movi a4, 0xa5a5137f
|
|
movi a6, 0x1
|
|
quou a5, a2, a4
|
|
assert eq, a5, a6
|
|
quou a2, a2, a4
|
|
assert eq, a2, a6
|
|
quou a4, a3, a4
|
|
assert eq, a4, a6
|
|
test_end
|
|
|
|
test quou_exc
|
|
set_vector kernel, 2f
|
|
movi a2, 0xf7315a5a
|
|
movi a4, 0x00000000
|
|
1:
|
|
quou a5, a2, a4
|
|
test_fail
|
|
2:
|
|
rsr a2, exccause
|
|
assert eqi, a2, 6 /* INTEGER_DIVIDE_BY_ZERO_CAUSE */
|
|
rsr a2, epc1
|
|
movi a3, 1b
|
|
assert eq, a2, a3
|
|
test_end
|
|
|
|
test quos_pp
|
|
movi a2, 0x5a5a137f
|
|
mov a3, a2
|
|
movi a4, 0x137f5a5a
|
|
movi a6, 0x4
|
|
quos a5, a2, a4
|
|
assert eq, a5, a6
|
|
quos a2, a2, a4
|
|
assert eq, a2, a6
|
|
quos a4, a3, a4
|
|
assert eq, a4, a6
|
|
test_end
|
|
|
|
test quos_np
|
|
movi a2, 0xa5a5137f
|
|
mov a3, a2
|
|
movi a4, 0x137f5a5a
|
|
movi a6, 0xfffffffc
|
|
quos a5, a2, a4
|
|
assert eq, a5, a6
|
|
quos a2, a2, a4
|
|
assert eq, a2, a6
|
|
quos a4, a3, a4
|
|
assert eq, a4, a6
|
|
test_end
|
|
|
|
test quos_pn
|
|
movi a2, 0x5a5a137f
|
|
mov a3, a2
|
|
movi a4, 0xf7315a5a
|
|
movi a6, 0xfffffff6
|
|
quos a5, a2, a4
|
|
assert eq, a5, a6
|
|
quos a2, a2, a4
|
|
assert eq, a2, a6
|
|
quos a4, a3, a4
|
|
assert eq, a4, a6
|
|
test_end
|
|
|
|
test quos_nn
|
|
movi a2, 0xf7315a5a
|
|
mov a3, a2
|
|
movi a4, 0xa5a5137f
|
|
movi a6, 0
|
|
quos a5, a2, a4
|
|
assert eq, a5, a6
|
|
quos a2, a2, a4
|
|
assert eq, a2, a6
|
|
quos a4, a3, a4
|
|
assert eq, a4, a6
|
|
test_end
|
|
|
|
test quos_over
|
|
movi a2, 0x80000000
|
|
movi a4, 0xffffffff
|
|
movi a6, 0x80000000
|
|
quos a5, a2, a4
|
|
assert eq, a5, a6
|
|
test_end
|
|
|
|
test quos_exc
|
|
set_vector kernel, 2f
|
|
movi a2, 0xf7315a5a
|
|
movi a4, 0x00000000
|
|
1:
|
|
quos a5, a2, a4
|
|
test_fail
|
|
2:
|
|
rsr a2, exccause
|
|
assert eqi, a2, 6 /* INTEGER_DIVIDE_BY_ZERO_CAUSE */
|
|
rsr a2, epc1
|
|
movi a3, 1b
|
|
assert eq, a2, a3
|
|
test_end
|
|
|
|
#endif
|
|
|
|
test_suite_end
|