hint
Hint
HINT #<imm>
Provides a hint to the processor (e.g., NOP, YIELD).
Pseudocode Operation
case imm of
0: NOP
1: Yield()
2: WaitForEvent()
3: WaitForInterrupt()
otherwise: NOP
Example
HINT #16
Encoding
Binary Layout
11010101000000110010
31:12
CRm
11:8
op2
7:5
11111
4:0
Operands
-
imm
Hint ID
Related
More in Base
Reference
View in Arm A64 ISA Reference ↗
Arm A64 ISA
Instruction Forms
| Encoding | Instruction | ISA | Bit pattern | ||
|---|---|---|---|---|---|
| 0xD503201F | HINT #<imm> | A64 | 11010101000000110010 | CRm | op2 | 11111 |
Description
Hint instruction is for the instruction set space that is reserved for architectural hint instructions. Some encodings described here are not allocated in this revision of the architecture, and behave as NOPs. These encodings might be allocated to other hint functionality in future revisions of the architecture and therefore must not be used by software.
Operation
case op of
when SystemHintOp_YIELD
Hint_Yield();
when SystemHintOp_DGH
Hint_DGH();
when SystemHintOp_WFE
integer localtimeout = 1 << 64; // No local timeout event is generated
Hint_WFE(localtimeout, WFxType_WFE);
when SystemHintOp_WFI
integer localtimeout = 1 << 64; // No local timeout event is generated
Hint_WFI(localtimeout, WFxType_WFI);
when SystemHintOp_SEV
SendEvent();
when SystemHintOp_SEVL
SendEventLocal();
when SystemHintOp_ESB
if IsFeatureImplemented(FEAT_TME) && TSTATE.depth > 0 then
FailTransaction(TMFailure_ERR, FALSE);
SynchronizeErrors();
AArch64.ESBOperation();
if PSTATE.EL IN {EL0, EL1} && EL2Enabled() then AArch64.vESBOperation();
TakeUnmaskedSErrorInterrupts();
when SystemHintOp_PSB
ProfilingSynchronizationBarrier();
when SystemHintOp_TSB
TraceSynchronizationBarrier();
when SystemHintOp_GCSB
GCSSynchronizationBarrier();
when SystemHintOp_CHKFEAT
X[16, 64] = AArch64.ChkFeat(X[16, 64]);
when SystemHintOp_CSDB
ConsumptionOfSpeculativeDataBarrier();
when SystemHintOp_CLRBHB
Hint_CLRBHB();
when SystemHintOp_BTI
SetBTypeNext('00');
when SystemHintOp_NOP
return; // do nothing
otherwise
Unreachable();