[PATCH] RISC-V: Add .bfloat16 directive
Kito Cheng
kito.cheng@sifive.com
Mon Jan 20 10:50:09 GMT 2025
Oh yeah, seems the same, I don't mind which version landed, I am just
trying to upstream those patches in downstream :)
On Mon, Jan 20, 2025 at 6:29 PM Nelson Chu <nelson@rivosinc.com> wrote:
>
> This seems same as, https://inbox.sourceware.org/binutils/7fbfd7ca7fdc34afc0111af0f7beb7c69839fc04.1691021079.git.research_trasio@irq.a4lg.com/T/#u
>
> Nelson
>
> On Mon, Jan 20, 2025 at 5:31 PM Kito Cheng <kito.cheng@sifive.com> wrote:
>>
>> RISC-V already support bfloat16 instruciton like Zfbfmin, Zvfbfmin and
>> Zvfbfwma, so I think it's reasonable to add .bfloat16 directive to
>> support bfloat16 data type.
>>
>> And the code logic mostly support by common code already.
>> ---
>> gas/config/tc-riscv.c | 3 ++-
>> gas/doc/c-riscv.texi | 10 ++++++++++
>> gas/testsuite/gas/riscv/bfloat16.d | 10 ++++++++++
>> gas/testsuite/gas/riscv/bfloat16.s | 21 +++++++++++++++++++++
>> 4 files changed, 43 insertions(+), 1 deletion(-)
>> create mode 100644 gas/testsuite/gas/riscv/bfloat16.d
>> create mode 100644 gas/testsuite/gas/riscv/bfloat16.s
>>
>> diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c
>> index 1a32f4ee57f..fd5f67fbf6b 100644
>> --- a/gas/config/tc-riscv.c
>> +++ b/gas/config/tc-riscv.c
>> @@ -473,7 +473,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[] = "rRsSfFdDxXpPhH";
>> +const char FLT_CHARS[] = "rRsSfFdDxXpPhHb";
>>
>> /* Indicate ELF attributes are explicitly set. */
>> static bool explicit_attr = false;
>> @@ -5890,6 +5890,7 @@ static const pseudo_typeS riscv_pseudo_table[] =
>> {"attribute", s_riscv_attribute, 0},
>> {"variant_cc", s_variant_cc, 0},
>> {"float16", float_cons, 'h'},
>> + {"bfloat16", float_cons, 'b'},
>>
>> { NULL, NULL, 0 },
>> };
>> diff --git a/gas/doc/c-riscv.texi b/gas/doc/c-riscv.texi
>> index d2e47455e7c..be3a09487f1 100644
>> --- a/gas/doc/c-riscv.texi
>> +++ b/gas/doc/c-riscv.texi
>> @@ -255,6 +255,16 @@ The @var{tag} is either an attribute number, or one of the following:
>> @code{Tag_RISCV_unaligned_access}, @code{Tag_RISCV_priv_spec},
>> @code{Tag_RISCV_priv_spec_minor}, @code{Tag_RISCV_priv_spec_revision}.
>>
>> +@cindex @code{.bfloat16} directive, RISC-V
>> +@item .bfloat16 @var{value}
>> +Floating point constructors for the bfloat16 type, example usage:
>> +
>> +@smallexample
>> + .bfloat16 12.0
>> + .bfloat16 NaN
>> + .bfloat16 0b:ffc1
>> +@end smallexample
>> +
>> @end table
>>
>> @node RISC-V-Modifiers
>> diff --git a/gas/testsuite/gas/riscv/bfloat16.d b/gas/testsuite/gas/riscv/bfloat16.d
>> new file mode 100644
>> index 00000000000..0210f52c970
>> --- /dev/null
>> +++ b/gas/testsuite/gas/riscv/bfloat16.d
>> @@ -0,0 +1,10 @@
>> +# source: bfloat16.s
>> +# objdump: -sj .data
>> +# as:
>> +
>> +.*:[ ]+file format .*
>> +
>> +Contents of section \.data:
>> + 0000 4041fc3d 0000f742 0080f7c2 ff7f807f.*
>> + 0010 80ff7f7f 7fff8000 80800100 01807f00.*
>> + 0020 7f80803f 80bf0040 00c0c1ff 81ff.*
>> diff --git a/gas/testsuite/gas/riscv/bfloat16.s b/gas/testsuite/gas/riscv/bfloat16.s
>> new file mode 100644
>> index 00000000000..7398fd83b45
>> --- /dev/null
>> +++ b/gas/testsuite/gas/riscv/bfloat16.s
>> @@ -0,0 +1,21 @@
>> + .data
>> + .bfloat16 12.0
>> + .bfloat16 0.123
>> + .bfloat16 +0.0
>> + .bfloat16 123.4
>> + .bfloat16 -0.0
>> + .bfloat16 -123.4
>> + .bfloat16 NaN
>> + .bfloat16 Inf
>> + .bfloat16 -Inf
>> + .bfloat16 3.390e+38
>> + .bfloat16 -3.390e+38
>> + .bfloat16 1.175e-38
>> + .bfloat16 -1.175e-38
>> + .bfloat16 9.194e-41
>> + .bfloat16 -9.194e-41
>> + .bfloat16 1.167e-38
>> + .bfloat16 -1.167e-38
>> + .bfloat16 1.0, -1, 2.0, -2
>> + .bfloat16 0b:ffc1 # qNaNh
>> + .bfloat16 0b:ff81 # sNaNh
>> --
>> 2.34.1
>>
More information about the Binutils
mailing list