diff options
author | Alex Bradbury <asb@lowrisc.org> | 2017-12-13 11:37:19 +0000 |
---|---|---|
committer | Alex Bradbury <asb@lowrisc.org> | 2017-12-13 11:37:19 +0000 |
commit | d475c17e7b64ed461cf7e2bd097782a584f45288 (patch) | |
tree | 742f524bd835bf70be6be80e1678e9aaa2f131bf /test/MC | |
parent | fcf12e077b5376a700761fb8be219a1bd2af84ae (diff) |
[RISCV] Implement floating point assembler pseudo instructions
Adds the assembler aliases for the floating point instructions
which can be mapped to a single canonical instruction. The missing
pseudo instructions (flw, fld, fsw, fsd) are marked as TODO. Other
things, like for example PCREL_LO, have to be implemented first.
This patch builds upon D40902.
Differential Revision: https://reviews.llvm.org/D41071
Patch by Mario Werner.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320569 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/MC')
-rw-r--r-- | test/MC/RISCV/rvd-aliases-valid.s | 33 | ||||
-rw-r--r-- | test/MC/RISCV/rvf-aliases-valid.s | 77 |
2 files changed, 110 insertions, 0 deletions
diff --git a/test/MC/RISCV/rvd-aliases-valid.s b/test/MC/RISCV/rvd-aliases-valid.s new file mode 100644 index 00000000000..e0006d6c98c --- /dev/null +++ b/test/MC/RISCV/rvd-aliases-valid.s @@ -0,0 +1,33 @@ +# RUN: llvm-mc %s -triple=riscv32 -mattr=+d -riscv-no-aliases \ +# RUN: | FileCheck -check-prefix=CHECK-INST %s +# RUN: llvm-mc %s -triple=riscv32 -mattr=+d -riscv-no-aliases=false \ +# RUN: | FileCheck -check-prefix=CHECK-ALIAS %s +# RUN: llvm-mc %s -triple=riscv64 -mattr=+d -riscv-no-aliases \ +# RUN: | FileCheck -check-prefix=CHECK-INST %s +# RUN: llvm-mc %s -triple=riscv64 -mattr=+d -riscv-no-aliases=false \ +# RUN: | FileCheck -check-prefix=CHECK-ALIAS %s +# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+d < %s \ +# RUN: | llvm-objdump -d -mattr=+d -riscv-no-aliases - \ +# RUN: | FileCheck -check-prefix=CHECK-INST %s +# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+d < %s \ +# RUN: | llvm-objdump -d -mattr=+d -riscv-no-aliases=false - \ +# RUN: | FileCheck -check-prefix=CHECK-ALIAS %s +# RUN: llvm-mc -filetype=obj -triple riscv64 -mattr=+d < %s \ +# RUN: | llvm-objdump -d -mattr=+d -riscv-no-aliases - \ +# RUN: | FileCheck -check-prefix=CHECK-INST %s +# RUN: llvm-mc -filetype=obj -triple riscv64 -mattr=+d < %s \ +# RUN: | llvm-objdump -d -mattr=+d -riscv-no-aliases=false - \ +# RUN: | FileCheck -check-prefix=CHECK-ALIAS %s + +# TODO fld +# TODO fsd + +# CHECK-INST: fsgnj.d ft0, ft1, ft1 +# CHECK-ALIAS: fmv.d ft0, ft1 +fmv.d f0, f1 +# CHECK-INST: fsgnjx.d ft1, ft2, ft2 +# CHECK-ALIAS: fabs.d ft1, ft2 +fabs.d f1, f2 +# CHECK-INST: fsgnjn.d ft2, ft3, ft3 +# CHECK-ALIAS: fneg.d ft2, ft3 +fneg.d f2, f3 diff --git a/test/MC/RISCV/rvf-aliases-valid.s b/test/MC/RISCV/rvf-aliases-valid.s new file mode 100644 index 00000000000..2806bd75710 --- /dev/null +++ b/test/MC/RISCV/rvf-aliases-valid.s @@ -0,0 +1,77 @@ +# RUN: llvm-mc %s -triple=riscv32 -mattr=+f -riscv-no-aliases \ +# RUN: | FileCheck -check-prefix=CHECK-INST %s +# RUN: llvm-mc %s -triple=riscv32 -mattr=+f -riscv-no-aliases=false \ +# RUN: | FileCheck -check-prefix=CHECK-ALIAS %s +# RUN: llvm-mc %s -triple=riscv64 -mattr=+f -riscv-no-aliases \ +# RUN: | FileCheck -check-prefix=CHECK-INST %s +# RUN: llvm-mc %s -triple=riscv64 -mattr=+f -riscv-no-aliases=false \ +# RUN: | FileCheck -check-prefix=CHECK-ALIAS %s +# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+f < %s \ +# RUN: | llvm-objdump -d -mattr=+f -riscv-no-aliases - \ +# RUN: | FileCheck -check-prefix=CHECK-INST %s +# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+f < %s \ +# RUN: | llvm-objdump -d -mattr=+f -riscv-no-aliases=false - \ +# RUN: | FileCheck -check-prefix=CHECK-ALIAS %s +# RUN: llvm-mc -filetype=obj -triple riscv64 -mattr=+f < %s \ +# RUN: | llvm-objdump -d -mattr=+f -riscv-no-aliases - \ +# RUN: | FileCheck -check-prefix=CHECK-INST %s +# RUN: llvm-mc -filetype=obj -triple riscv64 -mattr=+f < %s \ +# RUN: | llvm-objdump -d -mattr=+f -riscv-no-aliases=false - \ +# RUN: | FileCheck -check-prefix=CHECK-ALIAS %s + +# TODO flw +# TODO fsw + +# CHECK-INST: fsgnj.s ft0, ft1, ft1 +# CHECK-ALIAS: fmv.s ft0, ft1 +fmv.s f0, f1 +# CHECK-INST: fsgnjx.s ft1, ft2, ft2 +# CHECK-ALIAS: fabs.s ft1, ft2 +fabs.s f1, f2 +# CHECK-INST: fsgnjn.s ft2, ft3, ft3 +# CHECK-ALIAS: fneg.s ft2, ft3 +fneg.s f2, f3 + +# The following instructions actually alias instructions from the base ISA. +# However, it only makes sense to support them when the F extension is enabled. +# CHECK-INST: csrrs t0, 3, zero +# CHECK-ALIAS: frcsr t0 +frcsr x5 +# CHECK-INST: csrrw t1, 3, t2 +# CHECK-ALIAS: fscsr t1, t2 +fscsr x6, x7 +# CHECK-INST: csrrw zero, 3, t3 +# CHECK-ALIAS: fscsr t3 +fscsr x28 + +# CHECK-INST: csrrs t4, 2, zero +# CHECK-ALIAS: frrm t4 +frrm x29 +# CHECK-INST: csrrw t5, 2, t4 +# CHECK-ALIAS: fsrm t5, t4 +fsrm x30, x29 +# CHECK-INST: csrrw zero, 2, t6 +# CHECK-ALIAS: fsrm t6 +fsrm x31 +# CHECK-INST: csrrwi a0, 2, 31 +# CHECK-ALIAS: fsrmi a0, 31 +fsrmi x10, 0x1f +# CHECK-INST: csrrwi zero, 2, 30 +# CHECK-ALIAS: fsrmi 30 +fsrmi 0x1e + +# CHECK-INST: csrrs a1, 1, zero +# CHECK-ALIAS: frflags a1 +frflags x11 +# CHECK-INST: csrrw a2, 1, a1 +# CHECK-ALIAS: fsflags a2, a1 +fsflags x12, x11 +# CHECK-INST: csrrw zero, 1, a3 +# CHECK-ALIAS: fsflags a3 +fsflags x13 +# CHECK-INST: csrrwi a4, 1, 29 +# CHECK-ALIAS: fsflagsi a4, 29 +fsflagsi x14, 0x1d +# CHECK-INST: csrrwi zero, 1, 28 +# CHECK-ALIAS: fsflagsi 28 +fsflagsi 0x1c |