Exception Handling ABI for the ARM Architecture
Exception Handling ABI for the ARM Architecture
Exception Handling ABI for the ARM Architecture
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Exception</strong> handling <strong>ABI</strong> <strong>for</strong> <strong>the</strong> <strong>ARM</strong> architecture<br />
Table 1, Behaviour of _Unwind_VRS_Set<br />
Regclass Representation Regno Behaviour<br />
_UVRSC_CORE _UVRSD_UINT32 0-15 Internally casts valuep to (uint32_t *) and sets <strong>the</strong> value of<br />
core register regno to <strong>the</strong> pointed-to value.<br />
_UVRSC_VFP _UVRSD_VFPX 0-15 Per<strong>for</strong>ms an FLDMX from <strong>the</strong> pointed-to memory to VFP<br />
register D.<br />
_UVRSC_VFP _UVRSD_FLOAT 0-31 Internally casts valuep to (float *) and sets <strong>the</strong> value of<br />
VFP register S to <strong>the</strong> pointed-to value as if by<br />
FMSR.<br />
_UVRSC_VFP _UVRSD_UINT32 0-31 Internally casts valuep to (uint32_t *) and sets <strong>the</strong> value of<br />
VFP register S to <strong>the</strong> pointed-to value as if by<br />
FMSR. (This operation has effects identical with<br />
(_UVRSC_VFP, _UVRSD_FLOAT))<br />
_UVRSC_VFP _UVRSD_DOUBLE 0-31 Internally casts valuep to (double *) and sets <strong>the</strong> value of<br />
VFP register D to <strong>the</strong> pointed-to value as if by<br />
FMDHR,FMDLR.<br />
_UVRSC_WMMXD _UVRSD_UINT64 0-15 Internally casts valuep to (uint64_t *) and sets <strong>the</strong> value of<br />
WMMX data register regno to <strong>the</strong> pointed-to value.<br />
_UVRSC_WMMXC _UVRSD_UINT32 0-3 Internally casts valuep to (uint32_t *) and sets <strong>the</strong> value of<br />
WMMX control register regno to <strong>the</strong> pointed-to value.<br />
If a call is made with a (regclass, representation) pair not in <strong>the</strong> above table, <strong>the</strong> behaviour and return code are<br />
undefined.<br />
Note A given implementation is not required to implement all <strong>the</strong> above pairs. Calls featuring an<br />
unimplemented pair should yield return code _UVRSR_NOT_IMPLEMENTED. The (_UVRSC_CORE,<br />
_UVRSD_UINT32) pair must always be implemented.<br />
7.5.3 Reading from VRS registers<br />
Only a subset of <strong>the</strong> assignment representations are supported because usually <strong>the</strong> content of floating point<br />
registers is unknown.<br />
_Unwind_VRS_Result _Unwind_VRS_Get(_Unwind_Context *context,<br />
_Unwind_VRS_RegClass regclass,<br />
uint32_t regno,<br />
_Unwind_VRS_DataRepresentation representation,<br />
void *valuep);<br />
Valuep must be a pointer to suitably aligned memory. The return code conveys a meaning as follows:<br />
_UVRSR_OK:<br />
Operation succeeded.<br />
_UVRSR_NOT_IMPLEMENTED: Operation not implemented.<br />
_UVRSR_FAILED:<br />
Operation failed in some unspecified way.<br />
The behaviour is determined by examining <strong>the</strong> regclass and representation and is explained in <strong>the</strong> table below.<br />
<strong>ARM</strong> IHI 0038A Copyright © 2002-2005, 2007 <strong>ARM</strong> Limited. All rights reserved. Page 26 of 50