www.pudn.com > g729.rar > basic_opasm.S


#include "linkage.h"
	.section ".data"
	.global Overflow
	.global Carry
	.align 5
Overflow:	.hword 0x0000
Carry:		.hword 0x0000

	.section ".text"
	.type Overflow_p, #object
	.align 5
Overflow_p:	.long Overflow 
Carry_p:	.long Carry
MAX_32_P: 	.long 0x7fffffff
MIN_32_P: 	.long 0x80000000
MIN_16_P:	.long 0xffff8000
MAX_16_P:	.long 0x00007fff
/* static Word16 negate(Word16 var1) */
	.section ".text"
.align 5
.section ".text"
.global negate
negate:
	cmp r0,#0x8000
	mvneq r0,#0x8000
	rsbne r0,r0,#0
	mov pc,lr
.align 5
.section ".text"
.global L_negate
L_negate:
	cmp r0,#0x80000000
	mvneq r0,#0x80000000
	rsbne r0,r0,#0
	mov pc,lr

.global extract_h
extract_h:
	mov r0,r0,asr #16
	mov pc,lr
.global extract_l
extract_l:
	mov r0,r0,lsl #16
	mov r0,r0,asr #16
	mov pc,lr


.align 5
.section ".text"
.global L_add
L_add:	
	adds r0,r1,r0
	movvc pc,lr
	mvnmi r0,#0x8,4
	movpl r0,#0x8,4
	mov pc,lr
.align 5
.section ".text"
.global L_sub
L_sub:	
	subs r0,r0,r1
	movvc pc,lr
	mvnmi r0,#0x8,4
	movpl r0,#0x8,4
	mov pc,lr
.align 5
.section ".text"
.global L_mac
L_mac:	
	mul r1,r2,r1
	teq r1,#0x4,4
	mvneq r1,#0x8,4
	movne r1,r1,lsl #1
	adds r0,r0,r1
	movvc pc,lr
	mov r2,#1
	ldr r3,Overflow_p
	mvnmi r0,#0x8,4
	movpl r0,#0x8,4
	strh r2,[r3]
	mov pc,lr
.align 5
.section ".text"
.global L_msu
L_msu:	
	mul r1,r2,r1
	teq r1,#0x4,4
	mvneq r1,#0x8,4
	movne r1,r1,lsl #1
	subs r0,r0,r1
	movvc pc,lr
	mov r2,#1
	mvnmi r0,#0x8,4
	movpl r0,#0x8,4
	ldr r3,Overflow_p
	strh r2,[r3]
	mov pc,lr
.align 5
.section ".text"
.global L_mult
L_mult:	
	mul r0,r1,r0
	teq r0,#0x4,4	
	movne r0,r0,lsl #1
	movne pc,lr
	mvn r0,#0x8,4
	mov pc,lr
.align 5
.section ".text"
.global round
round:
/*	adds r0,r0,#0x00008000
	movvc r0,r0,asr #16
	movvc pc,lr
	mov r1,#0x80000000
	movmi r0,r1,asr #16
	mvnpl r0,r1,asr #16*/
	movs r0,r0,asr #16
	addcs r0,r0,#1
	mov pc,lr
.align 5
.section ".text"
.global sature
sature:
	mov r1,#0x80000000  @modified
	cmn r0,r1,asr #16
	mvngt r0,r1,asr #16
	movgt pc,lr
	cmp r0,r1,asr #16
	movlt r0,r1,asr #16
	mov pc,lr

.align 5
.section ".text"
.global L_deposit_l
L_deposit_l:
	mov r0,r0,lsl #16
	mov r0,r0,asr #16
	mov pc,lr

.align 5
.section ".text"
.global L_Comp
L_Comp:
	mov r0,r0,lsl #16
	adds r0,r0,r1,lsl #1
	movvc pc,lr
	mvnmi r0,#0x8,4
	movpl r0,#0x8,4
	mov pc,lr

.align 5
.section ".text"
.global mult
mult:
	mul r0,r1,r0
	mov r0,r0,asr #15
	mov r1,#0x80000000  @modified
	cmn r0,r1,asr #16
	mvngt r0,r1,asr #16
	movgt pc,lr
	cmp r0,r1,asr #16
	movlt r0,r1,asr #16
	mov pc,lr

.align 5
.section ".text"
.global Mpy_32
Mpy_32:
	mul r3,r0,r3		@mult(hi1,lo2)--->lo2(r3)
	mov r3,r3,asr #15

	mul r1,r2,r1     	@mult(hi2,lo1)--->lo1(r1)
	mov r1,r1,asr #15
	
	mul r0,r2,r0		@L_mult(hi1,hi2)	
	teq r0,#0x4,4	
	movne r0,r0,lsl #1
	mvneq r0,#0x8,4
	
	add r1,r1,r3		@(mult(hi1,lo2)+mult(hi2,lo1))<<1
	adds r0,r0,r1,lsl #1	@all plus
	movvc pc,lr
	mvnmi r0,#0x8,4
	movpl r0,#0x8,4
	mov pc,lr

