base: fix color_u64_argb_nonpremul for 64-bit
diff --git a/internal/cgen/base/image-public.h b/internal/cgen/base/image-public.h index 579736c..e3ad540 100644 --- a/internal/cgen/base/image-public.h +++ b/internal/cgen/base/image-public.h
@@ -258,16 +258,16 @@ static inline uint64_t // wuffs_base__color_u64_argb_nonpremul__as__color_u64_argb_premul( uint64_t argb_nonpremul) { - uint32_t a = 0xFFFF & (argb_nonpremul >> 48); + uint64_t a = 0xFFFF & (argb_nonpremul >> 48); - uint32_t r = 0xFFFF & (argb_nonpremul >> 32); + uint64_t r = 0xFFFF & (argb_nonpremul >> 32); r = (r * a) / 0xFFFF; - uint32_t g = 0xFFFF & (argb_nonpremul >> 16); + uint64_t g = 0xFFFF & (argb_nonpremul >> 16); g = (g * a) / 0xFFFF; - uint32_t b = 0xFFFF & (argb_nonpremul >> 0); + uint64_t b = 0xFFFF & (argb_nonpremul >> 0); b = (b * a) / 0xFFFF; - return (a << 24) | (r << 16) | (g << 8) | (b << 0); + return (a << 48) | (r << 32) | (g << 16) | (b << 0); } static inline uint8_t //
diff --git a/internal/cgen/base/pixconv-submodule-regular.c b/internal/cgen/base/pixconv-submodule-regular.c index 5ba01dc..a74fde6 100644 --- a/internal/cgen/base/pixconv-submodule-regular.c +++ b/internal/cgen/base/pixconv-submodule-regular.c
@@ -349,7 +349,7 @@ wuffs_base__color_u32_argb_premul__as__color_u8_gray(color | 0xFF000000)); wuffs_base__poke_u8__no_bounds_check(row + (2 * ((size_t)x)) + 1, - color >> 24); + ((uint8_t)(color >> 24))); break; case WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_NONPREMUL: @@ -509,7 +509,7 @@ color); ptr[0] = wuffs_base__color_u32_argb_premul__as__color_u8_gray(dst | 0xFF000000); - ptr[1] = dst >> 24; + ptr[1] = ((uint8_t)(dst >> 24)); break; }
diff --git a/internal/cgen/base/pixconv-submodule-ycck.c b/internal/cgen/base/pixconv-submodule-ycck.c index 9869a94..10a0eea 100644 --- a/internal/cgen/base/pixconv-submodule-ycck.c +++ b/internal/cgen/base/pixconv-submodule-ycck.c
@@ -156,9 +156,9 @@ color |= ((uint32_t)(*up3++)) << 24; uint8_t* ptr = row + (4 * ((size_t)x)); - uint32_t dst = + uint32_t dst_color = wuffs_base__color_u32_argb_nonpremul__as__color_u32_argb_premul(color); - wuffs_base__poke_u32le__no_bounds_check(ptr, dst); + wuffs_base__poke_u32le__no_bounds_check(ptr, dst_color); } } @@ -204,9 +204,10 @@ color |= ((uint32_t)(*up3++)) << 24; uint8_t* ptr = row + (4 * ((size_t)x)); - uint32_t dst = wuffs_base__peek_u32le__no_bounds_check(ptr); - dst = wuffs_private_impl__composite_premul_nonpremul_u32_axxx(dst, color); - wuffs_base__poke_u32le__no_bounds_check(ptr, dst); + uint32_t dst_color = wuffs_base__peek_u32le__no_bounds_check(ptr); + dst_color = wuffs_private_impl__composite_premul_nonpremul_u32_axxx( + dst_color, color); + wuffs_base__poke_u32le__no_bounds_check(ptr, dst_color); } }
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c index cdc7207..6e9388d 100644 --- a/release/c/wuffs-unsupported-snapshot.c +++ b/release/c/wuffs-unsupported-snapshot.c
@@ -4612,16 +4612,16 @@ static inline uint64_t // wuffs_base__color_u64_argb_nonpremul__as__color_u64_argb_premul( uint64_t argb_nonpremul) { - uint32_t a = 0xFFFF & (argb_nonpremul >> 48); + uint64_t a = 0xFFFF & (argb_nonpremul >> 48); - uint32_t r = 0xFFFF & (argb_nonpremul >> 32); + uint64_t r = 0xFFFF & (argb_nonpremul >> 32); r = (r * a) / 0xFFFF; - uint32_t g = 0xFFFF & (argb_nonpremul >> 16); + uint64_t g = 0xFFFF & (argb_nonpremul >> 16); g = (g * a) / 0xFFFF; - uint32_t b = 0xFFFF & (argb_nonpremul >> 0); + uint64_t b = 0xFFFF & (argb_nonpremul >> 0); b = (b * a) / 0xFFFF; - return (a << 24) | (r << 16) | (g << 8) | (b << 0); + return (a << 48) | (r << 32) | (g << 16) | (b << 0); } static inline uint8_t // @@ -24762,7 +24762,7 @@ wuffs_base__color_u32_argb_premul__as__color_u8_gray(color | 0xFF000000)); wuffs_base__poke_u8__no_bounds_check(row + (2 * ((size_t)x)) + 1, - color >> 24); + ((uint8_t)(color >> 24))); break; case WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_NONPREMUL: @@ -24922,7 +24922,7 @@ color); ptr[0] = wuffs_base__color_u32_argb_premul__as__color_u8_gray(dst | 0xFF000000); - ptr[1] = dst >> 24; + ptr[1] = ((uint8_t)(dst >> 24)); break; } @@ -33004,9 +33004,9 @@ color |= ((uint32_t)(*up3++)) << 24; uint8_t* ptr = row + (4 * ((size_t)x)); - uint32_t dst = + uint32_t dst_color = wuffs_base__color_u32_argb_nonpremul__as__color_u32_argb_premul(color); - wuffs_base__poke_u32le__no_bounds_check(ptr, dst); + wuffs_base__poke_u32le__no_bounds_check(ptr, dst_color); } } @@ -33052,9 +33052,10 @@ color |= ((uint32_t)(*up3++)) << 24; uint8_t* ptr = row + (4 * ((size_t)x)); - uint32_t dst = wuffs_base__peek_u32le__no_bounds_check(ptr); - dst = wuffs_private_impl__composite_premul_nonpremul_u32_axxx(dst, color); - wuffs_base__poke_u32le__no_bounds_check(ptr, dst); + uint32_t dst_color = wuffs_base__peek_u32le__no_bounds_check(ptr); + dst_color = wuffs_private_impl__composite_premul_nonpremul_u32_axxx( + dst_color, color); + wuffs_base__poke_u32le__no_bounds_check(ptr, dst_color); } }