Skip to content

32-bit FMADD operands are mixed up (AARCH64) #8454

@dt-12345

Description

@dt-12345

Ra_FPR32 and Rn_FPR32 are flipped in AARCH64neon.sinc (they are correct in the 64-bit and 16-bit versions, however):

# C7.2.100 FMADD page C7-2246 line 131323 MATCH x1f000000/mask=xff208000
# CONSTRUCT x1f000000/mask=xffe08000 MATCHED 1 DOCUMENTED OPCODES
# SMACRO(pseudo) ARG1 ARG2 ARG3 ARG4 =NEON_fmadd/3
# AUNIT --inst x1f000000/mask=xffe08000 --rand sfp --status nopcodeop --comment "nofpround"

:fmadd Rd_FPR32, Rn_FPR32, Rm_FPR32, Ra_FPR32
is m=0 & b_3030=0 & s=0 & b_2428=0x1f & ftype=0 & b_21=0 & Rm_FPR32 & b_15=0 & Ra_FPR32 & Rn_FPR32 & Rd_FPR32 & Zd
{
-      Rd_FPR32 = Rn_FPR32 f+ (Rm_FPR32 f* Ra_FPR32); #NEON_fmadd(Rn_FPR32, Rm_FPR32, Ra_FPR32);
+      Rd_FPR32 = Ra_FPR32 f+ (Rm_FPR32 f* Rn_FPR32); #NEON_fmadd(Rn_FPR32, Rm_FPR32, Ra_FPR32);
}

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions