__aeabi_read_tp.S revision 1.4
1/* $NetBSD: __aeabi_read_tp.S,v 1.4 2013/08/17 01:08:35 matt Exp $ */
2
3#include "SYS.h"
4
5#if defined(__thumb__) && !defined(_ARM_ARCH_T2)
6#error Thumb only supported on armv7
7#endif
8
9/*
10 * Implementations of this function should corrupt only the result register
11 * (r0) and the non-parameter integer core registers allowed to be corrupted
12 * by the [AAPCS] (ip, lr, and CPSR).
13 */
14ENTRY(__aeabi_read_tp)
15	mrc	p15, 0, r0, c13, c0, 3
16#ifndef _ARM_ARCH_6
17	cmp	r0, #0			/* was it zero? */
18	RETc(ne)			/* return it's not zero */
19	mov	ip, r1			/* syscall zeroes r1 */
20	SYSTRAP(_lwp_getprivate)	/* can't fail */
21	mov	r1, ip			/* restore r1 */
22#endif
23	RET
24END(__aeabi_read_tp)
25