You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Because this uses f1 for the first two operands, QEMU raises an exception at this point.
I don't have access to the synopsys architecture documents because they are behind a NDA wall, so I don't know what the semantics of the vector instructions actually is, so I can't tell whether there is a bug in QEMU, GCC or both.
The text was updated successfully, but these errors were encountered:
I don't have access to the synopsys architecture documents because they are behind a NDA wall, so I don't know what the semantics of the vector instructions actually is, so I can't tell whether there is a bug in QEMU, GCC or both.
Well, that's not entirely correct. Exactly for such cases (i.e. the community interest) we've got our PRM's (which stands for "Programmer's Reference Manual") available w/o signing NDAs etc, with a simple click-through form
Thanks! I must not have searched hard enough; I couldn't find the V3 versions, only V2.
QEMU seems to believe that vector instructions, like
vfsnmadds
, use an even and odd register pair. See the VEC_FLOAT4_SCALARD macro here:qemu/target/arc/semfunc-v3.c
Line 14214 in 76e0fa9
qemu/target/arc/semfunc-helper.c
Line 338 in 76e0fa9
QEMU generates an instruction error exception if an odd register is used for any of the first three operands in these instructions.
On the other hand, GCC has no restrictions on register selection for these same instructions:
https://github.com/foss-for-synopsys-dwc-arc-processors/gcc/blob/2a410ccc3a2c44eea48e7b378c025e790a90672c/gcc/config/arc64/arith.md#L2645
picolibc's
__rem_pio2f
function does two negation operations on sequential array elements here: https://github.com/picolibc/picolibc/blob/34618e00aebc727c63f3ba896f5be5c07b51e8e9/newlib/libm/math/sf_rem_pio2.c#L154 When built with-mfpu=fpud -O3
, this generates the following assembly:Because this uses
f1
for the first two operands, QEMU raises an exception at this point.I don't have access to the synopsys architecture documents because they are behind a NDA wall, so I don't know what the semantics of the vector instructions actually is, so I can't tell whether there is a bug in QEMU, GCC or both.
The text was updated successfully, but these errors were encountered: