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