gradfun: x86: Factor out common code for some gradfun_filter_line() variants
This commit is contained in:
		
							parent
							
								
									ee80cf741a
								
							
						
					
					
						commit
						ed1a11ed52
					
				| @ -42,13 +42,13 @@ void ff_gradfun_blur_line_movdqu_sse2(intptr_t x, uint16_t *buf, | |||||||
|                                       uint8_t *src1, uint8_t *src2); |                                       uint8_t *src1, uint8_t *src2); | ||||||
| 
 | 
 | ||||||
| #if HAVE_YASM | #if HAVE_YASM | ||||||
| static void gradfun_filter_line_mmxext(uint8_t *dst, uint8_t *src, uint16_t *dc, | static void gradfun_filter_line(uint8_t *dst, uint8_t *src, uint16_t *dc, | ||||||
|                                        int width, int thresh, |                                 int width, int thresh, const uint16_t *dithers, | ||||||
|                                        const uint16_t *dithers) |                                 int alignment) | ||||||
| { | { | ||||||
|     intptr_t x; |     intptr_t x; | ||||||
|     if (width & 3) { |     if (width & alignment) { | ||||||
|         x = width & ~3; |         x = width & ~alignment; | ||||||
|         ff_gradfun_filter_line_c(dst + x, src + x, dc + x / 2, |         ff_gradfun_filter_line_c(dst + x, src + x, dc + x / 2, | ||||||
|                                  width - x, thresh, dithers); |                                  width - x, thresh, dithers); | ||||||
|         width = x; |         width = x; | ||||||
| @ -58,21 +58,18 @@ static void gradfun_filter_line_mmxext(uint8_t *dst, uint8_t *src, uint16_t *dc, | |||||||
|                                   thresh, dithers); |                                   thresh, dithers); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static void gradfun_filter_line_mmxext(uint8_t *dst, uint8_t *src, uint16_t *dc, | ||||||
|  |                                        int width, int thresh, | ||||||
|  |                                        const uint16_t *dithers) | ||||||
|  | { | ||||||
|  |     gradfun_filter_line(dst, src, dc, width, thresh, dithers, 3); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| static void gradfun_filter_line_ssse3(uint8_t *dst, uint8_t *src, uint16_t *dc, | static void gradfun_filter_line_ssse3(uint8_t *dst, uint8_t *src, uint16_t *dc, | ||||||
|                                       int width, int thresh, |                                       int width, int thresh, | ||||||
|                                       const uint16_t *dithers) |                                       const uint16_t *dithers) | ||||||
| { | { | ||||||
|     intptr_t x; |     gradfun_filter_line(dst, src, dc, width, thresh, dithers, 7); | ||||||
|     if (width & 7) { |  | ||||||
|         // could be 10% faster if I somehow eliminated this
 |  | ||||||
|         x = width & ~7; |  | ||||||
|         ff_gradfun_filter_line_c(dst + x, src + x, dc + x / 2, |  | ||||||
|                                  width - x, thresh, dithers); |  | ||||||
|         width = x; |  | ||||||
|     } |  | ||||||
|     x = -width; |  | ||||||
|     ff_gradfun_filter_line_ssse3(x, dst + width, src + width, dc + width / 2, |  | ||||||
|                                  thresh, dithers); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void gradfun_blur_line_sse2(uint16_t *dc, uint16_t *buf, uint16_t *buf1, | static void gradfun_blur_line_sse2(uint16_t *dc, uint16_t *buf, uint16_t *buf1, | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user