From: Takashi Iwai Date: Sat, 31 Jan 2004 12:16:32 +0000 (+0000) Subject: - fixed the type punning (compilation warnings with the recent GCC). X-Git-Tag: v1.0.3~30 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=08874160c8f273e89f2fc305d8774017d7289718;p=alsa-lib.git - fixed the type punning (compilation warnings with the recent GCC). --- diff --git a/src/pcm/pcm_lfloat.c b/src/pcm/pcm_lfloat.c index c433aca6..83ab865e 100644 --- a/src/pcm/pcm_lfloat.c +++ b/src/pcm/pcm_lfloat.c @@ -110,8 +110,8 @@ void snd_pcm_lfloat_convert_integer_float(const snd_pcm_channel_area_t *dst_area int src_step, dst_step; snd_pcm_uframes_t frames1; int32_t sample = 0; - float tmp_float; - double tmp_double; + snd_tmp_float_t tmp_float; + snd_tmp_double_t tmp_double; const snd_pcm_channel_area_t *src_area = &src_areas[channel]; const snd_pcm_channel_area_t *dst_area = &dst_areas[channel]; src = snd_pcm_channel_area_addr(src_area, src_offset); @@ -154,10 +154,9 @@ void snd_pcm_lfloat_convert_float_integer(const snd_pcm_channel_area_t *dst_area char *dst; int src_step, dst_step; snd_pcm_uframes_t frames1; - int32_t sample; - int64_t sample64; - float tmp_float; - double tmp_double; + int32_t sample = 0; + snd_tmp_float_t tmp_float; + snd_tmp_double_t tmp_double; const snd_pcm_channel_area_t *src_area = &src_areas[channel]; const snd_pcm_channel_area_t *dst_area = &dst_areas[channel]; src = snd_pcm_channel_area_addr(src_area, src_offset); diff --git a/src/pcm/pcm_local.h b/src/pcm/pcm_local.h index 3a66af6e..e5ecb90c 100644 --- a/src/pcm/pcm_local.h +++ b/src/pcm/pcm_local.h @@ -787,3 +787,15 @@ int snd_pcm_hw_open_fd(snd_pcm_t **pcmp, const char *name, int fd, int mmap_emul (1U << SND_PCM_FORMAT_FLOAT_BE) | \ (1U << SND_PCM_FORMAT_FLOAT64_LE) | \ (1U << SND_PCM_FORMAT_FLOAT64_BE)) } + + +typedef union snd_tmp_float { + float f; + int32_t i; +} snd_tmp_float_t; + +typedef union snd_tmp_double { + double d; + int64_t l; +} snd_tmp_double_t; + diff --git a/src/pcm/plugin_ops.h b/src/pcm/plugin_ops.h index b7527682..e4ef8cec 100644 --- a/src/pcm/plugin_ops.h +++ b/src/pcm/plugin_ops.h @@ -720,11 +720,11 @@ static void *put32float_labels[2 * 2] = { #ifdef PUT32F_END put32f_1234_1234F: as_float(dst) = (float_t)((int32_t)sample) / (float_t)0x80000000UL; goto PUT32F_END; -put32f_1234_4321F: tmp_float = (float_t)((int32_t)sample) / (float_t)0x80000000UL; - as_u32(dst) = bswap_32(as_u32c(&tmp_float)); goto PUT32F_END; +put32f_1234_4321F: tmp_float.f = (float_t)((int32_t)sample) / (float_t)0x80000000UL; + as_u32(dst) = bswap_32(tmp_float.i); goto PUT32F_END; put32f_1234_1234D: as_double(dst) = (double_t)((int32_t)sample) / (double_t)0x80000000UL; goto PUT32F_END; -put32f_1234_4321D: tmp_double = (double_t)((int32_t)sample) / (double_t)0x80000000UL; - as_u64(dst) = bswap_64(as_u64c(&tmp_double)); goto PUT32F_END; +put32f_1234_4321D: tmp_double.d = (double_t)((int32_t)sample) / (double_t)0x80000000UL; + as_u64(dst) = bswap_64(tmp_double.l); goto PUT32F_END; #endif #ifdef GET32F_LABELS @@ -738,39 +738,37 @@ static void *get32float_labels[2 * 2] = { #endif #ifdef GET32F_END -get32f_1234F_1234: tmp_float = as_floatc(src); - if (tmp_float >= 1.0) +get32f_1234F_1234: tmp_float.f = as_floatc(src); + if (tmp_float.f >= 1.0) sample = 0x7fffffff; - else if (tmp_float <= -1.0) + else if (tmp_float.f <= -1.0) sample = 0x80000000; else - sample = (int32_t)(tmp_float * (float_t)0x80000000UL); + sample = (int32_t)(tmp_float.f * (float_t)0x80000000UL); goto GET32F_END; -get32f_4321F_1234: sample = bswap_32(as_u32c(src)); - tmp_float = as_floatc(&sample); - if (tmp_float >= 1.0) +get32f_4321F_1234: tmp_float.i = bswap_32(as_u32c(src)); + if (tmp_float.f >= 1.0) sample = 0x7fffffff; - else if (tmp_float <= -1.0) + else if (tmp_float.f <= -1.0) sample = 0x80000000; else - sample = (int32_t)(tmp_float * (float_t)0x80000000UL); + sample = (int32_t)(tmp_float.f * (float_t)0x80000000UL); goto GET32F_END; -get32f_1234D_1234: tmp_double = as_doublec(src); - if (tmp_double >= 1.0) +get32f_1234D_1234: tmp_double.d = as_doublec(src); + if (tmp_double.d >= 1.0) sample = 0x7fffffff; - else if (tmp_double <= -1.0) + else if (tmp_double.d <= -1.0) sample = 0x80000000; else - sample = (int32_t)(tmp_double * (double_t)0x80000000UL); + sample = (int32_t)(tmp_double.d * (double_t)0x80000000UL); goto GET32F_END; -get32f_4321D_1234: sample64 = bswap_64(as_u64c(src)); - tmp_double = as_doublec(&sample); - if (tmp_double >= 1.0) +get32f_4321D_1234: tmp_double.l = bswap_64(as_u64c(src)); + if (tmp_double.d >= 1.0) sample = 0x7fffffff; - else if (tmp_double <= -1.0) + else if (tmp_double.d <= -1.0) sample = 0x80000000; else - sample = (int32_t)(tmp_double * (double_t)0x80000000UL); + sample = (int32_t)(tmp_double.d * (double_t)0x80000000UL); goto GET32F_END; #endif