#include "libavcodec/cabac.h"
#include "libavutil/attributes.h"
#include "libavutil/x86_cpu.h"
#include "config.h"
Go to the source code of this file.
Defines | |
#define | BRANCHLESS_GET_CABAC_UPDATE(ret, cabac, statep, low, lowword, range, tmp) |
#define | BRANCHLESS_GET_CABAC(ret, cabac, statep, low, lowword, range, tmp, tmpbyte, byte) |
#define | get_cabac_bypass_sign get_cabac_bypass_sign_x86 |
Functions | |
static av_always_inline int | get_cabac_bypass_sign_x86 (CABACContext *c, int val) |
#define BRANCHLESS_GET_CABAC | ( | ret, | |||
cabac, | |||||
statep, | |||||
low, | |||||
lowword, | |||||
range, | |||||
tmp, | |||||
tmpbyte, | |||||
byte | ) |
Value:
"movzbl "statep" , "ret" \n\t"\ "mov "range" , "tmp" \n\t"\ "and $0xC0 , "range" \n\t"\ "movzbl "MANGLE(ff_h264_lps_range)"("ret", "range", 2), "range" \n\t"\ "sub "range" , "tmp" \n\t"\ BRANCHLESS_GET_CABAC_UPDATE(ret, cabac, statep, low, lowword, \ range, tmp) \ "movzbl " MANGLE(ff_h264_norm_shift) "("range"), %%ecx \n\t"\ "shl %%cl , "range" \n\t"\ "movzbl "MANGLE(ff_h264_mlps_state)"+128("ret"), "tmp" \n\t"\ "mov "tmpbyte" , "statep" \n\t"\ "shl %%cl , "low" \n\t"\ "test "lowword" , "lowword" \n\t"\ " jnz 1f \n\t"\ "mov "byte"("cabac"), %%"REG_c" \n\t"\ "movzwl (%%"REG_c") , "tmp" \n\t"\ "bswap "tmp" \n\t"\ "shr $15 , "tmp" \n\t"\ "sub $0xFFFF , "tmp" \n\t"\ "add $2 , %%"REG_c" \n\t"\ "mov %%"REG_c" , "byte "("cabac") \n\t"\ "lea -1("low") , %%ecx \n\t"\ "xor "low" , %%ecx \n\t"\ "shr $15 , %%ecx \n\t"\ "movzbl " MANGLE(ff_h264_norm_shift) "(%%ecx), %%ecx \n\t"\ "neg %%ecx \n\t"\ "add $7 , %%ecx \n\t"\ "shl %%cl , "tmp" \n\t"\ "add "tmp" , "low" \n\t"\ "1: \n\t"
#define BRANCHLESS_GET_CABAC_UPDATE | ( | ret, | |||
cabac, | |||||
statep, | |||||
low, | |||||
lowword, | |||||
range, | |||||
tmp | ) |
Value:
"mov "tmp" , %%ecx \n\t"\ "shl $17 , "tmp" \n\t"\ "sub "low" , "tmp" \n\t"\ "sar $31 , "tmp" \n\t" /*lps_mask*/\ "sub %%ecx , "range" \n\t" /*RangeLPS - range*/\ "and "tmp" , "range" \n\t" /*(RangeLPS - range)&lps_mask*/\ "add %%ecx , "range" \n\t" /*new range*/\ "shl $17 , %%ecx \n\t"\ "and "tmp" , %%ecx \n\t"\ "sub %%ecx , "low" \n\t"\ "xor "tmp" , "ret" \n\t"
#define get_cabac_bypass_sign get_cabac_bypass_sign_x86 |
static av_always_inline int get_cabac_bypass_sign_x86 | ( | CABACContext * | c, | |
int | val | |||
) | [static] |