diff options
author | Nelson Chu <nelson.chu@sifive.com> | 2020-04-21 14:42:20 +0800 |
---|---|---|
committer | Nelson Chu <nelson.chu@sifive.com> | 2021-07-22 17:24:52 +0800 |
commit | 5e1f22d21a9b0d7e23e2e5aef5d418f10c39941b (patch) | |
tree | 4dbd7bc2e6cf0c76120a9d46e405b976f7ac9d0d | |
parent | 9706e698b79ac00bcc9bb93f3347b768a3817dc2 (diff) | |
download | fsf-binutils-gdb-5e1f22d21a9b0d7e23e2e5aef5d418f10c39941b.zip fsf-binutils-gdb-5e1f22d21a9b0d7e23e2e5aef5d418f10c39941b.tar.gz fsf-binutils-gdb-5e1f22d21a9b0d7e23e2e5aef5d418f10c39941b.tar.bz2 |
RISC-V/zfh: Support .float16 directive for assembler.
This probably need to be sent to mainline rather than here.
gas/
* config/tc-riscv.c (FLT_CHARS): Added h and H.
(riscv_pseudo_table): Added .float16.
* read.c (hex_float): Handle case 'h' and 'H'.
* testsuite/gas/riscv/extended/extended.exp: Updated.
* testsuite/gas/riscv/extended/float16.d: New testcase.
* testsuite/gas/riscv/extended/float16.s: Likewise.
-rw-r--r-- | gas/config/tc-riscv.c | 3 | ||||
-rw-r--r-- | gas/read.c | 5 | ||||
-rw-r--r-- | gas/testsuite/gas/riscv/extended/extended.exp | 1 | ||||
-rw-r--r-- | gas/testsuite/gas/riscv/extended/float16.d | 10 | ||||
-rw-r--r-- | gas/testsuite/gas/riscv/extended/float16.s | 21 |
5 files changed, 39 insertions, 1 deletions
diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c index 2ec97b8..1661397 100644 --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -597,7 +597,7 @@ const char EXP_CHARS[] = "eE"; /* Chars that mean this number is a floating point constant. As in 0f12.456 or 0d1.2345e12. */ -const char FLT_CHARS[] = "rRsSfFdDxXpP"; +const char FLT_CHARS[] = "rRsSfFdDxXpPhH"; /* Indicate we are already assemble any instructions or not. */ static bool start_assemble = false; @@ -4571,6 +4571,7 @@ static const pseudo_typeS riscv_pseudo_table[] = {"sleb128", s_riscv_leb128, 1}, {"insn", s_riscv_insn, 0}, {"attribute", s_riscv_attribute, 0}, + {"float16", float_cons, 'h'}, { NULL, NULL, 0 }, }; @@ -4824,6 +4824,11 @@ hex_float (int float_type, char *bytes) switch (float_type) { + case 'h': + case 'H': + length = 2; + break; + case 'f': case 'F': case 's': diff --git a/gas/testsuite/gas/riscv/extended/extended.exp b/gas/testsuite/gas/riscv/extended/extended.exp index 3ad8833..2b36cc5 100644 --- a/gas/testsuite/gas/riscv/extended/extended.exp +++ b/gas/testsuite/gas/riscv/extended/extended.exp @@ -32,6 +32,7 @@ if [istarget riscv*-*-*] { run_dump_tests "vector-insns-fail-permutation" run_dump_tests "vector-insns-fail-zvamo" run_dump_tests "fp-zfh-insns" + run_dump_tests "float16" run_dump_tests "extended-csr" } diff --git a/gas/testsuite/gas/riscv/extended/float16.d b/gas/testsuite/gas/riscv/extended/float16.d new file mode 100644 index 0000000..e75971d --- /dev/null +++ b/gas/testsuite/gas/riscv/extended/float16.d @@ -0,0 +1,10 @@ +# source: float16.s +# objdump: -sj .data +# as: + +.*:[ ]+file format .* + +Contents of section \.data: + 0000 004adf2f 191cff7b 0100ff03 0004003c.* + 0010 013cff7f 007c00fc 00000080 00bce7bb.* + 0020 fffb0042 004a3e60 007e017e.* diff --git a/gas/testsuite/gas/riscv/extended/float16.s b/gas/testsuite/gas/riscv/extended/float16.s new file mode 100644 index 0000000..709ea0a --- /dev/null +++ b/gas/testsuite/gas/riscv/extended/float16.s @@ -0,0 +1,21 @@ +.data + .float16 12.0 + .float16 0.123 + .float16 0.004 + .float16 65504 + .float16 5.9605e-8 + .float16 6.0976e-5 + .float16 6.1035e-5 + .float16 1 + .float16 1.001 + .float16 NaN + .float16 +Inf + .float16 -Inf + .float16 +0 + .float16 -0 + .float16 -1 + .float16 -0.98765 + .float16 -65504 + .float16 3.0, 12.0, 543.123 + .float16 0h:7e00 # qNaNh + .float16 0h:7e01 # sNaNh |