| # Basic Tests for C extension. |
| # mach: riscv32 riscv64 |
| # sim(riscv32): --model RV32IC |
| # sim(riscv64): --model RV64IC |
| # ld(riscv32): -m elf32lriscv |
| # ld(riscv64): -m elf64lriscv |
| # as(riscv32): -march=rv32ic |
| # as(riscv64): -march=rv64ic |
| |
| .include "testutils.inc" |
| |
| .data |
| .align 4 |
| _data: |
| .word 1234 |
| .word 0 |
| |
| start |
| la a0, _data |
| |
| # Test load-store instructions. |
| c.lw a1,0(a0) |
| c.sw a1,4(a0) |
| c.lw a2,4(a0) |
| |
| li a5,1234 |
| bne a1,a5,test_fail |
| bne a2,a5,test_fail |
| |
| # Test basic arithmetic. |
| c.li a0,0 |
| c.li a1,1 |
| c.addi a0,1 |
| c.addi a0,-1 |
| c.add a0,a1 |
| c.sub a0,a1 |
| |
| li a5,1 |
| bne a0,x0,test_fail |
| bne a1,a5,test_fail |
| |
| # Test logical operations. |
| c.li a0,7 |
| c.li a1,7 |
| c.li a2,4 |
| c.li a3,3 |
| c.li a4,3 |
| c.andi a0,3 |
| c.and a1,a0 |
| c.or a2,a3 |
| c.xor a4,a4 |
| |
| li a5,3 |
| bne a0,a5,test_fail |
| bne a1,a5,test_fail |
| bne a4,x0,test_fail |
| li a5,7 |
| bne a2,a5,test_fail |
| |
| # Test shift operations. |
| c.li a0,4 |
| c.li a1,4 |
| c.slli a0,1 |
| c.srli a1,1 |
| |
| li a5,8 |
| bne a0,a5,test_fail |
| li a5,2 |
| bne a1,a5,test_fail |
| |
| # Test jump instruction. |
| c.j 1f |
| |
| j test_fail |
| 1: |
| la a0,2f |
| |
| # Test jump register instruction. |
| c.jr a0 |
| |
| j test_fail |
| |
| 2: |
| # Test branch instruction. |
| c.li a0,1 |
| c.beqz a0,test_fail |
| c.li a0,0 |
| c.bnez a0,test_fail |
| |
| test_pass: |
| pass |
| fail |
| |
| test_fail: |
| fail |