Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
mpd
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Иван Мажукин
mpd
Commits
1dd1a705
Commit
1dd1a705
authored
Oct 15, 2013
by
Max Kellermann
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
gcc.h: major update
Copy the according file from another project (i.e. XCSoar). This will allow copying more code more easily.
parent
e4e80ff0
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
163 additions
and
101 deletions
+163
-101
Client.hxx
src/Client.hxx
+1
-1
Log.hxx
src/Log.hxx
+8
-8
gcc.h
src/gcc.h
+129
-67
PcmChannels.cxx
src/pcm/PcmChannels.cxx
+18
-18
PcmFormat.cxx
src/pcm/PcmFormat.cxx
+6
-6
Result.hxx
src/protocol/Result.hxx
+1
-1
No files found.
src/Client.hxx
View file @
1dd1a705
...
...
@@ -72,7 +72,7 @@ void client_vprintf(Client *client, const char *fmt, va_list args);
/**
* Write a printf-like formatted string to the client.
*/
gcc_
fprintf
gcc_
printf
(
2
,
3
)
void
client_printf
(
Client
*
client
,
const
char
*
fmt
,
...);
...
...
src/Log.hxx
View file @
1dd1a705
...
...
@@ -43,7 +43,7 @@ enum class LogLevel {
void
Log
(
const
Domain
&
domain
,
LogLevel
level
,
const
char
*
msg
);
gcc_
fprintf_
gcc_
printf
(
3
,
4
)
void
LogFormat
(
const
Domain
&
domain
,
LogLevel
level
,
const
char
*
fmt
,
...);
...
...
@@ -53,7 +53,7 @@ LogDebug(const Domain &domain, const char *msg)
Log
(
domain
,
LogLevel
::
DEBUG
,
msg
);
}
gcc_
fprintf
gcc_
printf
(
2
,
3
)
void
FormatDebug
(
const
Domain
&
domain
,
const
char
*
fmt
,
...);
...
...
@@ -63,7 +63,7 @@ LogInfo(const Domain &domain, const char *msg)
Log
(
domain
,
LogLevel
::
INFO
,
msg
);
}
gcc_
fprintf
gcc_
printf
(
2
,
3
)
void
FormatInfo
(
const
Domain
&
domain
,
const
char
*
fmt
,
...);
...
...
@@ -73,7 +73,7 @@ LogWarning(const Domain &domain, const char *msg)
Log
(
domain
,
LogLevel
::
WARNING
,
msg
);
}
gcc_
fprintf
gcc_
printf
(
2
,
3
)
void
FormatWarning
(
const
Domain
&
domain
,
const
char
*
fmt
,
...);
...
...
@@ -83,7 +83,7 @@ LogError(const Domain &domain, const char *msg)
Log
(
domain
,
LogLevel
::
ERROR
,
msg
);
}
gcc_
fprintf
gcc_
printf
(
2
,
3
)
void
FormatError
(
const
Domain
&
domain
,
const
char
*
fmt
,
...);
...
...
@@ -93,7 +93,7 @@ LogError(const Error &error);
void
LogError
(
const
Error
&
error
,
const
char
*
msg
);
gcc_
fprintf
gcc_
printf
(
2
,
3
)
void
FormatError
(
const
Error
&
error
,
const
char
*
fmt
,
...);
...
...
@@ -103,11 +103,11 @@ LogErrno(const Domain &domain, int e, const char *msg);
void
LogErrno
(
const
Domain
&
domain
,
const
char
*
msg
);
gcc_
fprintf_
gcc_
printf
(
3
,
4
)
void
FormatErrno
(
const
Domain
&
domain
,
int
e
,
const
char
*
fmt
,
...);
gcc_
fprintf
gcc_
printf
(
2
,
3
)
void
FormatErrno
(
const
Domain
&
domain
,
const
char
*
fmt
,
...);
...
...
src/gcc.h
View file @
1dd1a705
/*
* Copyright (C) 2003-201
1
The Music Player Daemon Project
* Copyright (C) 2003-201
3
The Music Player Daemon Project
* http://www.musicpd.org
*
* This program is free software; you can redistribute it and/or modify
...
...
@@ -21,92 +21,154 @@
#define MPD_GCC_H
#define GCC_CHECK_VERSION(major, minor) \
(defined(__GNUC__) && \
(__GNUC__ > (major) || \
(__GNUC__ == (major) && __GNUC_MINOR__ >= (minor))))
(defined(__GNUC__) && \
(__GNUC__ > (major) || (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor))))
/* this allows us to take advantage of special gcc features while still
* allowing other compilers to compile:
*
* example taken from: http://rlove.org/log/2005102601
*/
#ifdef __GNUC__
#define GCC_VERSION (__GNUC__ * 10000 \
+ __GNUC_MINOR__ * 100 \
+ __GNUC_PATCHLEVEL__)
#else
#define GCC_VERSION 0
#endif
#ifdef __clang__
# define CLANG_VERSION (__clang_major__ * 10000 \
+ __clang_minor__ * 100 \
+ __clang_patchlevel__)
# if __clang_major__ < 3
# error Sorry, your clang version is too old. You need at least version 3.1.
# endif
#elif defined(__GNUC__)
# if !GCC_CHECK_VERSION(4,6)
# error Sorry, your gcc version is too old. You need at least version 4.6.
# endif
#else
# warning Untested compiler. Use at your own risk!
#endif
#if GCC_CHECK_VERSION(4,0)
/* GCC 4.x */
#define gcc_const __attribute__((const))
#define gcc_deprecated __attribute__((deprecated))
#define gcc_may_alias __attribute__((may_alias))
#define gcc_malloc __attribute__((malloc))
#define gcc_noreturn __attribute__((noreturn))
#define gcc_packed __attribute__((packed))
#define gcc_printf(a,b) __attribute__((format(printf, a, b)))
#define gcc_pure __attribute__((pure))
#define gcc_sentinel __attribute__((sentinel))
#define gcc_unused __attribute__((unused))
#define gcc_warn_unused_result __attribute__((warn_unused_result))
#define gcc_nonnull(...) __attribute__((nonnull(__VA_ARGS__)))
#define gcc_nonnull_all __attribute__((nonnull))
#define gcc_likely(x) __builtin_expect (!!(x), 1)
#define gcc_unlikely(x) __builtin_expect (!!(x), 0)
#if GCC_CHECK_VERSION(3,0)
# define gcc_const __attribute__((const))
# define gcc_pure __attribute__((pure))
# define gcc_malloc __attribute__((malloc))
# define gcc_noreturn __attribute__((noreturn))
# define gcc_must_check __attribute__ ((warn_unused_result))
# define gcc_packed __attribute__ ((packed))
/* these are very useful for type checking */
# define gcc_printf __attribute__ ((format(printf,1,2)))
# define gcc_fprintf __attribute__ ((format(printf,2,3)))
# define gcc_fprintf_ __attribute__ ((format(printf,3,4)))
# define gcc_fprintf__ __attribute__ ((format(printf,4,5)))
# define gcc_scanf __attribute__ ((format(scanf,1,2)))
# define gcc_used __attribute__ ((used))
# define gcc_unused __attribute__((unused))
# define gcc_warn_unused_result __attribute__((warn_unused_result))
/* # define inline inline __attribute__ ((always_inline)) */
# define gcc_noinline __attribute__ ((noinline))
# define gcc_nonnull(...) __attribute__((nonnull(__VA_ARGS__)))
# define gcc_nonnull_all __attribute__((nonnull))
# define gcc_likely(x) __builtin_expect (!!(x), 1)
# define gcc_unlikely(x) __builtin_expect (!!(x), 0)
#define gcc_aligned(n) __attribute__((aligned(n)))
#define gcc_visibility_hidden __attribute__((visibility("hidden")))
#define gcc_visibility_default __attribute__((visibility("default")))
#define gcc_always_inline __attribute__((always_inline))
#else
# define gcc_unused
# define gcc_const
# define gcc_pure
# define gcc_malloc
# define gcc_noreturn
# define gcc_must_check
# define gcc_packed
# define gcc_printf
# define gcc_fprintf
# define gcc_fprintf_
# define gcc_fprintf__
# define gcc_scanf
# define gcc_used
# define gcc_unused
# define gcc_warn_unused_result
/* # define inline */
# define gcc_noinline
# define gcc_nonnull(...)
# define gcc_nonnull_all
# define gcc_likely(x) (x)
# define gcc_unlikely(x) (x)
/* generic C compiler */
#define gcc_const
#define gcc_deprecated
#define gcc_may_alias
#define gcc_malloc
#define gcc_noreturn
#define gcc_packed
#define gcc_printf(a,b)
#define gcc_pure
#define gcc_sentinel
#define gcc_unused
#define gcc_warn_unused_result
#define gcc_nonnull(...)
#define gcc_nonnull_all
#define gcc_likely(x) (x)
#define gcc_unlikely(x) (x)
#define gcc_aligned(n)
#define gcc_visibility_hidden
#define gcc_visibility_default
#define gcc_always_inline inline
#endif
#if defined(__GNUC__) || defined(__clang__)
#define gcc_unreachable() __builtin_unreachable()
#if GCC_CHECK_VERSION(4,3)
#define gcc_hot __attribute__((hot))
#define gcc_cold __attribute__((cold))
#else
/* ! GCC_UNUSED >= 40300 */
#define gcc_hot
#define gcc_cold
#endif
/* ! GCC_UNUSED >= 40300 */
#if GCC_CHECK_VERSION(4,6) && !defined(__clang__)
#define gcc_flatten __attribute__((flatten))
#else
#define gcc_
unreachable()
#define gcc_
flatten
#endif
#ifdef __cplusplus
#ifdef __GNUC__
#ifndef __cplusplus
/* plain C99 has "restrict" */
#define gcc_restrict restrict
#elif GCC_CHECK_VERSION(4,0)
/* "__restrict__" is a GCC extension for C++ */
#define restrict __restrict__
#define
gcc_
restrict __restrict__
#else
/* disable it on other compilers */
#define restrict
#define
gcc_
restrict
#endif
#if !defined(__clang__) && defined(__GNUC__) && !GCC_CHECK_VERSION(4,6)
#error Your gcc version is too old. MPD requires gcc 4.6 or newer.
#
endif
/* C++11 features */
#
if defined(__cplusplus)
/* support for C++11 "override" was added in gcc 4.7 */
#if !defined(__clang__) &&
defined(__GNUC__) &&
!GCC_CHECK_VERSION(4,7)
#if !defined(__clang__) && !GCC_CHECK_VERSION(4,7)
#define override
#define final
#endif
#if defined(__clang__) || GCC_CHECK_VERSION(4,8)
#define gcc_alignas(T, fallback) alignas(T)
#else
#define gcc_alignas(T, fallback) gcc_aligned(fallback)
#endif
#endif
#endif
/* MPD_GCC_H */
#ifndef __has_feature
// define dummy macro for non-clang compilers
#define __has_feature(x) 0
#endif
#if __has_feature(attribute_unused_on_fields)
#define gcc_unused_field gcc_unused
#else
#define gcc_unused_field
#endif
#if defined(__GNUC__) || defined(__clang__)
#define gcc_unreachable() __builtin_unreachable()
#else
#define gcc_unreachable()
#endif
#endif
src/pcm/PcmChannels.cxx
View file @
1dd1a705
...
...
@@ -38,9 +38,9 @@ MonoToStereo(D dest, S src, S end)
}
static
void
pcm_convert_channels_16_2_to_1
(
int16_t
*
restrict
dest
,
const
int16_t
*
restrict
src
,
const
int16_t
*
restrict
src_end
)
pcm_convert_channels_16_2_to_1
(
int16_t
*
gcc_
restrict
dest
,
const
int16_t
*
gcc_
restrict
src
,
const
int16_t
*
gcc_
restrict
src_end
)
{
while
(
src
<
src_end
)
{
int32_t
a
=
*
src
++
,
b
=
*
src
++
;
...
...
@@ -50,10 +50,10 @@ pcm_convert_channels_16_2_to_1(int16_t *restrict dest,
}
static
void
pcm_convert_channels_16_n_to_2
(
int16_t
*
restrict
dest
,
pcm_convert_channels_16_n_to_2
(
int16_t
*
gcc_
restrict
dest
,
unsigned
src_channels
,
const
int16_t
*
restrict
src
,
const
int16_t
*
restrict
src_end
)
const
int16_t
*
gcc_
restrict
src
,
const
int16_t
*
gcc_
restrict
src_end
)
{
unsigned
c
;
...
...
@@ -101,9 +101,9 @@ pcm_convert_channels_16(PcmBuffer &buffer,
}
static
void
pcm_convert_channels_24_2_to_1
(
int32_t
*
restrict
dest
,
const
int32_t
*
restrict
src
,
const
int32_t
*
restrict
src_end
)
pcm_convert_channels_24_2_to_1
(
int32_t
*
gcc_
restrict
dest
,
const
int32_t
*
gcc_
restrict
src
,
const
int32_t
*
gcc_
restrict
src_end
)
{
while
(
src
<
src_end
)
{
int32_t
a
=
*
src
++
,
b
=
*
src
++
;
...
...
@@ -113,10 +113,10 @@ pcm_convert_channels_24_2_to_1(int32_t *restrict dest,
}
static
void
pcm_convert_channels_24_n_to_2
(
int32_t
*
restrict
dest
,
pcm_convert_channels_24_n_to_2
(
int32_t
*
gcc_
restrict
dest
,
unsigned
src_channels
,
const
int32_t
*
restrict
src
,
const
int32_t
*
restrict
src_end
)
const
int32_t
*
gcc_
restrict
src
,
const
int32_t
*
gcc_
restrict
src_end
)
{
unsigned
c
;
...
...
@@ -165,9 +165,9 @@ pcm_convert_channels_24(PcmBuffer &buffer,
}
static
void
pcm_convert_channels_32_2_to_1
(
int32_t
*
restrict
dest
,
const
int32_t
*
restrict
src
,
const
int32_t
*
restrict
src_end
)
pcm_convert_channels_32_2_to_1
(
int32_t
*
gcc_
restrict
dest
,
const
int32_t
*
gcc_
restrict
src
,
const
int32_t
*
gcc_
restrict
src_end
)
{
while
(
src
<
src_end
)
{
int64_t
a
=
*
src
++
,
b
=
*
src
++
;
...
...
@@ -228,9 +228,9 @@ pcm_convert_channels_32(PcmBuffer &buffer,
}
static
void
pcm_convert_channels_float_2_to_1
(
float
*
restrict
dest
,
const
float
*
restrict
src
,
const
float
*
restrict
src_end
)
pcm_convert_channels_float_2_to_1
(
float
*
gcc_
restrict
dest
,
const
float
*
gcc_
restrict
src
,
const
float
*
gcc_
restrict
src_end
)
{
while
(
src
<
src_end
)
{
double
a
=
*
src
++
,
b
=
*
src
++
;
...
...
src/pcm/PcmFormat.cxx
View file @
1dd1a705
...
...
@@ -195,9 +195,9 @@ pcm_convert_16_to_24(int32_t *out, const int16_t *in, const int16_t *in_end)
}
static
void
pcm_convert_32_to_24
(
int32_t
*
restrict
out
,
const
int32_t
*
restrict
in
,
const
int32_t
*
restrict
in_end
)
pcm_convert_32_to_24
(
int32_t
*
gcc_
restrict
out
,
const
int32_t
*
gcc_
restrict
in
,
const
int32_t
*
gcc_
restrict
in_end
)
{
while
(
in
<
in_end
)
*
out
++
=
*
in
++
>>
8
;
...
...
@@ -300,9 +300,9 @@ pcm_convert_16_to_32(int32_t *out, const int16_t *in, const int16_t *in_end)
}
static
void
pcm_convert_24_to_32
(
int32_t
*
restrict
out
,
const
int32_t
*
restrict
in
,
const
int32_t
*
restrict
in_end
)
pcm_convert_24_to_32
(
int32_t
*
gcc_
restrict
out
,
const
int32_t
*
gcc_
restrict
in
,
const
int32_t
*
gcc_
restrict
in_end
)
{
while
(
in
<
in_end
)
*
out
++
=
*
in
++
<<
8
;
...
...
src/protocol/Result.hxx
View file @
1dd1a705
...
...
@@ -38,7 +38,7 @@ void
command_error_v
(
Client
*
client
,
enum
ack
error
,
const
char
*
fmt
,
va_list
args
);
gcc_
fprintf_
gcc_
printf
(
3
,
4
)
void
command_error
(
Client
*
client
,
enum
ack
error
,
const
char
*
fmt
,
...);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment