@@ -3744,4 +3744,80 @@ TEST(APIntTest, TryExt) {
37443744 ASSERT_EQ (42 , APInt (128 , -1 ).trySExtValue ().value_or (42 ));
37453745}
37463746
3747+ TEST (APIntTest, Fshl) {
3748+ EXPECT_EQ (
3749+ APIntOps::fshl (APInt (8 , 0 ), APInt (8 , 255 ), APInt (8 , 8 )).getZExtValue (),
3750+ 0 );
3751+ EXPECT_EQ (
3752+ APIntOps::fshl (APInt (8 , 255 ), APInt (8 , 0 ), APInt (8 , 8 )).getZExtValue (),
3753+ 255 );
3754+ EXPECT_EQ (
3755+ APIntOps::fshl (APInt (8 , 255 ), APInt (8 , 0 ), APInt (8 , 15 )).getZExtValue (),
3756+ 128 );
3757+ EXPECT_EQ (
3758+ APIntOps::fshl (APInt (8 , 15 ), APInt (8 , 15 ), APInt (8 , 11 )).getZExtValue (),
3759+ 120 );
3760+ EXPECT_EQ (
3761+ APIntOps::fshl (APInt (8 , 2 ), APInt (8 , 1 ), APInt (8 , 3 )).getZExtValue (), 16 );
3762+ EXPECT_EQ (
3763+ APIntOps::fshl (APInt (8 , 2 ), APInt (8 , 1 ), APInt (8 , 1 )).getZExtValue (),
3764+ APIntOps::fshl (APInt (8 , 2 ), APInt (8 , 1 ), APInt (8 , 9 )).getZExtValue ());
3765+ EXPECT_EQ (
3766+ APIntOps::fshl (APInt (8 , 2 ), APInt (8 , 1 ), APInt (8 , 7 )).getZExtValue (),
3767+ APIntOps::fshl (APInt (8 , 2 ), APInt (8 , 1 ), APInt (8 , 15 )).getZExtValue ());
3768+ EXPECT_EQ (APIntOps::fshl (APInt (32 , 0 , /* isSigned*/ true ),
3769+ APInt (32 , 2147483647 , /* isSigned*/ true ),
3770+ APInt (32 , 32 , /* isSigned*/ true ))
3771+ .getSExtValue (),
3772+ 0 );
3773+ EXPECT_EQ (APIntOps::fshl (APInt (64 , 1 , /* isSigned*/ true ),
3774+ APInt (64 , 2 , /* isSigned*/ true ),
3775+ APInt (64 , 3 , /* isSigned*/ true ))
3776+ .getSExtValue (),
3777+ 8 );
3778+ EXPECT_EQ (APIntOps::fshl (APInt (16 , -2 , /* isSigned*/ true ),
3779+ APInt (16 , -1 , /* isSigned*/ true ),
3780+ APInt (16 , 3 , /* isSigned*/ true ))
3781+ .getSExtValue (),
3782+ -9 );
3783+ }
3784+
3785+ TEST (APIntTest, Fshr) {
3786+ EXPECT_EQ (
3787+ APIntOps::fshr (APInt (8 , 0 ), APInt (8 , 255 ), APInt (8 , 8 )).getZExtValue (),
3788+ 255 );
3789+ EXPECT_EQ (
3790+ APIntOps::fshr (APInt (8 , 255 ), APInt (8 , 0 ), APInt (8 , 8 )).getZExtValue (),
3791+ 0 );
3792+ EXPECT_EQ (
3793+ APIntOps::fshr (APInt (8 , 255 ), APInt (8 , 0 ), APInt (8 , 15 )).getZExtValue (),
3794+ 254 );
3795+ EXPECT_EQ (
3796+ APIntOps::fshr (APInt (8 , 15 ), APInt (8 , 15 ), APInt (8 , 11 )).getZExtValue (),
3797+ 225 );
3798+ EXPECT_EQ (
3799+ APIntOps::fshr (APInt (8 , 1 ), APInt (8 , 2 ), APInt (8 , 3 )).getZExtValue (), 32 );
3800+ EXPECT_EQ (
3801+ APIntOps::fshr (APInt (8 , 1 ), APInt (8 , 2 ), APInt (8 , 1 )).getZExtValue (),
3802+ APIntOps::fshr (APInt (8 , 1 ), APInt (8 , 2 ), APInt (8 , 9 )).getZExtValue ());
3803+ EXPECT_EQ (
3804+ APIntOps::fshr (APInt (8 , 1 ), APInt (8 , 2 ), APInt (8 , 7 )).getZExtValue (),
3805+ APIntOps::fshr (APInt (8 , 1 ), APInt (8 , 2 ), APInt (8 , 15 )).getZExtValue ());
3806+ EXPECT_EQ (APIntOps::fshr (APInt (64 , 0 , /* isSigned*/ true ),
3807+ APInt (64 , 9223372036854775807 , /* isSigned*/ true ),
3808+ APInt (64 , 64 , /* isSigned*/ true ))
3809+ .getSExtValue (),
3810+ 9223372036854775807 );
3811+ EXPECT_EQ (APIntOps::fshr (APInt (64 , 1 , /* isSigned*/ true ),
3812+ APInt (64 , 2 , /* isSigned*/ true ),
3813+ APInt (64 , 3 , /* isSigned*/ true ))
3814+ .getSExtValue (),
3815+ 2305843009213693952 );
3816+ EXPECT_EQ (APIntOps::fshr (APInt (16 , -2 , /* isSigned*/ true ),
3817+ APInt (16 , -1 , /* isSigned*/ true ),
3818+ APInt (16 , 3 , /* isSigned*/ true ))
3819+ .getSExtValue (),
3820+ -8193 );
3821+ }
3822+
37473823} // end anonymous namespace
0 commit comments