From 5f5caa6733fd102b2a188ce57fd61193e1380dbb Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Fri, 3 May 2019 21:10:01 +0200 Subject: [PATCH] gs: avoid stupid shifts by casting to uint64_t --- sys/src/cmd/gs/src/gdevm40.c | 2 +- sys/src/cmd/gs/src/gdevm48.c | 4 ++-- sys/src/cmd/gs/src/gdevm56.c | 6 +++--- sys/src/cmd/gs/src/gdevm64.c | 6 +++--- sys/src/cmd/gs/src/gxcht.c | 11 +++++------ sys/src/cmd/gs/src/gxclrast.c | 10 +++++----- 6 files changed, 19 insertions(+), 20 deletions(-) diff --git a/sys/src/cmd/gs/src/gdevm40.c b/sys/src/cmd/gs/src/gdevm40.c index 8fb5a80e2..5a95af9aa 100644 --- a/sys/src/cmd/gs/src/gdevm40.c +++ b/sys/src/cmd/gs/src/gdevm40.c @@ -62,7 +62,7 @@ mem_full_alpha_device("image40", 40, 0, mem_open, /* Unpack a color into its bytes. */ #define declare_unpack_color(a, b, c, d, e, color)\ - byte a = (byte)(color >> 32);\ + byte a = (byte)((uint64_t)color >> 32);\ byte b = (byte)((uint)color >> 24);\ byte c = (byte)((uint)color >> 16);\ byte d = (byte)((uint)color >> 8);\ diff --git a/sys/src/cmd/gs/src/gdevm48.c b/sys/src/cmd/gs/src/gdevm48.c index 4c5a6a6e2..05bae0061 100644 --- a/sys/src/cmd/gs/src/gdevm48.c +++ b/sys/src/cmd/gs/src/gdevm48.c @@ -62,8 +62,8 @@ mem_full_alpha_device("image48", 48, 0, mem_open, /* Unpack a color into its bytes. */ #define declare_unpack_color(a, b, c, d, e, f, color)\ - byte a = (byte)(color >> 40);\ - byte b = (byte)(color >> 32);\ + byte a = (byte)((uint64_t)color >> 40);\ + byte b = (byte)((uint64_t)color >> 32);\ byte c = (byte)((uint)color >> 24);\ byte d = (byte)((uint)color >> 16);\ byte e = (byte)((uint)color >> 8);\ diff --git a/sys/src/cmd/gs/src/gdevm56.c b/sys/src/cmd/gs/src/gdevm56.c index be70becfe..44515f8a1 100644 --- a/sys/src/cmd/gs/src/gdevm56.c +++ b/sys/src/cmd/gs/src/gdevm56.c @@ -62,9 +62,9 @@ mem_full_alpha_device("image56", 56, 0, mem_open, /* Unpack a color into its bytes. */ #define declare_unpack_color(a, b, c, d, e, f, g, color)\ - byte a = (byte)(color >> 48);\ - byte b = (byte)(color >> 40);\ - byte c = (byte)(color >> 32);\ + byte a = (byte)((uint64_t)color >> 48);\ + byte b = (byte)((uint64_t)color >> 40);\ + byte c = (byte)((uint64_t)color >> 32);\ byte d = (byte)((uint)color >> 24);\ byte e = (byte)((uint)color >> 16);\ byte f = (byte)((uint)color >> 8);\ diff --git a/sys/src/cmd/gs/src/gdevm64.c b/sys/src/cmd/gs/src/gdevm64.c index 24670eaa4..e3f95b7bf 100644 --- a/sys/src/cmd/gs/src/gdevm64.c +++ b/sys/src/cmd/gs/src/gdevm64.c @@ -67,13 +67,13 @@ mem_full_alpha_device("image64", 64, 0, mem_open, #if arch_is_big_endian /* Unpack a color into 32 bit chunks. */ # define declare_unpack_color(abcd, efgh, color)\ - bits32 abcd = (bits32)((color) >> 32);\ + bits32 abcd = (bits32)((uint64_t)(color) >> 32);\ bits32 efgh = (bits32)(color) #else /* Unpack a color into 32 bit chunks. */ # define declare_unpack_color(abcd, efgh, color)\ - bits32 abcd = (bits32)((0x000000ff & ((color) >> 56)) |\ - (0x0000ff00 & ((color) >> 40)) |\ + bits32 abcd = (bits32)((0x000000ff & ((uint64_t)(color) >> 56)) |\ + (0x0000ff00 & ((uint64_t)(color) >> 40)) |\ (0x00ff0000 & ((color) >> 24)) |\ (0xff000000 & ((color) >> 8)));\ bits32 efgh = (bits32)((0x000000ff & ((color) >> 24)) |\ diff --git a/sys/src/cmd/gs/src/gxcht.c b/sys/src/cmd/gs/src/gxcht.c index 0a61640dd..3d797f9e9 100644 --- a/sys/src/cmd/gs/src/gxcht.c +++ b/sys/src/cmd/gs/src/gxcht.c @@ -233,7 +233,7 @@ gx_dc_ht_colored_write( if (num_comps > 8 * sizeof(uint)) { tmp_mask = (uint)plane_mask; req_size += enc_u_sizew(tmp_mask); - tmp_mask = (uint)(plane_mask >> (8 * sizeof(uint))); + tmp_mask = (uint)((uint64_t)plane_mask >> (8 * sizeof(uint))); req_size += enc_u_sizew(tmp_mask); } else { tmp_mask = (uint)plane_mask; @@ -298,7 +298,7 @@ gx_dc_ht_colored_write( if (num_comps > 8 * sizeof(uint)) { tmp_mask = (uint)plane_mask; enc_u_putw(tmp_mask, pdata); - tmp_mask = (uint)(plane_mask >> (8 * sizeof(uint))); + tmp_mask = (uint)((uint64_t)plane_mask >> (8 * sizeof(uint))); enc_u_putw(tmp_mask, pdata); } else { tmp_mask = (uint)plane_mask; @@ -418,17 +418,16 @@ gx_dc_ht_colored_read( if (size < 1) return_error(gs_error_rangecheck); - if (num_comps > 8 * sizeof(uint)) { enc_u_getw(tmp_mask, pdata); plane_mask = (gx_color_index)tmp_mask; enc_u_getw(tmp_mask, pdata); - plane_mask = (gx_color_index)tmp_mask << (8 * sizeof(uint)); + plane_mask = (gx_color_index)((uint64_t)tmp_mask << (8 * sizeof(uint))); } else { enc_u_getw(tmp_mask, pdata); plane_mask = (gx_color_index)tmp_mask; } - devc.colors.colored.plane_mask = plane_mask; + devc.colors.colored.plane_mask = plane_mask; for (i = 0; i < num_comps; i++, plane_mask >>= 1) { if ((plane_mask & 0x1) != 0) { if (size - (pdata - pdata_start) < 1) @@ -437,7 +436,7 @@ gx_dc_ht_colored_read( } else devc.colors.colored.c_level[i] = 0; } - size -= pdata - pdata_start; + size -= pdata - pdata_start; } if ((flag_bits & dc_ht_colored_alpha_is_max) != 0) diff --git a/sys/src/cmd/gs/src/gxclrast.c b/sys/src/cmd/gs/src/gxclrast.c index 0c0361388..26d13c32d 100644 --- a/sys/src/cmd/gs/src/gxclrast.c +++ b/sys/src/cmd/gs/src/gxclrast.c @@ -559,16 +559,16 @@ in: /* Initialize for a new page. */ /* For cases with an even number of bytes */ case 8: data = *cbp++; - delta = ((gx_color_index) - ((data & 0xf0) << 4) + (data & 0x0f)) << 48; + delta = (gx_color_index)(((uint64_t) + ((data & 0xf0) << 4) + (data & 0x0f)) << 48); case 6: data = *cbp++; - delta |= ((gx_color_index) - ((data & 0xf0) << 4) + (data & 0x0f)) << 32; + delta |= (gx_color_index)(((uint64_t) + (((data & 0xf0) << 4) + (data & 0x0f))) << 32); case 4: data = *cbp++; delta |= ((gx_color_index) - ((data & 0xf0) << 4) + (data & 0x0f)) << 16; + (((data & 0xf0) << 4) + (data & 0x0f))) << 16; case 2: data = *cbp++; delta |= ((gx_color_index)