.align 5
.section ".text"
.global add 
add:
	add r0,r0,r1
	ldr r2,Overflow_p
	ldr r1,MAX_16_P
	mov r3,#1
	cmp r0,r1
	movgt r0,r1
	strgth r3,[r2]
	movgt pc,lr
	cmn r0,r1
	mvnlt r0,r1
	strlth r3,[r2]
	mov pc,lr
.align 5
.section ".text"
.global sub 
sub:
	sub r0,r0,r1
	ldr r2,Overflow_p
	ldr r1,MAX_16_P
	mov r3,#1
	cmp r0,r1
	movgt r0,r1
	strgth r3,[r2]
	movgt pc,lr
	cmn r0,r1
	mvnlt r0,r1
	strlth r3,[r2]
	mov pc,lr
.align 5
.section ".text"
.global mult_r
mult_r:
	mov r2,#0x4000
	mla r0,r1,r0,r2
	mov r0,r0,asr #15
	ldr r1,MAX_16_P
	cmp r0,r1
	movgt r0,r1
	movgt pc,lr
	cmn r0,r1
	mvnlt r0,r1
	mov pc,lr

.global L_deposit_h
L_deposit_h:
	mov r0,r0,lsl #16
	mov pc,lr

.align 5
.section ".text"
.global Mpy_32_16
Mpy_32_16:
	mul r0,r2,r0
	teq r0,#0x4,4	
	movne r0,r0,lsl #1
	mvneq r0,#0x8,4
	
	mul r1,r2,r1
	mov r1,r1,asr #15
	adds r0,r0,r1,lsl #1	  @all plus
	
	movvc pc,lr
	mvnmi r0,#0x8,4
	movpl r0,#0x8,4
	mov pc,lr
.align 5
.section ".text"
.global L_Extract
L_Extract:
	mov r3,r0,asr #16
	strh r3,[r1]
	sub r0,r0,r3,lsl #16
	mov r0,r0,asr #1
	strh r0,[r2]
	mov pc,lr

.align 5
.section ".text"
.global shl
shl:
2:	cmp r1,#15
	movgt r1,#15
	mov r0,r0,lsl r1
	ldr r1,MAX_16_P 	@ldr r1,MAX_16_P modified
	cmp r0,r1
	movgt r0,r1
	movgt pc,lr
	cmn r0,r1
	mvnlt r0,r1
	mov pc,lr
.global  shr
shr:
	cmp r1,#0
	rsblt r1,r1,#0
	blt 2b
	mov r0,r0,asr r1
	mov  pc,lr
.align 5
.section ".text"
.global L_shr
L_shr:
3:	mov r0,r0,asr r1
	mov pc,lr
.align 5
.section ".text"
.global L_shl
L_shl:
	cmp r1,#0
	rsble r1,r1,#0
	ble 3b
4:	adds r0,r0,r0
	bvs 5f
	subs r1,r1,#1
	bne 4b
	mov pc,lr
5:	movpl r0,#0x80000000
	mvnmi r0,#0x80000000
	mov pc,lr
.align 5
.section ".text"
.global abs_s
abs_s:
	cmp r0,#0x8000
	mvneq r0,#0x8000
	moveq pc,lr
	cmp r0,#0
	rsblt r0,r0,#0
	mov pc,lr

.align 5
.section ".text"
.global L_abs
L_abs:
	cmp r0,#0x80000000
	mvneq r0,#0x8000000
	moveq pc,lr
	cmp r0,#0
	rsblt r0,r0,#0
	mov pc,lr
.align 5
.section ".text"
.global L_shr_r
L_shr_r:
	movs r0,r0,asr r1
	addcs r0,r0,#1
	mov pc,lr

.align 5
.section ".text"
.global myadd 
myadd:
	add r0,r0,r1
	ldr r1,MAX_16_P
	cmp r0,r1
	movgt r0,r1
	movgt pc,lr
	cmn r0,r1
	mvnlt r0,r1
	mov pc,lr
.align 5
.section ".text"
.global mysub 
mysub:
	sub r0,r0,r1
	ldr r1,MAX_16_P
	cmp r0,r1
	movgt r0,r1
	movgt pc,lr
	cmn r0,r1
	mvnlt r0,r1
	mov pc,lr
.align 5
.section ".text"
.global myL_mac
myL_mac:	
	mul r1,r2,r1
	teq r1,#0x4,4
	mvneq r1,#0x8,4
	movne r1,r1,lsl #1
	adds r0,r0,r1
	movvc pc,lr
	mvnmi r0,#0x8,4
	movpl r0,#0x8,4
	mov pc,lr