@@ -3103,6 +3103,53 @@ TEST(APIntOpsTest, Mulh) {
3103
3103
EXPECT_EQ (APInt (128 , " FFEB498812C66C68D4552DB89B8EBF8F" , 16 ), i128Res);
3104
3104
}
3105
3105
3106
+ TEST (APIntOpsTest, muli) {
3107
+ APInt u32a (32 , 0x0001'E235 );
3108
+ APInt u32b (32 , 0xF623'55AD );
3109
+ EXPECT_EQ (0x0001'CFA1'7CA0'76D1 , APIntOps::muluExtended (u32a, u32b));
3110
+
3111
+ APInt u64a (64 , 0x1234'5678'90AB'CDEF );
3112
+ APInt u64b (64 , 0xFEDC'BA09'8765'4321 );
3113
+ EXPECT_EQ (APInt (128 , " 121FA000A3723A57C24A442FE55618CF" , 16 ),
3114
+ APIntOps::muluExtended (u64a, u64b));
3115
+
3116
+ APInt u128a (128 , " 1234567890ABCDEF1234567890ABCDEF" , 16 );
3117
+ APInt u128b (128 , " FEDCBA0987654321FEDCBA0987654321" , 16 );
3118
+ EXPECT_EQ (
3119
+ APInt (256 ,
3120
+ " 121FA000A3723A57E68984312C3A8D7E96B428606E1E6BF5C24A442FE55618CF" ,
3121
+ 16 ),
3122
+ APIntOps::muluExtended (u128a, u128b));
3123
+
3124
+ APInt s32a (32 , 0x1234'5678 );
3125
+ APInt s32b (32 , 0x10AB'CDEF );
3126
+ APInt s32c (32 , 0xFEDC'BA09 );
3127
+ EXPECT_EQ (0x012F'7D02'2A42'D208 , APIntOps::mulsExtended (s32a, s32b));
3128
+ EXPECT_EQ (0xFFEB'4988'09CA'3A38 , APIntOps::mulsExtended (s32a, s32c));
3129
+
3130
+ APInt s64a (64 , 0x1234'5678'90AB'CDEF );
3131
+ APInt s64b (64 , 0x1234'5678'90FE'DCBA );
3132
+ APInt s64c (64 , 0xFEDC'BA09'8765'4321 );
3133
+ EXPECT_EQ (APInt (128 , " 014B66DC328E10C1FB99704184EF03A6" , 16 ),
3134
+ APIntOps::mulsExtended (s64a, s64b));
3135
+ EXPECT_EQ (APInt (128 , " FFEB498812C66C68C24A442FE55618CF" , 16 ),
3136
+ APIntOps::mulsExtended (s64a, s64c));
3137
+
3138
+ APInt s128a (128 , " 1234567890ABCDEF1234567890ABCDEF" , 16 );
3139
+ APInt s128b (128 , " 1234567890FEDCBA1234567890FEDCBA" , 16 );
3140
+ APInt s128c (128 , " FEDCBA0987654321FEDCBA0987654321" , 16 );
3141
+ EXPECT_EQ (
3142
+ APInt (256 ,
3143
+ " 014B66DC328E10C1FE303DF9EA0B2529F87E475F3C6C180DFB99704184EF03A6" ,
3144
+ 16 ),
3145
+ APIntOps::mulsExtended (s128a, s128b));
3146
+ EXPECT_EQ (
3147
+ APInt (256 ,
3148
+ " FFEB498812C66C68D4552DB89B8EBF8F96B428606E1E6BF5C24A442FE55618CF" ,
3149
+ 16 ),
3150
+ APIntOps::mulsExtended (s128a, s128c));
3151
+ }
3152
+
3106
3153
TEST (APIntTest, RoundingUDiv) {
3107
3154
for (uint64_t Ai = 1 ; Ai <= 255 ; Ai++) {
3108
3155
APInt A (8 , Ai);
0 commit comments