;

	AREA |A$$code|,READONLY,CODE

	EXPORT |check_hardware|

;==========================================================================================

; parameters:
;  out: r0 = bit 0 set if 64-bit multiplications supported
;            bit 1 set if working in 32-bit mode

	ALIGN
|check_hardware|
; Check if CPU supports SMLAL
	MOV     R0,#0
	MOV     R1,#0
	MOV     R2,#251
	MOV     R3,#241
	SMLAL   R0,R1,R2,R3
	MUL     R1,R2,R3
	CMP     R0,R1
	MOVEQ   R0,#1
	MOVNE   R0,#0
; Check if CPU is in 32 bit mode
    TEQ     R0,R0 ; sets Z
    TEQ     PC,PC ; EQ in 32-bit mode
    ORREQ   R0,R0,#2
	MOV     PC,R14

	END
