@@ -261,6 +261,82 @@ TEST_P(MCPlusBuilderTester, testAccessedRegsMultipleDefs) {
261261                {AArch64::W5, AArch64::X5, AArch64::W5_HI});
262262}
263263
264+ TEST_P (MCPlusBuilderTester, AArch64_Psign_Pauth_variants) {
265+   if  (GetParam () != Triple::aarch64)
266+     GTEST_SKIP ();
267+ 
268+   MCInst Paciasp = MCInstBuilder (AArch64::PACIASP);
269+   MCInst Pacibsp = MCInstBuilder (AArch64::PACIBSP);
270+   ASSERT_TRUE (BC->MIB ->isPSignOnLR (Paciasp));
271+   ASSERT_TRUE (BC->MIB ->isPSignOnLR (Pacibsp));
272+ 
273+   MCInst PaciaSPLR =
274+       MCInstBuilder (AArch64::PACIA).addReg (AArch64::LR).addReg (AArch64::SP);
275+   MCInst PacibSPLR =
276+       MCInstBuilder (AArch64::PACIB).addReg (AArch64::LR).addReg (AArch64::SP);
277+   ASSERT_TRUE (BC->MIB ->isPSignOnLR (PaciaSPLR));
278+   ASSERT_TRUE (BC->MIB ->isPSignOnLR (PacibSPLR));
279+ 
280+   MCInst PacizaX5 = MCInstBuilder (AArch64::PACIZA).addReg (AArch64::X5);
281+   MCInst PacizbX5 = MCInstBuilder (AArch64::PACIZB).addReg (AArch64::X5);
282+   ASSERT_FALSE (BC->MIB ->isPSignOnLR (PacizaX5));
283+   ASSERT_FALSE (BC->MIB ->isPSignOnLR (PacizbX5));
284+ 
285+   MCInst Paciaz = MCInstBuilder (AArch64::PACIZA).addReg (AArch64::LR);
286+   MCInst Pacibz = MCInstBuilder (AArch64::PACIZB).addReg (AArch64::LR);
287+   ASSERT_TRUE (BC->MIB ->isPSignOnLR (Paciaz));
288+   ASSERT_TRUE (BC->MIB ->isPSignOnLR (Pacibz));
289+ 
290+   MCInst Pacia1716 = MCInstBuilder (AArch64::PACIA1716);
291+   MCInst Pacib1716 = MCInstBuilder (AArch64::PACIB1716);
292+   ASSERT_FALSE (BC->MIB ->isPSignOnLR (Pacia1716));
293+   ASSERT_FALSE (BC->MIB ->isPSignOnLR (Pacib1716));
294+ 
295+   MCInst Pacia171615 = MCInstBuilder (AArch64::PACIA171615);
296+   MCInst Pacib171615 = MCInstBuilder (AArch64::PACIB171615);
297+   ASSERT_FALSE (BC->MIB ->isPSignOnLR (Pacia171615));
298+   ASSERT_FALSE (BC->MIB ->isPSignOnLR (Pacib171615));
299+ 
300+   MCInst Autiasp = MCInstBuilder (AArch64::AUTIASP);
301+   MCInst Autibsp = MCInstBuilder (AArch64::AUTIBSP);
302+   ASSERT_TRUE (BC->MIB ->isPAuthOnLR (Autiasp));
303+   ASSERT_TRUE (BC->MIB ->isPAuthOnLR (Autibsp));
304+ 
305+   MCInst AutiaSPLR =
306+       MCInstBuilder (AArch64::AUTIA).addReg (AArch64::LR).addReg (AArch64::SP);
307+   MCInst AutibSPLR =
308+       MCInstBuilder (AArch64::AUTIB).addReg (AArch64::LR).addReg (AArch64::SP);
309+   ASSERT_TRUE (BC->MIB ->isPAuthOnLR (AutiaSPLR));
310+   ASSERT_TRUE (BC->MIB ->isPAuthOnLR (AutibSPLR));
311+ 
312+   MCInst AutizaX5 = MCInstBuilder (AArch64::AUTIZA).addReg (AArch64::X5);
313+   MCInst AutizbX5 = MCInstBuilder (AArch64::AUTIZB).addReg (AArch64::X5);
314+   ASSERT_FALSE (BC->MIB ->isPAuthOnLR (AutizaX5));
315+   ASSERT_FALSE (BC->MIB ->isPAuthOnLR (AutizbX5));
316+ 
317+   MCInst Autiaz = MCInstBuilder (AArch64::AUTIZA).addReg (AArch64::LR);
318+   MCInst Autibz = MCInstBuilder (AArch64::AUTIZB).addReg (AArch64::LR);
319+   ASSERT_TRUE (BC->MIB ->isPAuthOnLR (Autiaz));
320+   ASSERT_TRUE (BC->MIB ->isPAuthOnLR (Autibz));
321+ 
322+   MCInst Autia1716 = MCInstBuilder (AArch64::AUTIA1716);
323+   MCInst Autib1716 = MCInstBuilder (AArch64::AUTIB1716);
324+   ASSERT_FALSE (BC->MIB ->isPAuthOnLR (Autia1716));
325+   ASSERT_FALSE (BC->MIB ->isPAuthOnLR (Autib1716));
326+ 
327+   MCInst Autia171615 = MCInstBuilder (AArch64::AUTIA171615);
328+   MCInst Autib171615 = MCInstBuilder (AArch64::AUTIB171615);
329+   ASSERT_FALSE (BC->MIB ->isPAuthOnLR (Autia171615));
330+   ASSERT_FALSE (BC->MIB ->isPAuthOnLR (Autib171615));
331+ 
332+   MCInst Retaa = MCInstBuilder (AArch64::RETAA);
333+   MCInst Retab = MCInstBuilder (AArch64::RETAB);
334+   ASSERT_FALSE (BC->MIB ->isPAuthOnLR (Retaa));
335+   ASSERT_FALSE (BC->MIB ->isPAuthOnLR (Retab));
336+   ASSERT_TRUE (BC->MIB ->isPAuthAndRet (Retaa));
337+   ASSERT_TRUE (BC->MIB ->isPAuthAndRet (Retab));
338+ }
339+ 
264340#endif //  AARCH64_AVAILABLE
265341
266342#ifdef  X86_AVAILABLE
0 commit comments