;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; interpolate8x8_halfpel_h_asm_dm642 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .sect ".text:_interpolate8x8_halfpel_h_asm_dm642" .global _interpolate8x8_halfpel_h_asm_dm642 _interpolate8x8_halfpel_h_asm_dm642 .cproc A_dst0, B_src0, A_stride,B_stride .no_mdep ;存储区没有依赖性,这样便于流水 .reg B_src1_FIX_F, B_src1_FEDC:B_src1_BA98, B_src1_GFED, B_src1_CBA9 ;定义的寄存器 .reg A_src0_FIX_7, A_src0_7654:A_src0_3210, A_src0_8765, A_src0_4321 .reg B_dst1_FEDC:B_dst1_BA98, A_dst0_7654:A_ dst0_3210 .reg B_dst1, A_src1, A_i, A_pitch,B_pitch MVK 3, A_i ;循环次数 ADD B_src0, B_stride, A_src1 ; ADD A_dst0, A_stride, B_dst1 ; SHR A_stride, 2, A_pitch SHR B_stride, 2, B_pitch mc8x8_hpel_h: .trip 4, 4, 4 ; 每次处理两行,循环4次 LDNW .D1T2 *+A_src1[2], B_src1_FIX_F ; 地址不对齐读取 LDNDW .D1T2 *A_src1++[B_pitch], B_src1_FEDC:B_src1_BA98 ; ;; SHRMB .2 B_src1_FIX_F, B_src1_FEDC, B_src1_GFED ;右移并拼接:fix_F || (FEDC>>8) ;; AVGU4 .2 B_src1_FEDC, B_src1_GFED, B_dst1_FEDC ; 4对字节对应取平均值 ;; STDW .D2T2 B_dst1_FEDC:B_dst1_BA98, *B_dst1++[A_pitch] ; 存结果 ;; [A_i] BDEC mc8x8_hpel_h, A_i .return .endproc |