28.01.2015 Views

Exception Handling ABI for the ARM Architecture

Exception Handling ABI for the ARM Architecture

Exception Handling ABI for the ARM Architecture

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!