📄 idct.s
字号:
;--------------------------------------
mov AGRAdr0, r6
mov AGRAdr1, r7
mov AGRAdr3, r14 ;cos coeffs
nop ;pipeline
mov r0, a0(1*4)
sub r1, r0, a1(-1*4)
;--------------------------------------
loop r12, dct_butterfly_loop_2_2
mulf r2, r1, a3(0*4) ;pipeline
mov r0, a0(1*4)
rnd r2
shr r17, a3(1*4), 24 //get integer portion
mult r16, r17, r1
sub r1, r0, a1(-1*4)
add r2, r16
// add r3, r9 //rnd
// shr r3, 19 //to 4 LSBs
// shl r2, 4 //scaled by 16
// or r2, r3 //append
sub r3, r2, r4
blte check_neg_2_2
mov r2, r4
j save_r2_2_2
check_neg_2_2:
sub r3, r2, r5
bgte save_r2_2_2
mov r2, r5
save_r2_2_2:
mov a2(1*4), r2 //append. rnd to saturate ??
dct_butterfly_loop_2_2:
;--------------------------------------
add r6, r15 ;to next group
add r7, r15
dct_group_loop_2:
;======================================
shl r11, 1 ;double group count
shr r12, 1 ;half butterfly count
shr r13, 1 ;half offset
shr r15, 1 ;??
addi r10, 1 ;inc pass count
andi r10, 1 // RH 10-14-97
add r14, r15 ;to next set of cos coeffs
dct_pass_loop_2:
SET_TrapReg
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;----------------------- copy the results to new_v buffer ----------
movi AGRAdr0, local_p_buffer_byte + 13*4
movi AGRAdr2, local_new_v_byte + 1*4
movi r2, 0
.if NO_SAT
mov r0, a0(2*4) ;p13
add r0, a0(-14*4) ;tmp=p13+p15
add r1, r0, a0(8*4) ;tmp+p1
add r1, a0(-4*4) ;tmp+p1+p9
mov a2(4*4), r1 ;new_v[1]=p1+p9+tmp
add r1, r0, a0(2*4) ;tmp+p5
add r1, a0(4*4) ;tmp+p5+p7
add r1, a0(-2*4) ;tmp+p5+p7+p11
mov a2(11*4), r1
.else
mulf r10, r4, a0(2*4); p13
madd r10, r4, a0(-14*4); tmp=p13+p15
nop
rnd r12, r10 ; r12=tmp
madd r10, r4, a0(8*4); tmp+p1
madd r10, r4, a0(-4*4); tmp+p1+p9
nop
rnd a2(4*4), r10 ; new_v[1]=p1+p9+tmp
mulf r10, r4, r12 ; tmp
madd r10, r4, a0(2*4); tmp+p5
madd r10, r4, a0(4*4); tmp+p5+p7
madd r10, r4, a0(-2*4); tmp+p5+p7+p11
nop
rnd a2(11*4), r10
.endif
.if NO_SAT
add r0, a0(-8*4) ;tmp += p9
add r1, r0, a0(13*4) ;tmp+p1
add r1, a0(-9*4) ;tmp+p1+p14
sub a2(-13*4), r2, r1 ;new_v[16]= -(p1+p14+tmp)
add r0, a0(2*4)
add r0, a0(-1*4) ;tmp += p5+p7
mov a2(15*4), r0 ;new_v[3]=tmp
add r1, r0, a0(8*4) ;tmp+p6
add r1, a0(-4*4) ;tmp+p6+p14
sub a2(4*4), r2, r1 ;new_v[18]= -(p6+p14+tmp)
.else
mulf r10, r5, r12 ; -tmp
madd r10, r5, a0(-8*4); tmp+=p9
nop
rnd r12, r10 ; r12=-tmp
madd r10, r5, a0(13*4); -tmp-p1
madd r10, r5, a0(-9*4); -tmp-p1-p14
nop
rnd a2(-13*4), r10 ; new_v[16]= -(p1+p14+tmp)
mulf r10, r5, r12 ; tmp
madd r10, r4, a0(2*4)
madd r10, r4, a0(-1*4);tmp += p5+p7
nop
rnd r12, r10 ; r12=tmp
mov a2(15*4), r12 ; new_v[3]=tmp
mulf r10, r5, r12 ; -tmp
madd r10, r5, a0(8*4); -tmp-p6
madd r10, r5, a0(-4*4); -tmp-p6-p14
nop
rnd a2(4*4), r10 ; new_v[18]= -(p6+p14+tmp)
.endif
#if 0
.if NO_SAT
mov r0, a0(1*4) ;p10
add r0, a0(1*4) ;+p11
add r0, a0(1*4) ;+p12
add r0, a0(1*4) ;+p13
add r0, a0(1*4) ;+p14
add r0, a0(-13*4) ;tmp=p10+p12+p13+p14+p15
.else
mulf r10, r4, a0(1*4); p10
madd r10, r4, a0(1*4); +p11
madd r10, r4, a0(1*4); +p12
madd r10, r4, a0(1*4); +p13
madd r10, r4, a0(1*4); +p14
madd r10, r4, a0(-13*4); +p15
nop
rnd r12, r10 ; r12=tmp=p10+p12+p13+p14+p15
.endif
.if NO_SAT
add r1, r0, a0(1*4) ;tmp+p2
add r1, a0(9*4) ;+p3
sub r1, a0(-8*4) ;-p12
sub a2(4*4), r2, r1 ;new_v[22]= -(p2+p3+tmp-p12)
add r1, r0, a0(2*4) ;tmp+p4
add r1, a0(1*4) ;+p6
add r1, a0(6*4) ;+p7
sub r1, a0(-8*4) ;-p13
sub a2(-6*4), r2, r1 ;new_v[26]= -(p4+p6+p7+tmp-p13)
.else
mulf r10, r5, r12 ; -tmp
madd r10, r5, a0(1*4);-tmp-p2
madd r10, r5, a0(9*4); -p3
madd r10, r4, a0(-8*4); +p12
nop
rnd a2(4*4), r10 ; new_v[22]= -(p2+p3+tmp-p12)
mulf r10, r5, r12 ; -tmp
madd r10, r5, a0(2*4); -p4
madd r10, r5, a0(1*4); -p6
madd r10, r5, a0(6*4); -p7
madd r10, r4, a0(-8*4); +p13
nop
rnd a2(-6*4), r10 ; new_v[26]= -(p4+p6+p7+tmp-p13)
.endif
.if NO_SAT
add r1, r0, a0(1*4) ;tmp+p5
add r1, a0(1*4) ;+p6
add r1, a0(5*4) ;+p7
sub r1, a0(-10*4) ;-p12
sub a2(4*4), r2, r1 ;new_v[20]= -(p5+p6+p7+tmp-p12)
add r1, r0, a0(1*4) ;tmp+p2
add r1, a0(10*4) ;+p3
sub r1, a0(-5*4) ;-p13
sub a2(6*4), r2, r1 ;new_v[24]= -(p2+p3+tmp-p13)
.else
mulf r10, r5, r12 ; -tmp
madd r10, r5, a0(1*4); -p5
madd r10, r5, a0(1*4); -p6
madd r10, r5, a0(5*4); -p7
madd r10, r4, a0(-10*4); +p12
nop
rnd a2(4*4), r10 ; new_v[20]= -(p5+p6+p7+tmp-p12)
mulf r10, r5, r12 ; -tmp
madd r10, r5, a0(1*4); -p2
madd r10, r5, a0(10*4); -p3
madd r10, r4, a0(-5*4); +p13
nop
rnd a2(6*4), r10 ; new_v[24]= -(p2+p3+tmp-p13)
.endif
#endif
//------------ More dynamic range --------------------
.if NO_SAT_1
mov r0, a0(1*4) ;p10
// add r0, a0(1*4) ;+p11
add r0, a0(3*4) ;+p11
// add r0, a0(1*4) ;+p12
// add r0, a0(1*4) ;+p13
add r0, a0(1*4) ;+p14
// add r0, a0(-13*4) ;tmp=p10+p11+p12+p13+p14+p15
add r0, a0(-13*4) ;tmp=p10+p11+p14+p15
add r1, r0, a0(1*4) ;tmp+p2
// add r1, a0(9*4) ;+p3
add r1, a0(1*4) ;+p3
// sub r1, a0(-8*4) ;-p12
// sub a2(4*4), r2, r1 ;new_v[22]= -(p2+p3+tmp-p12)
sub a2(4*4), r2, r1 ;new_v[22]= -(p2+p3+tmp)
add r1, r0, a0(2*4) ;tmp+p4
add r1, a0(1*4) ;+p6
// add r1, a0(6*4) ;+p7
add r1, a0(-2*4) ;+p7
// sub r1, a0(-8*4) ;-p13
// sub a2(-6*4), r2, r1 ;new_v[26]= -(p4+p6+p7+tmp-p13)
sub a2(-6*4), r2, r1 ;new_v[26]= -(p4+p6+p7+tmp)
add r1, r0, a0(1*4) ;tmp+p5
add r1, a0(1*4) ;+p6
// add r1, a0(5*4) ;+p7
add r1, a0(-5*4) ;+p7
// sub r1, a0(-10*4) ;-p12
// sub a2(4*4), r2, r1 ;new_v[20]= -(p5+p6+p7+tmp-p12)
sub a2(4*4), r2, r1 ;new_v[20]= -(p5+p6+p7+tmp)
add r1, r0, a0(1*4) ;tmp+p2
// add r1, a0(10*4) ;+p3
add r1, a0(5*4) ;+p3
// sub r1, a0(-5*4) ;-p13
// sub a2(6*4), r2, r1 ;new_v[24]= -(p2+p3+tmp-p13)
sub a2(6*4), r2, r1 ;new_v[24]= -(p2+p3+tmp)
//---
.else
#if 0
mulf r10, r4, a0(1*4); p10
// madd r10, r4, a0(1*4); +p11
madd r10, r4, a0(3*4); +p11
// madd r10, r4, a0(1*4); +p12
// madd r10, r4, a0(1*4); +p13
madd r10, r4, a0(1*4); +p14
madd r10, r4, a0(-13*4); +p15
nop
// rnd r12, r10 ; r12=tmp=p10+p11+p12+p13+p14+p15
rnd r12, r10 ; r12=tmp=p10+p11+p14+p15
mulf r10, r5, r12 ; -tmp
madd r10, r5, a0(1*4);-tmp-p2
// madd r10, r5, a0(9*4); -p3
madd r10, r5, a0(1*4); -p3
// madd r10, r4, a0(-8*4); +p12
nop
rnd a2(4*4), r10 ; new_v[22]= -(p2+p3+tmp-p12)
mulf r10, r5, r12 ; -tmp
madd r10, r5, a0(2*4); -p4
madd r10, r5, a0(1*4); -p6
// madd r10, r5, a0(6*4); -p7
madd r10, r5, a0(-2*4); -p7
// madd r10, r4, a0(-8*4); +p13
nop
rnd a2(-6*4), r10 ; new_v[26]= -(p4+p6+p7+tmp-p13)
mulf r10, r5, r12 ; -tmp
madd r10, r5, a0(1*4); -p5
madd r10, r5, a0(1*4); -p6
// madd r10, r5, a0(5*4); -p7
madd r10, r5, a0(-5*4); -p7
// madd r10, r4, a0(-10*4); +p12
nop
rnd a2(4*4), r10 ; new_v[20]= -(p5+p6+p7+tmp-p12)
mulf r10, r5, r12 ; -tmp
madd r10, r5, a0(1*4); -p2
// madd r10, r5, a0(10*4); -p3
madd r10, r5, a0(5*4); -p3
// madd r10, r4, a0(-5*4); +p13
nop
rnd a2(6*4), r10 ; new_v[24]= -(p2+p3+tmp-p13)
#endif
// new_v[22]= -(p2+p3+p10+p11+p13+p14+p15)
mulf r10, r5, a0(-7*4); -p10
madd r10, r5, a0(8*4); -p3
madd r10, r5, a0(-9*4); -p11
madd r10, r5, a0(11*4); -p2
madd r10, r5, a0(1*4); -p13
madd r10, r5, a0(1*4); -p14
madd r10, r5, a0(-5*4); -p15
nop
rnd a2(4*4), r10 ; new_v[22]
// new_v[26]= -(p4+p6+p7+p10+p11+p12+p14+p15)
mulf r10, r5, a0(-3*4); -p10
madd r10, r5, a0(4*4); -p7
madd r10, r5, a0(-5*4); -p11
madd r10, r5, a0(6*4); -p6
madd r10, r5, a0(-8*4); -p12
madd r10, r5, a0(10*4); -p4
madd r10, r5, a0(1*4); -p14
madd r10, r5, a0(-5*4); -p15
nop
rnd a2(-6*4), r10 ; new_v[26]
// new_v[20]= -(p5+p6+p7+p10+p11+p13+p14+p15)
mulf r10, r5, a0(-3*4); -p10
madd r10, r5, a0(4*4); -p7
madd r10, r5, a0(-5*4); -p11
madd r10, r5, a0(7*4); -p6
madd r10, r5, a0(-8*4); -p13
madd r10, r5, a0(9*4); -p5
madd r10, r5, a0(1*4); -p14
madd r10, r5, a0(-5*4); -p15
nop
rnd a2(4*4), r10 ; new_v[20]
// new_v[24]= -(p2+p3+p10+p11+p12+p14+p15)
mulf r10, r5, a0(-7*4); -p10
madd r10, r5, a0(8*4); -p3
madd r10, r5, a0(-9*4); -p11
madd r10, r5, a0(10*4); -p2
madd r10, r5, a0(2*4); -p12
madd r10, r5, a0(1*4); -p14
madd r10, r5, a0(-7*4); -p15
nop
rnd a2(6*4), r10 ; new_v[24]
.endif
//----------------------------------------------------
.if NO_SAT
mov r0, a0(4*4) ;p8
add r0, a0(2*4) ;+p12
add r0, a0(1*4) ;+p14
add r0, a0(-15*4) ;tmp=p8+p12+p14+p15
add r1, r0, a0(4*4) ;p0+tmp
sub a2(-2*4), r2, r1 ;new_v[30]= -(p0+tmp)
add r1, r0, a0(2*4) ;p4+tmp
add r1, a0(1*4) ;+p6
add r1, a0(4*4) ;+p7
sub a2(-17*4), r2, r1 ;new_v[28]= -(p4+p6+p7+tmp)
.else
mulf r10, r5, a0(4*4); -p8
madd r10, r5, a0(2*4); -p12
madd r10, r5, a0(1*4); -p14
madd r10, r5, a0(-15*4); -p15
nop
rnd r12, r10 ;r12=-tmp
madd r10, r5, a0(4*4); -p0
nop
rnd a2(-2*4), r10 ; new_v[30]= -(p0+tmp)
mulf r10, r4, r12 ; -tmp
madd r10, r5, a0(2*4); -p4
madd r10, r5, a0(1*4); -p6
madd r10, r5, a0(4*4); -p7
nop
rnd a2(-17*4), r10 ; new_v[28]= -(p4+p6+p7+tmp)
.endif
.if NO_SAT
mov r0, a0(4*4) ;p11
add r0, a0(-8*4) ;tmp=p11+p15
add r1, r0, a0(-4*4) ;+p7
mov a2(-2*4), r1 ;new[11]=p7+tmp
add r0, a0(10*4) ;tmp += p3
mov a2(-2*4), r0 ;new_v[9]=tmp
add r1, r0, a0(2*4) ;+p13
mov a2(6*4), r1 ;new_v[7]=p13+tmp
.else
mulf r10, r4, a0(4*4); p11
madd r10, r4, a0(-8*4); +p15
nop
rnd r12, r10 ; tmp
madd r10, r4, a0(-4*4); +p7
nop
rnd a2(-2*4), r10 ; new[11]=p7+tmp
mulf r10, r4, r12 ; tmp
madd r10, r4, a0(10*4); tmp+=p3
nop
rnd a2(-2*4), r10 ; new_v[9]=tmp
madd r10, r4, a0(2*4); +p13
nop
rnd a2(6*4), r10 ;new_v[7]=p13+tmp
.endif
.if NO_SAT
mov r0, a0(-8*4) ;p15
add r1, r0, a0(0*4) ;+p7
mov a2(2*4), r1 ;new_v[13]=p7+p15
mov a2(0*4), r0 ;new_v[15]=p15
.else
mulf r10, r4, a0(-8*4); p15
nop
rnd r12, r10
madd r10, r4, a0(0*4); p7
nop
rnd a2(2*4), r10 ; new_v[13]=p7+p15
mov a2(0*4), r12
.endif
//============== scale dct_out up by 2 bit to restore data =======
.if 1
movi AGRAdr0, local_new_v_byte
CLR_TrapReg
loop 32, scale_dct_out
mulf r0, r4, a0(0)
madd r0, r4, a0(0)
madd r0, r4, a0(0)
madd r0, r4, a0(0)
//------- Try --------
// madd r0, r4, a0(0)
// madd r0, r4, a0(0)
// madd r0, r4, a0(0)
// madd r0, r4, a0(0)
//---- End of try ----
nop
rnd a0(1*4), r0
scale_dct_out:
SET_TrapReg
.endif
.if DB_DCT_OUT
movi r10,local_new_v_byte
rswi r10,0x500 // begining of dump addr
movi r10,local_new_v_byte+32*4
rswi r10,0x504 // end of dump addr
movi r10,1
rswi r10,0x508 // start dumping
.endif
j r29 ;return to calling routine
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -