================ @@ -31161,3 +31161,57 @@ This intrinsic is assumed to execute in the default :ref:`floating-point environment <floatenv>` *except* for the rounding mode. This intrinsic is not supported on all targets. Some targets may not support all rounding modes. + +'``llvm.protected.field.ptr``' Intrinsic +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Syntax: +""""""" + +:: + + declare ptr @llvm.protected.field.ptr(ptr ptr, i64 disc, i1 use_hw_encoding) + +Overview: +""""""""" + +The '``llvm.protected.field.ptr``' intrinsic returns a pointer to the +storage location of a pointer that has special properties as described +below. + +Arguments: +"""""""""" + +The first argument is the pointer specifying the location to store the +pointer. The second argument is the discriminator, which is used as an +input for the pointer encoding. The third argument specifies whether to +use a target-specific mechanism to encode the pointer. + +Semantics: +"""""""""" + +This intrinsic returns a pointer which may be used to store a +pointer at the specified address that is encoded using the specified +discriminator. Stores via the pointer will cause the stored pointer to be +blended with the second argument before being stored. The blend operation +shall be either a weak but cheap and target-independent operation (if +the third argument is 0) or a stronger target-specific operation (if the +third argument is 1). When loading from the pointer, the inverse operation +is done on the loaded pointer after it is loaded. Specifically, when the +third argument is 1, the pointer is signed (using pointer authentication +instructions or emulated PAC if not supported by the hardware) using +the struct address before being stored, and authenticated after being +loaded. Note that it is currently unsupported to have the third argument +be 1 on targets other than AArch64. When the third argument is 0, it is +rotated left by 16 bits and the discriminator is subtracted before being +stored, and the discriminator is added and the pointer is rotated right +by 16 bits after being loaded. + +If the pointer is used otherwise than for loading or storing (e.g. its ---------------- pcc wrote:
Done https://github.com/llvm/llvm-project/pull/151647 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits