@@ -3823,4 +3823,87 @@ TEST(APIntTest, Fshr) {
38233823 -8193 );
38243824}
38253825
3826+ TEST (APIntTest, clmul) {
3827+ EXPECT_EQ (APIntOps::clmul (APInt (4 , 1 ), APInt (4 , 2 )).getZExtValue (), 2U );
3828+ EXPECT_EQ (APIntOps::clmul (APInt (4 , 5 ), APInt (4 , 6 )).getZExtValue (), 14U );
3829+ EXPECT_EQ (APIntOps::clmul (APInt (4 , -4 , /* isSigned*/ true ),
3830+ APInt (4 , 2 , /* isSigned*/ false ))
3831+ .getSExtValue (),
3832+ -8 );
3833+ EXPECT_EQ (APIntOps::clmul (APInt (4 , -4 , /* isSigned*/ true ),
3834+ APInt (4 , -5 , /* isSigned*/ true ))
3835+ .getSExtValue (),
3836+ 4 );
3837+ EXPECT_EQ (APIntOps::clmul (APInt (8 , 0 ), APInt (8 , 255 )).getZExtValue (), 0U );
3838+ EXPECT_EQ (APIntOps::clmul (APInt (8 , 15 ), APInt (8 , 15 )).getZExtValue (), 85U );
3839+ EXPECT_EQ (APIntOps::clmul (APInt (8 , 1 ), APInt (8 , 2 )).getZExtValue (), 2U );
3840+ EXPECT_EQ (APIntOps::clmul (APInt (64 , 0 , /* isSigned*/ true ),
3841+ APInt (64 , 9223372036854775807 , /* isSigned*/ true ))
3842+ .getSExtValue (),
3843+ 0 );
3844+ EXPECT_EQ (APIntOps::clmul (APInt (64 , 1 , /* isSigned*/ true ),
3845+ APInt (64 , 2 , /* isSigned*/ true ))
3846+ .getSExtValue (),
3847+ 2 );
3848+ EXPECT_EQ (APIntOps::clmul (APInt (16 , -2 , /* isSigned*/ true ),
3849+ APInt (16 , -1 , /* isSigned*/ true ))
3850+ .getSExtValue (),
3851+ -21846 );
3852+ }
3853+
3854+ TEST (APIntTest, clmulr) {
3855+ EXPECT_EQ (APIntOps::clmulr (APInt (4 , 1 ), APInt (4 , 2 )).getZExtValue (), 0U );
3856+ EXPECT_EQ (APIntOps::clmulr (APInt (4 , 5 ), APInt (4 , 6 )).getZExtValue (), 3U );
3857+ EXPECT_EQ (APIntOps::clmulr (APInt (4 , -4 , /* isSigned*/ true ),
3858+ APInt (4 , 2 , /* isSigned*/ false ))
3859+ .getSExtValue (),
3860+ 3 );
3861+ EXPECT_EQ (APIntOps::clmulr (APInt (4 , -4 , /* isSigned*/ true ),
3862+ APInt (4 , -5 , /* isSigned*/ true ))
3863+ .getSExtValue (),
3864+ -2 );
3865+ EXPECT_EQ (APIntOps::clmulr (APInt (8 , 0 ), APInt (8 , 255 )).getZExtValue (), 0U );
3866+ EXPECT_EQ (APIntOps::clmulr (APInt (8 , 15 ), APInt (8 , 15 )).getZExtValue (), 0U );
3867+ EXPECT_EQ (APIntOps::clmulr (APInt (8 , 1 ), APInt (8 , 2 )).getZExtValue (), 0U );
3868+ EXPECT_EQ (APIntOps::clmulr (APInt (64 , 0 , /* isSigned*/ true ),
3869+ APInt (64 , 9223372036854775807 , /* isSigned*/ true ))
3870+ .getSExtValue (),
3871+ 0 );
3872+ EXPECT_EQ (APIntOps::clmulr (APInt (64 , 1 , /* isSigned*/ true ),
3873+ APInt (64 , 2 , /* isSigned*/ true ))
3874+ .getSExtValue (),
3875+ 0 );
3876+ EXPECT_EQ (APIntOps::clmulr (APInt (16 , -2 , /* isSigned*/ true ),
3877+ APInt (16 , -1 , /* isSigned*/ true ))
3878+ .getSExtValue (),
3879+ -21845 );
3880+ }
3881+
3882+ TEST (APIntTest, clmulh) {
3883+ EXPECT_EQ (APIntOps::clmulh (APInt (4 , 1 ), APInt (4 , 2 )).getZExtValue (), 0U );
3884+ EXPECT_EQ (APIntOps::clmulh (APInt (4 , 5 ), APInt (4 , 6 )).getZExtValue (), 1U );
3885+ EXPECT_EQ (APIntOps::clmulh (APInt (4 , -4 , /* isSigned*/ true ),
3886+ APInt (4 , 2 , /* isSigned*/ false ))
3887+ .getSExtValue (),
3888+ 1 );
3889+ EXPECT_EQ (APIntOps::clmulh (APInt (4 , -4 , /* isSigned*/ true ),
3890+ APInt (4 , -5 , /* isSigned*/ true ))
3891+ .getSExtValue (),
3892+ 7 );
3893+ EXPECT_EQ (APIntOps::clmulh (APInt (8 , 0 ), APInt (8 , 255 )).getZExtValue (), 0U );
3894+ EXPECT_EQ (APIntOps::clmulh (APInt (8 , 15 ), APInt (8 , 15 )).getZExtValue (), 0U );
3895+ EXPECT_EQ (APIntOps::clmulh (APInt (8 , 1 ), APInt (8 , 2 )).getZExtValue (), 0U );
3896+ EXPECT_EQ (APIntOps::clmulh (APInt (64 , 0 , /* isSigned*/ true ),
3897+ APInt (64 , 9223372036854775807 , /* isSigned*/ true ))
3898+ .getSExtValue (),
3899+ 0 );
3900+ EXPECT_EQ (APIntOps::clmulh (APInt (64 , 1 , /* isSigned*/ true ),
3901+ APInt (64 , 2 , /* isSigned*/ true ))
3902+ .getSExtValue (),
3903+ 0 );
3904+ EXPECT_EQ (APIntOps::clmulh (APInt (16 , -2 , /* isSigned*/ true ),
3905+ APInt (16 , -1 , /* isSigned*/ true ))
3906+ .getSExtValue (),
3907+ 21845 );
3908+ }
38263909} // end anonymous namespace
0 commit comments