📄 ac_vld_decode_h.asm
字号:
* Steps to be performed after the loop * * * * a) *num_of_rles = numberval - 1. The number of run-level pairs found * * is numberval - 1. Remember numberval is 1 more because it * * increments for EOB as well. * * * * b) *bit_pos_vld = bit_pos_val; * * Store off the current bit position in the pointer. Status variable * * used for chaining VLD's. * * * * c) *used_up_bytes= used_bytes_val; * * Store off the number of used up bytes in the pointer. Status * * variable for chaining VLD's * * * * d) *data_word = data_word_val; * * Store off the present VLD status word to begin resuming this on * * next pass of the VLD. Status word of the VLD is the most important * * state variable. * * * * e) *data_ptr = data_pointer; * * Store off the pointer from which the next set of 5 bytes need * * to be fetched at the end of the VLD. State variable used for * * chaining VLD calls. * * * * DIAGNOSTICS * * Return value == 1: Incorrect VLD stream in which K > 63 * * Return value == 0: Correct VLD and valid JPEG stream * * * * CYCLES * * 14 * N + 27 * * where N is the number of symbols in a block * * * * Example: N=15 symbols/block: 237 cycles * * * * CODESIZE * * 484 bytes * * * * BIBLIOGRAPHY * * 1) JPEG still image data compression standard by William B * * Pennabaker and Joan L. Mitchell * * 2) CCITT T.81 standard * * * * ------------------------------------------------------------------------- ** Copyright (c) 2002 Texas Instruments, Incorporated. ** All Rights Reserved. ** ========================================================================= * .sect ".text:hand" .include "ac_vld_decode_h.h64"_ac_vld_decode_asm:; ====================== SYMBOLIC REGISTER ASSIGNMENTS ======================= .asg A4, A_data_ptr .asg B4, B_data_word .asg A6, A_run_level .asg B6, B_num_of_rles .asg A8, A_bit_position .asg B8, B_used_up_bytes .asg A10, A_ac_table_luma .asg B21, B_data_word_cpy .asg B16, B_EOB_MASK .asg A6, A_EOB_CODE .asg A20, A_data_word_val .asg A16, A_data_pointer .asg B22, B_numberval .asg B9, B_run_tbl .asg B7, B_sze_tbl .asg B5, B_shf_tbl .asg A5, A_const_32 .asg B2, B_K_62 .asg A21, A_bit_pos_val .asg A22, A_shift_new .asg B1, B_EOB .asg A9, A_used_bytes_val .asg A7, A_run .asg B23, B_level .asg B24, B_num_coeffs .asg B2, B_tbl .asg B18, B_sze_const .asg B16, B_shf_const .asg B0, B_eob_ofs_0 .asg A0, A_eob_byte0 .asg B16, B_eob_ofs_1 .asg B0, B_eob_byte1 .asg B16, B_ofs_len .asg B17, B_EOB_LEN; ============================================================================ LDW .D1T2 *+A_ac_table_luma(4), B_run_tbl ;[ 2,0] NOP 1 LDBU .D1T1 *A_bit_position, A_bit_pos_val ;[ 5,0] LDW .D1T2 *+A_ac_table_luma(12), B_shf_tbl ;[ 6,0] LDW .D1T2 *+A_ac_table_luma(8), B_sze_tbl ;[ 7,0]|| MVK .S2 112, B_eob_ofs_0 ;[ 7,0] LDBU .D2T1 *+B_run_tbl[B_eob_ofs_0],A_eob_byte0 ;[ 8,0]|| ADD .L2 B_eob_ofs_0, 1, B_eob_ofs_1 ;[ 8,0] LDBU .D2T2 *+B_run_tbl[B_eob_ofs_1],B_eob_byte1 ;[ 9,0]|| ADD .S2 B_eob_ofs_0, 4, B_ofs_len ;[ 9,0] LDBU .D2T2 *+B_run_tbl[B_ofs_len], B_EOB_LEN ;[10,0] MVKL .S2 62, B_K_62 ;[11,0]|| LDW .D2T1 *B_data_word, A_data_word_val ;[11,0] MVKH .S2 62, B_K_62 ;[12,0]|| LDW .D2T1 *B_used_up_bytes, A_used_bytes_val ;[12,0] MVK .S2 684, B_shf_const ;[13,0]|| LDW .D1T1 *A_data_ptr, A_data_pointer ;[13,0] ZERO .D2 B_num_coeffs ;[14,0]|| ADD .L2X A_run_level, 2, B_level ;[14,0]|| MVK .S2 370, B_sze_const ;[14,0] ADD .D2 B_shf_tbl, B_shf_const, B_shf_tbl ;[15,0]|| SHL .S2 B_eob_byte1, 16, B_eob_byte1 ;[15,0]|| MVK .L2 -1, B_EOB_MASK ;[15,0] MV .L1 A_run_level, A_run ;[16,0]|| ADD .L2 B_sze_tbl, B_sze_const, B_sze_tbl ;[16,0]|| ADDAW .D2 B_run_tbl, 14, B_run_tbl ;[16,0]|| SHL .S1 A_eob_byte0, 24, A_eob_byte0 ;[16,0]|| SHRU .S2 B_EOB_MASK, B_EOB_LEN, B_EOB_MASK ;[16,0] ADD .D1 A_bit_pos_val, 8, A_shift_new ;[17,0]|| MVK .S1 32, A_const_32 ;[17,0]|| ZERO .L2 B_numberval ;[17,0]|| ADD .L1X A_eob_byte0, B_eob_byte1, A_EOB_CODE ;[17,0]|| NOT .S2 B_EOB_MASK, B_EOB_MASK ;[17,0]|| MV .D2X A_data_word_val, B_data_word_cpy ;[17,0] ;==== Branch occurs; ====================== SYMBOLIC REGISTER ASSIGNMENTS ======================= .asg B21, B_data_word_cpy .asg B16, B_EOB_MASK .asg A6, A_EOB_CODE .asg A20, A_data_word_val .asg A16, A_data_pointer .asg B22, B_numberval .asg B9, B_run_tbl .asg B7, B_sze_tbl .asg B5, B_shf_tbl .asg A5, A_const_32 .asg B2, B_K_62 .asg A21, A_bit_pos_val .asg A22, A_shift_new .asg B1, B_EOB .asg A9, A_used_bytes_val .asg A7, A_run .asg B23, B_level .asg B24, B_num_coeffs .asg B19, B_EOB_VAL .asg B17, B_lmbd_val .asg A17, A_lmbd_val .asg A1, A_new_hi .asg A3, A_temp_h .asg A2, A_temp_l .asg A0, A_temp_swap_l .asg A0, A_new_lo .asg B26, B_t02_ofs .asg B18, B_ofs .asg B17, B_t68_ofs .asg B17, B_t9x_ofs .asg A0, A_st3 .asg B1, B_st5 .asg A0, A_st8 .asg B20, B_run_val .asg B25, B_size_val .asg A2, A_len_cw
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -