Bitwise OR on flags field performs a bitwise OR of the flags field of a capability and bits 63 to 56 of a register value and writes the result to the flags field of the destination Capability register. If the source capability is sealed, the Capability Tag written to the destination Capability register is cleared.
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | Rm | 0 | 1 | 1 | 0 | 1 | 0 | Cn | Cd | ||||||||||||
opc |
integer d = UInt(Cd); integer n = UInt(Cn); integer m = UInt(Rm);
<Cd|CSP> |
Is the capability name of the destination register or stack pointer, encoded in the "Cd" field. |
<Cn|CSP> |
Is the capability name of the source register or stack pointer, encoded in the "Cn" field. |
<Xm> |
Is the 64-bit name of the source general-purpose register, encoded in the "Rm" field. |
CheckCapabilitiesEnabled(); Capability operand = if n == 31 then CSP[] else C[n]; bits(64) mask = X[m]; bits(64) oldvalue = CapGetValue(operand); bits(8) newflags = oldvalue<63:56> OR mask<63:56>; bits(64) newvalue = newflags : oldvalue<55:0>; Capability result = CapSetFlags(operand,newvalue); if CapIsSealed(operand) then result = CapWithTagClear(result); if d == 31 then CSP[] = result; else C[d] = result;
Internal version only: isa v32.13, AdvSIMD v29.04, pseudocode morello-2022-01_rc2, capabilities morello-2022-01_rc2 ; Build timestamp: 2022-01-11T11:23
Copyright © 2010-2022 Arm Limited or its affiliates. All rights reserved. This document is Non-Confidential.