/* TRACE32 will call the target monitor program for the user controlled memory access
 * in 32-bit ARM code except for Cortex-M
 * This assembler routine switches too Thumb mode if not already in Thumb mode. 
 * As a result you can compile usraccess.c in thumb mode and use the same resulting 
 * binary for Cortex-M and other ARM cores.
 */

#ifdef __CC_ARM	 
	/* ARM RealView assembler */
	AREA |.first|, CODE
	ALIGN 2
	CODE32
	GLOBAL __main
__main
#else
	/* GNU assembler */
	.section .first, "ax"
	.align 2
	.arm
	.globl  _start
_start:
#endif

	and     r1,r5,r1    /* THUMB: asr r1,r0,#0; b 0x10  (R1 destroyed) => jump over the next three lines in Thumb mode */
	mov     r1,#1
	add     r1,r1,pc
	bx      r1          /* switch to thumb mode and go to next line */
	
#ifdef __CC_ARM
	CODE16
	EXTERN usraccess
#else
	.thumb
#endif

	b      usraccess

#ifdef __CC_ARM
	END
#endif
