函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:lib\lzo\lzo1x_compress.c Create Date:2022-07-27 07:57:40
Last Modify:2020-03-12 14:18:49 Copyright©Brick
首页 函数Tree
注解内核,赢得工具下载SCCTEnglish

函数名称:lzo1x_1_do_compress

函数原型:static noinline size_t lzo1x_1_do_compress(const unsigned char *in, size_t in_len, unsigned char *out, size_t *out_len, size_t ti, void *wrkmem, signed char *state_offset, const unsigned char bitstream_version)

返回类型:size_t

参数:

类型参数名称
const unsigned char *in
size_tin_len
unsigned char *out
size_t *out_len
size_tti
void *wrkmem
signed char *state_offset
const unsigned charbitstream_version
29  in_end等于inin_len
30  ip_end等于inin_len减20
32  dict等于wrkmem
34  op等于out
35  ip等于in
36  ii等于ip
37  ip加等于如果ti小于4则4减ti否则0
39  循环
40  const unsigned char * m_pos = NULL
43  run_length等于0
44  literal :
45  ip加等于1加ipii右移5位的值
46  :
47  如果此条件成立可能性小(为编译器优化)(ip >= ip_end)则退出
49  dv等于get_unaligned_le32(ip)
51  如果dv恒等于0且bitstream_version
52  ir等于ip加4
53  limit等于如果ip_end小于ipMAX_ZERO_RUN_LENGTH加1则ip_end否则ipMAX_ZERO_RUN_LENGTH加1
82 ir小于@a is a power of 2 value ((uintptr_t)ir, 4)且ir小于limitir恒等于0循环
85  ir自加
86  如果IS_ALIGNED((uintptr_t)ir, 4)则
87 ir加4小于等于limit循环
88  dv等于*ir
89  如果dv
91  ir加等于__builtin_ctz(dv)右移3位
97  退出
103  ir自加
104  run_length等于irip
107  否则
108  t等于dv乘0x1824429d右移32减D_BITS位按位与D_MASK
109  m_pos等于indict[t]
110  dict[t] = (lzo_dict_t)(ip - in)
115  ii减等于ti
116  ti等于0
117  t等于ipii
118  如果t不等于0则
119  如果t小于等于3则
120  op[ * state_offset]或等于t
121  COPY4(op, ii)
122  op加等于t
123  否则如果t小于等于16则
124  op自加等于t减3
125  COPY8(op, ii)
126  COPY8(op + 8, ii + 8)
127  op加等于t
128  否则
129  如果t小于等于18则
130  op自加等于t减3
131  否则
132  tt等于t减18
133  op自加等于0
135  tt减等于255
136  op自加等于0
138  op自加等于tt
140  循环
141  COPY8(op, ii)
142  COPY8(op + 8, ii + 8)
143  op加等于16
144  ii加等于16
145  t减等于16
146 t大于等于16循环
147  如果t大于0则循环
148  op自加等于ii自加
149 t先自减大于0循环
153  如果此条件成立可能性小(为编译器优化)(run_length)则
154  ip加等于run_length
155  run_length减等于MIN_ZERO_RUN_LENGTH
156  put_unaligned_le32((run_length << 21) | 0xfffc18 | (run_length & 0x7), op)
158  op加等于4
159  run_length等于0
160  state_offset等于负3
161  转到:finished_writing_instruction
164  m_len等于4
213  循环
214  m_len加等于1
215  如果ip[m_len]不等于m_pos[m_len]则退出
217  m_len加等于1
218  如果ip[m_len]不等于m_pos[m_len]则退出
220  m_len加等于1
221  如果ip[m_len]不等于m_pos[m_len]则退出
223  m_len加等于1
224  如果ip[m_len]不等于m_pos[m_len]则退出
226  m_len加等于1
227  如果ip[m_len]不等于m_pos[m_len]则退出
229  m_len加等于1
230  如果ip[m_len]不等于m_pos[m_len]则退出
232  m_len加等于1
233  如果ip[m_len]不等于m_pos[m_len]则退出
235  m_len加等于1
238 ip[m_len]恒等于m_pos[m_len]循环
242  m_len_done :
244  m_off等于ipm_pos
245  ip加等于m_len
246  如果m_len小于等于M2_MAX_LENm_off小于等于M2_MAX_OFFSET
247  m_off减等于1
248  op自加等于m_len减1左移5位按位或m_off按位与7的值左移2位
249  op自加等于m_off右移3位
250  否则如果m_off小于等于M3_MAX_OFFSET
251  m_off减等于1
252  如果m_len小于等于M3_MAX_LENop自加等于M3_MARKER按位或m_len减2
254  否则
255  m_len减等于M3_MAX_LEN
256  op自加等于M3_MARKER按位或0
258  m_len减等于255
259  op自加等于0
261  op自加等于m_len
263  op自加等于m_off左移2位
264  op自加等于m_off右移6位
265  否则
266  m_off减等于0x4000
267  如果m_len小于等于M4_MAX_LENop自加等于M4_MARKER按位或m_off右移11位按位与8按位或m_len减2
270  否则
271  m_len减等于M4_MAX_LEN
272  op自加等于M4_MARKER按位或m_off右移11位按位与8
274  m_len减等于255
275  op自加等于0
277  op自加等于m_len
279  op自加等于m_off左移2位
280  op自加等于m_off右移6位
282  state_offset等于负2
283  finished_writing_instruction :
284  ii等于ip
285  转到:next
287  out_len等于opout
288  返回:in_endiiti
调用者
名称描述
lzogeneric1x_1_compress