Blame src/libmpg123/abi_align.h

Packit c32a2d
/*
Packit c32a2d
	abi_align: An attempt to avoid breakage because of mixing
Packit c32a2d
	compilers with different alignment.
Packit c32a2d
Packit c32a2d
	copyright 1995-2015 by the mpg123 project
Packit c32a2d
	free software under the terms of the LGPL 2.1
Packit c32a2d
	see COPYING and AUTHORS files in distribution or http://mpg123.org
Packit c32a2d
Packit c32a2d
	There used to be code that checks alignment, but it did not really
Packit c32a2d
	work anyway. The only straw we have is putting that alignment
Packit c32a2d
	attribute to API functions.
Packit c32a2d
*/
Packit c32a2d
Packit c32a2d
#ifndef MPG123_H_ABI_ALIGN
Packit c32a2d
#define MPG123_H_ABI_ALIGN
Packit c32a2d
Packit c32a2d
#include "config.h"
Packit c32a2d
Packit c32a2d
/* ABI conformance for other compilers.
Packit c32a2d
   mpg123 needs 16byte-aligned (or more) stack for SSE and friends.
Packit c32a2d
   gcc provides that, but others don't necessarily. */
Packit c32a2d
#ifdef ABI_ALIGN_FUN
Packit c32a2d
Packit c32a2d
#ifndef attribute_align_arg
Packit c32a2d
Packit c32a2d
#if defined(__GNUC__) && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__>1)
Packit c32a2d
#    define attribute_align_arg __attribute__((force_align_arg_pointer))
Packit c32a2d
/* The gcc that can align the stack does not need the check... nor does it work with gcc 4.3+, anyway. */
Packit c32a2d
#else
Packit c32a2d
#    define attribute_align_arg
Packit c32a2d
#endif
Packit c32a2d
Packit c32a2d
#endif  /* attribute_align_arg */
Packit c32a2d
Packit c32a2d
#else /* ABI_ALIGN_FUN */
Packit c32a2d
Packit c32a2d
#define attribute_align_arg
Packit c32a2d
Packit c32a2d
#endif /* ABI_ALIGN_FUN */
Packit c32a2d
Packit c32a2d
#endif /* MPG123_H_ABI_ALIGN */