@@ -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