mirror of
https://github.com/Noratrieb/rustv32i.git
synced 2026-01-14 13:25:01 +01:00
137 lines
2.9 KiB
ArmAsm
137 lines
2.9 KiB
ArmAsm
# Integer computational register-register instruction.
|
|
|
|
#include "../helper.S"
|
|
|
|
.macro CASER inst a b expected
|
|
li t0, \a
|
|
li t1, \b
|
|
\inst t2, t0, t1
|
|
ASSERT_EQ t2, \expected
|
|
.endm
|
|
|
|
.macro CASE_IMM inst a b expected
|
|
li t0, \a
|
|
\inst t2, t0, \b
|
|
ASSERT_EQ t2, \expected
|
|
.endm
|
|
|
|
.macro CASE_BOTH inst insti a b expected
|
|
CASER \inst, \a, \b, \expected
|
|
CASE_IMM \insti, \a, \b, \expected
|
|
.endm
|
|
|
|
|
|
.macro CASE inst a b expected
|
|
CASE_BOTH \inst, \inst\()i, \a, \b, \expected
|
|
.endm
|
|
|
|
START_TEST
|
|
# Base instructions
|
|
|
|
CASE add 10, 20, 30
|
|
CASE add 10, -2, 8
|
|
CASE add 10, 0, 10
|
|
CASE add 0, 0, 0
|
|
|
|
CASE slt 10 20 1
|
|
CASE slt 20 10 0
|
|
CASE slt, -1 0 1
|
|
CASE slt 0, -1 0
|
|
CASE slt, -1, -1, 0
|
|
CASE slt, -100, -1, 1
|
|
|
|
CASE_BOTH sltu sltiu 10 20 1
|
|
CASE_BOTH sltu sltiu 20 10 0
|
|
CASE_BOTH sltu sltiu, -1, 0, 0
|
|
CASE_BOTH sltu sltiu, -100, -1, 1
|
|
CASE_BOTH sltu sltiu, 100, -1, 1
|
|
|
|
CASE and 0b11, 0b11, 0b11
|
|
CASE and, -1, -1, -1
|
|
CASE and, -1, 0, 0
|
|
CASE and, -1, 40, 40
|
|
CASE and, 0b101, 0b100, 0b100
|
|
|
|
CASE or, -1, 0, -1
|
|
CASE or, -1, 40, -1
|
|
CASE or, 0, 0, 0
|
|
CASE or, 0b101, 0b110, 0b111
|
|
|
|
CASE xor, -1, 0, -1
|
|
CASE xor, -1, -1, 0
|
|
CASE xor 0b101, 0b100, 0b001
|
|
|
|
CASE sll, 2, 1, 4
|
|
CASE sll, 0, 10, 0
|
|
CASE sll, 10, 0, 10
|
|
CASE sll, -1, 31, -2147483648
|
|
CASER sll, -1, 32, -1 # error for immediate
|
|
|
|
CASE srl, 4, 1, 2
|
|
CASE srl, 0, 10, 0
|
|
CASE srl, 10, 0, 10
|
|
CASE srl, -1, 1, 2147483647
|
|
CASE srl, 0b111, 2, 0b001
|
|
CASER srl, -1, 32, -1 # error for immediate
|
|
|
|
CASER sub, 10, 5, 5
|
|
CASER sub, -1, 1, -2
|
|
CASER sub, 1, 2, -1
|
|
CASER sub, -1, -2, 1
|
|
CASER sub, 0, 4294967295, 1
|
|
|
|
CASE sra, 4, 1, 2
|
|
CASE sra, 0, 10, 0
|
|
CASE sra, 10, 0, 10
|
|
CASE sra, -1, 1, -1
|
|
CASE sra, -1, 31, -1
|
|
CASE sra, 0b111, 2, 0b001
|
|
CASER sra, 10, 32, 10 # error for immediate
|
|
|
|
# M extension
|
|
|
|
CASER mul, 4, 4, 16
|
|
CASER mul, 10, 0, 0
|
|
CASER mul, 10, 1, 10
|
|
CASER mul, -1, -1, 1
|
|
CASER mul, 25252566, 5225225, 353909638
|
|
|
|
CASER mulh 4, 4, 0
|
|
CASER mulh, -1, -1, 0
|
|
CASER mulh, 25252566, 5225225, 30722
|
|
|
|
CASER mulhu 4, 4, 0
|
|
CASER mulhu, -1, -1, 4294967294
|
|
CASER mulhu, 25252566, 5225225, 30722
|
|
|
|
# mulhsu hasn't been implemented yet.
|
|
|
|
CASER div, 4, 2, 2
|
|
CASER div, -1, 1, -1
|
|
CASER div, 1, 1, 1
|
|
CASER div, 1, 0, -1
|
|
CASER div, -10, 2, -5
|
|
CASER div, 5, 2, 2
|
|
CASER div, 5, -1, -5
|
|
CASER div, -2147483648, -1, -1
|
|
|
|
CASER divu, 4, 2, 2
|
|
CASER divu, -1, 1, -1
|
|
CASER divu, 1, 1, 1
|
|
CASER divu, 1, 0, -1
|
|
CASER divu, -10, 2, 2147483643
|
|
CASER divu, 5, 2, 2
|
|
|
|
CASER rem, 4, 2, 0
|
|
CASER rem, 5, 2, 1
|
|
CASER rem, 5, 0, 5
|
|
CASER rem, -10, 3, -1
|
|
CASER rem, 5, -1, 0
|
|
CASER rem, -2147483648, -1, 0
|
|
|
|
CASER remu, 4, 2, 0
|
|
CASER remu, 5, 2, 1
|
|
CASER remu, 5, 0, 5
|
|
CASER remu, -10, 3, 0
|
|
|
|
PASS
|