x86: introduce .hfloat directive
authorJan Beulich <jbeulich@suse.com>
Wed, 11 Aug 2021 06:32:54 +0000 (08:32 +0200)
committerJan Beulich <jbeulich@suse.com>
Wed, 11 Aug 2021 06:32:54 +0000 (08:32 +0200)
This is to be able to generate data passed to {,V}CVTPH2PS and acted
upon by AVX512-FP16 insns. To be able to also use the hex forms
supported for other floating point formats, a small addition to the
generic hex_float() is needed.

Extend existing x86 testcases.

gas/config/tc-i386.c
gas/doc/c-i386.texi
gas/read.c
gas/testsuite/gas/i386/fp-elf32.d
gas/testsuite/gas/i386/fp-elf64.d
gas/testsuite/gas/i386/fp.d
gas/testsuite/gas/i386/fp.s

index 0fa8b0d5a045bc64579de7362408d6bc70534d66..a9e36213390d990b44fa9a801bfcc83881d14739 100644 (file)
@@ -512,7 +512,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[] = "fFdDxX";
+const char FLT_CHARS[] = "fFdDxXhH";
 
 /* Tables for lexical analysis.  */
 static char mnemonic_chars[256];
@@ -1356,6 +1356,7 @@ const pseudo_typeS md_pseudo_table[] =
   {"ffloat", float_cons, 'f'},
   {"dfloat", float_cons, 'd'},
   {"tfloat", float_cons, 'x'},
+  {"hfloat", float_cons, 'h'},
   {"value", cons, 2},
   {"slong", signed_cons, 4},
   {"noopt", s_ignore, 0},
index 9058ad444b0ca99912fcbbf842cfda5a8bc34229..664237c75c9a18e514ca2927a7877b301ced8cad 100644 (file)
@@ -1313,18 +1313,21 @@ data type.  Constructors build these data types into memory.
 @cindex @code{single} directive, i386
 @cindex @code{double} directive, i386
 @cindex @code{tfloat} directive, i386
+@cindex @code{hfloat} directive, i386
 @cindex @code{float} directive, x86-64
 @cindex @code{single} directive, x86-64
 @cindex @code{double} directive, x86-64
 @cindex @code{tfloat} directive, x86-64
+@cindex @code{hfloat} directive, x86-64
 @itemize @bullet
 @item
 Floating point constructors are @samp{.float} or @samp{.single},
-@samp{.double}, and @samp{.tfloat} for 32-, 64-, and 80-bit formats.
-These correspond to instruction mnemonic suffixes @samp{s}, @samp{l},
-and @samp{t}. @samp{t} stands for 80-bit (ten byte) real.  The 80387
-only supports this format via the @samp{fldt} (load 80-bit real to stack
-top) and @samp{fstpt} (store 80-bit real and pop stack) instructions.
+@samp{.double}, @samp{.tfloat}, and @samp{.hfloat} for 32-, 64-, 80-, and
+16-bit formats respectively. The former three correspond to instruction
+mnemonic suffixes @samp{s}, @samp{l}, and @samp{t}. @samp{t} stands for
+80-bit (ten byte) real.  The 80387 only supports this format via the
+@samp{fldt} (load 80-bit real to stack top) and @samp{fstpt} (store 80-bit
+real and pop stack) instructions.
 
 @cindex @code{word} directive, i386
 @cindex @code{long} directive, i386
index b8e845dd569f64edc906419c5fc5c2f08a80ad85..4170a254030d76456609089499ec65d7f5161a04 100644 (file)
@@ -4852,6 +4852,11 @@ hex_float (int float_type, char *bytes)
 
   switch (float_type)
     {
+    case 'h':
+    case 'H':
+      length = 2;
+      break;
+
     case 'f':
     case 'F':
     case 's':
index eefe84db310de6bb793236509aa31545500a916c..d25eed8b8efc3d05cee6d6b7380923629db4408c 100644 (file)
@@ -14,3 +14,4 @@ Contents of section .data:
  0060 00000000 00000080 fe3f0000 00000000  .*
  0070 00000080 fdbf0000 00000000 00000080  .*
  0080 ff030000 aaaaaaaa aaaaaaaa aaaaaaaa  .*
+ 0090 003c00c0 003c5555 55555555 55555555  .*
index 0756aa1e36a32811c191a4661a6b9e0a325ab1b0..bdc8f86662e08e98c167b3f4f7ca9471aca26d35 100644 (file)
@@ -14,3 +14,4 @@ Contents of section .data:
  0060 00000000 00000080 fe3f0000 00000000  .*
  0070 00000000 00000080 fdbf0000 00000000  .*
  0080 00000000 00000080 ff030000 00000000  .*
+ 0090 003c00c0 003c5555 55555555 55555555  .*
index b93595ac8c3e8b971a7e0a7a636e5601c5057783..65a5fccd6ee93a099b3f1e7a694a52dde21d8331 100644 (file)
@@ -12,3 +12,4 @@ Contents of section .data:
  0050 ffffffff ffffffff ffffcccc cccccccc  .*
  0060 00000000 00000080 fe3f0000 00000000  .*
  0070 0080fdbf 00000000 00000080 ff03aaaa  .*
+ 0080 003c00c0 003c5555 55555555 55555555  .*
index 7fe642e5180ddd8333487b0e2789e3ee8df29291..8976dd82f600855e9fe7ac19c9565d0b677ea16e 100644 (file)
@@ -29,3 +29,6 @@
        .dc.x 0x:bffd80
        .dcb.x 1, 0x:03ff80
        .p2align 4,0xaa
+
+       .hfloat 1, -2, 0x:3c00
+       .p2align 4,0x55