	AREA |.text|, CODE, READONLY, ALIGN=2
	THUMB
	REQUIRE8
	PRESERVE8

MULT32	PROC
	EXPORT MULT32
	MOV      r2,r0
	SMULL    r1,r0,r2,r1
	BX		 lr
	ENDP

MULT31	PROC
	EXPORT MULT31
	SMULL    r2,r1,r0,r1
	LSL      r0,r1,#1
	BX       lr
	ENDP

MULT31_SHIFT15	PROC
	EXPORT MULT31_SHIFT15

	SMULL    r2,r1,r0,r1
	LSRS     r0,r2,#15
	ADC      r0,r0,r1,LSL #17
	BX       lr

	ENDP

XPROD32 PROC
	EXPORT XPROD32

	PUSH     {r4,r5,lr}
	SMULL    lr,r12,r0,r2
	SMLAL    lr,r12,r1,r3
	RSB      lr,r0,#0
	SMULL    r2,r0,r1,r2
	SMLAL    r2,r0,lr,r3
	LDR      r4,[sp,#0xc]
	LDR      r5,[sp,#0x10]
	STR      r12,[r4,#0]
	STR      r0,[r5,#0]
	POP      {r4,r5,pc}

	ENDP

XPROD31 PROC
	EXPORT XPROD31

	PUSH     {r4,r5,lr}
	SMULL    lr,r12,r0,r2
	SMLAL    lr,r12,r1,r3
	RSB      lr,r0,#0
	SMULL    r2,r0,r1,r2
	SMLAL    r2,r0,lr,r3
	LDR      r4,[sp,#0xc]
	LDR      r5,[sp,#0x10]
	LSL      r1,r12,#1
	LSL      r0,r0,#1
	STR      r1,[r4,#0]
	STR      r0,[r5,#0]
	POP      {r4,r5,pc}

	ENDP

XNPROD31	PROC
	EXPORT XNPROD31

	PUSH     {r4-r6,lr}
	SMULL    r4,r12,r0,r2
	RSB      lr,r1,#0
	SMLAL    r4,r12,lr,r3
	SMULL    lr,r2,r1,r2
	SMLAL    lr,r2,r0,r3
	LDR      r5,[sp,#0x10]
	LDR      r6,[sp,#0x14]
	LSL      r0,r12,#1
	STR      r0,[r5,#0]
	LSL      r0,r2,#1
	STR      r0,[r6,#0]
	POP      {r4-r6,pc}

	ENDP

CLIP_TO_15	PROC
	EXPORT CLIP_TO_15

	SUBS     r1, r0, #0x8000
	MOVPL    r0, #0x7f00
	ORRPL    r0, r0, #0xff
	ADDS     r1, r0, #0x8000
	MOVMI    r0,#0x8000
	BX 		 lr
	ENDP

	END
