History

avcodec/mpegvideo: Provide alignment hint to compiler

The underlying element type has always a size of 32B, so that the pointer is always at least 16B aligned. Clang uses this to upgrade the (inlined) memset to aligned stores. GCC doesn't (it does it only when the alignment hint is provided via __builtin_assume_aligned).

Andreas Rheinhardt committed 1 year ago

Commit dcd74081 parent 32cbadc1 file · +6 −4Browse files

Showing the changes to libavcodec (1 of 1 file). Show all

Unified · Split

libavcodec/mpegvideo.c+6−4
@@ -504,11 +504,13 @@ void ff_clean_intra_table_entries(MpegEncContext *s) · 503 unmodified lines
504504 dc_val[uxy] =
505505 dc_val[vxy] = 1024;
506506 /* ac pred */
507− memset(s->ac_val[0][xy ], 0, 32 * sizeof(int16_t));
508− memset(s->ac_val[0][xy + wrap], 0, 32 * sizeof(int16_t));
507+ int16_t (*ac_val)[16] = s->ac_val[0];
508+ av_assume(!((uintptr_t)ac_val & 0xF));
509+ memset(ac_val[xy ], 0, 2 * sizeof(*ac_val));
510+ memset(ac_val[xy + wrap], 0, 2 * sizeof(*ac_val));
509511 /* ac pred */
510− memset(s->ac_val[0][uxy], 0, 16 * sizeof(int16_t));
511− memset(s->ac_val[0][vxy], 0, 16 * sizeof(int16_t));
512+ memset(ac_val[uxy], 0, sizeof(*ac_val));
513+ memset(ac_val[vxy], 0, sizeof(*ac_val));
512514 }
513515
514516 void ff_init_block_index(MpegEncContext *s){ //FIXME maybe rename

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t