On Wed, Nov 5, 2025 at 3:26 PM Taylor Simpson <[email protected]> wrote:
> Signed-off-by: Taylor Simpson <[email protected]> > --- > Reviewed-by: Brian Cain <[email protected]> > tests/tcg/hexagon/usr.c | 54 +++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 54 insertions(+) > > diff --git a/tests/tcg/hexagon/usr.c b/tests/tcg/hexagon/usr.c > index f0b23d312b..ef1787c64c 100644 > --- a/tests/tcg/hexagon/usr.c > +++ b/tests/tcg/hexagon/usr.c > @@ -608,6 +608,58 @@ TEST_CMP_xx(uint32_t, uint32_t, FUNC, SRC1, SRC2, > RES, USR_RES) > #define TEST_CMP_PP(FUNC, SRC1, SRC2, RES, USR_RES) \ > TEST_CMP_xx(uint64_t, uint64_t, FUNC, SRC1, SRC2, RES, USR_RES) > > +static void test_usr_packets(void) > +{ > + uint32_t usr_out; > + /* Test setting USR bits inside and outside packets */ > + asm(CLEAR_USRBITS \ > + "r10 = satub(%[val_0xfff]) /* Set usr.OVF > */\n\t" > + "{\n\t" > + " r11 = convert_uw2sf(%[val_0x010020a5]) /* Set usr.FPINPF > */\n\t" > + " r10 = memw(%[err]) /* Force pkt commit > */\n\t" > + "}\n\t" > + "{\n\t" > + " r11 = sfadd(%[SF_one], %[SF_SNaN]) /* Set usr.FPINVF > */\n\t" > + " r10 = add(r10, #1) /* No pkt commit > */\n\t" > + "}\n\t" > + "%[usr_out] = usr\n\t" > + : [usr_out]"=r"(usr_out) > + : [val_0xfff]"r"(0xfff), > + [SF_one]"r"(SF_one), [SF_SNaN]"r"(SF_SNaN), > + [val_0x010020a5]"r"(0x010020a5), > + [err]"m"(err) > + : "r2", "r10", "r11", "usr"); > + check32(usr_out & 0x3f, USR_OVF | USR_FPINVF | USR_FPINPF); > + > + /* Test setting several USR bits in the same packet (no pkt commit) */ > + asm(CLEAR_USRBITS \ > + "{\n\t" > + " r10 = satub(%[val_0xfff]) /* Set usr.OVF > */\n\t" > + " r12 = sfadd(%[SF_one], %[SF_SNaN]) /* Set usr.FPINVF > */\n\t" > + "}\n\t" > + "%[usr_out] = usr\n\t" > + : [usr_out]"=r"(usr_out) > + : [val_0xfff]"r"(0xfff), > + [SF_one]"r"(SF_one), [SF_SNaN]"r"(SF_SNaN) > + : "r2", "r10", "r11", "r12", "usr"); > + check32(usr_out & 0x3f, USR_OVF | USR_FPINVF); > + > + /* Test setting several USR bits in the same packet (with pkt commit) > */ > + asm(CLEAR_USRBITS \ > + "{\n\t" > + " r10 = satub(%[val_0xfff]) /* Set usr.OVF > */\n\t" > + " r11 = convert_uw2sf(%[val_0x010020a5]) /* Set usr.FPINPF > */\n\t" > + " r12 = memw(%[err]) /* Force pkt commit > */\n\t" > + "}\n\t" > + "%[usr_out] = usr\n\t" > + : [usr_out]"=r"(usr_out) > + : [val_0xfff]"r"(0xfff), > + [val_0x010020a5]"r"(0x010020a5), > + [err]"m"(err) > + : "r2", "r10", "r11", "r12", "usr"); > + check32(usr_out & 0x3f, USR_OVF | USR_FPINPF); > +} > + > int main() > { > TEST_R_OP_R(satub, 0, 0, USR_CLEAR); > @@ -1097,6 +1149,8 @@ int main() > TEST_Rp_OP_R(sfinvsqrta, SF_small_neg, SF_HEX_NaN, 0x00, > USR_FPINVF); > TEST_Rp_OP_R(sfinvsqrta, SF_SNaN, SF_HEX_NaN, 0x00, > USR_FPINVF); > > + test_usr_packets(); > + > puts(err ? "FAIL" : "PASS"); > return err; > } > -- > 2.43.0 > >
