+#if defined(HAS_APPLE_PAC)
+/*
+ * set_process_dependent_keys
+ *
+ * Updates process dependent keys during context switch if necessary
+ * Per CPU Data rop_key is initialized in arm_init() for bootstrap processor
+ * and in cpu_data_init for slave processors
+ *
+ * arg0 - New thread pointer/Current CPU key
+ * arg1 - Scratch register: New Thread Key
+ * arg2 - Scratch register: Current CPU Data pointer
+ */
+.macro set_process_dependent_keys
+ ldr $1, [$0, TH_ROP_PID]
+ ldr $2, [$0, ACT_CPUDATAP]
+ ldr $0, [$2, CPU_ROP_KEY]
+ cmp $0, $1
+ b.eq 1f
+ str $1, [$2, CPU_ROP_KEY]
+ msr APIBKeyLo_EL1, $1
+ add $1, $1, #1
+ msr APIBKeyHi_EL1, $1
+ add $1, $1, #1
+ msr APDBKeyLo_EL1, $1
+ add $1, $1, #1
+ msr APDBKeyHi_EL1, $1
+ isb sy
+1:
+.endmacro
+#endif /* defined(HAS_APPLE_PAC) */