Re: VAX: Another small GAS bug?

Jan-Benedict Glaw <[email protected]>
Newsgroups gmane.os.netbsd.ports.vax
Message-ID <[email protected]>
On Sun, 2024-04-07 12:09:17 +0100, Maciej W. Rozycki <[email protected]> wrote:
> On Sun, 7 Apr 2024, Kalvis Duckmanton wrote:
> 
> > >    Unfortunately, I guess I'll only have time for this in a month or
> > > the like, maybe you, or Kalvin, or Anders, or Martin, or Maciej, or
> > > Mouse, or ... may want to have a look?  Esp, since it happened in a
> > > regular CI build, but I was unable (in a few-minutes attempt) to
> > > reproduce it. :-/  I'd like to make sure there isn't much more hidden
> > > behind this issue.
> > 
> > So I had a look today.  I don't believe GAS is at fault; it has assembled an
> > F-floating zero (so 32 bits wide) ... into the lower part of a buffer big
> > enough to hold a quadword (64 bits) or a D-floating value (again 64 bits). 
> > The other 32 bits in that buffer, which are mantissa bits in the D-floating
> > type, are not initialised.  As rin points out, VAX looks only at the sign and
> > exponent fields to determine whether a value is a zero.
> 
>  I can't say offhand what the VAX assembly language semantics is here, but 
> I find the use of uninitialised data for an instruction operand clearly a 
> bug in GAS (and then a rather nasty one).

https://sourceware.org/bugzilla/show_bug.cgi?id=31617

Shouldn't be too hard to check immediates at least to match the
expected size.

>  I think the tool is supposed to either reject an immediate F-floating 
> operand given to an instruction that operates on D-floating data or make 
> an arithmetic conversion of the operand to correctly represent it in the 
> D-floating format.  Likewise for other data format mismatches.

ACK.

>  What actually to do I'd expect to see in the VAX assembly language 
> reference specification.  If not fixed right away, this needs to be filed 
> as a bug upstream, so that we don't forget about it.

=== VAX MACRO and Instruction Set Reference Manual =========================
=== AA–PS6GD–TE ============================================================
2.3 Operand Field:
Operands for a macro must meet the requirements specified in the macro
definition. See the description of the .MACRO directive in Chapter 6.

----------------------------------------------------------------------------

3.2.2 Floating-Point Numbers:
A floating-point number can be used in the .F_FLOATING
(.FLOAT),.D_FLOATING (.DOUBLE), .G_FLOATING, and .H_FLOATING
directives (described in Chapter 6) or as an operand in a
floating-point instruction. A floating-point number cannot be used in
an expression or with a unary or binary operator except the unary
plus, unary minus, and unary floating-point operator, ^F (F_FLOATING).
Section 3.6 and Section 3.7 describe unary and binary operators.

A floating-point number can be specified with or without an exponent.

*Formats*
Floating-point number without exponent:
	snn
	snn.nn
	snn.

Floating-point number with exponent:
	snnEsnn
	snn.nnEsnn
	snn.Esnn

  *s* An optional sign.
  *nn*	A string of decimal digits in the range of 0 to 9.

The decimal point can appear anywhere to the right of the first digit.
Note that a floating-point number cannot start with a decimal point
because VAX MACRO will treat the number as a user-defined symbol (see
Section 3.3.2).

Floating-point numbers can be single-precision (32-bit),
double-precision (64-bit), or extended-precision (128-bit) quantities.
The degree of precision is 7 digits for single-precision numbers, 16
digits for double-precision numbers, and 33 digits for
extended-precision numbers.

The magnitude of a nonzero floating-point number cannot be smaller
than approximately 0.29E-38 or greater than approximately 1.7E38.

Single-precision floating-point numbers can be rounded (by default) or
truncated.  The .ENABLE and .DISABLE directives (described in Chapter
6) control whether single-precision floating-point numbers are rounded
or truncated.  Doubleprecision and extended-precision floating-point
numbers are always rounded.

Section 8.3.6, Section 8.3.7, Section 8.3.8, and Section 8.3.9
describe the internal format of floating-point numbers.
============================================================================

The format used by GAS is actually a GAS extension, cf.
gas/doc/c-vax.texi, which would benefit from some clarifications as
well.

MfG, JBG

--
signature.asc (application/pgp-signature, 195 B)
-----BEGIN PGP SIGNATURE-----

iF0EABECAB0WIQQlDTvPcScNjKREqWEdvV51g5nhuwUCZhMO7AAKCRAdvV51g5nh
u2YdAJ966CHaksdSoSvhaVE0feH9KNOHCgCcCGyczOLy+tRWPT2vOzDxQ7KzPoA=
=SJ+F
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.