# 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