Mercurial > sdl-ios-xcode
view test/automated/SDL_at.h @ 5130:f2c2f0ecba5f
Fixed bug #1111
kwm@rainbow-runner.nl 2011-01-30 06:28:27 PST
Created attachment 562 [details]
Build fix with clang.
When building sdl 1.2.14 with the Clang compiler http://clang.llvm.org .
The build fails in src/video/mmx.h with the following error:
--------------------------------------------------
./src/video/SDL_RLEaccel.c:831:5: error: invalid operand for instruction
CHOOSE_BLIT(RLECLIPBLIT, alpha, fmt);
^
./src/video/SDL_RLEaccel.c:831:17: note: instantiated from:
CHOOSE_BLIT(RLECLIPBLIT, alpha, fmt);
^
./src/video/SDL_RLEaccel.c:831:5: note: instantiated from:
CHOOSE_BLIT(RLECLIPBLIT, alpha, fmt);
^
./src/video/SDL_RLEaccel.c:647:23: note: instantiated from:
blitter(2, Uint8, ALPHA_BLIT16_565MMX); \
^
./src/video/SDL_RLEaccel.c:282:4: note: instantiated from:
movq_r2m(mm3, *dstp); \
^
In file included from ./src/video/SDL_RLEaccel.c:99:
./src/video/mmx.h:379:28: note: instantiated from:
#define movq_r2m(reg, var) mmx_r2m(movq, reg, var)
^
<scratch space>:192:1: note: instantiated from:
"movq"
^
<inline asm>:1:2: note: instantiated into assembly here
movq %mm3, %dx
^
--------------------------------------------------
According to the clang developers this is a invalid inline assembly.
Using the attached patch from the last commit in the below bug report fixes the
compile.
More details from: http://llvm.org/bugs/show_bug.cgi?id=6730
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 30 Jan 2011 13:42:05 -0800 |
parents | 78db4f7ae2f3 |
children |
line wrap: on
line source
/* * Common code for automated test suite. * * Written by Edgar Simo "bobbens" * * Released under Public Domain. */ /** * @file SDL_at.h * * @brief Handles automatic testing functionality. * * The basic approach with SDL_AT is to divide the tests into what are called * test suites and test cases. Each test suite should have multiple test * cases, each test case can have multiple asserts. * * To actually test for conditions within the testcase you check asserts, if * the asserts fail the failures will be logged in the testsuite and * displayed. * * Syntax is similar to OpenGL. An example would be: * * @code * int f; // Number failed * SDL_ATinit( "My testsuite" ); * * SDL_ATbegin( "My first testcase" ); * if (!SDL_ATassert( (1+1)==2, "Trying '1+1=2'.")) * return; // Implicitly calls SDL_ATend if assert fails * SDL_ATend(); // Finish testcase * * SDL_ATbegin( "My second testcase" ); * if (!SDL_ATassert( (4/2)==2, "Trying '4/2=2'.")) * return; // Implicitly calls SDL_ATend if assert fails * SDL_ATend(); // Finish testcase * * f = SDL_ATfinish(); * @endcode * * @author Edgar Simo "bobbens" */ #ifndef _SDL_AT_H # define _SDL_AT_H enum { SDL_AT_VERBOSE, /**< Sets the verbose level. */ SDL_AT_QUIET /**< Sets quietness. */ }; /* * Suite level actions. */ /** * @brief Starts the testsuite. * * @param suite Name of the suite to start testing. */ void SDL_ATinit( const char *suite ); /** * @brief Finishes the testsuite printing out global results if verbose. * * @return 0 if no errors occurred, otherwise number of failures. */ int SDL_ATfinish (void); /** * @brief Sets a global property value. * * @param property Property to set. * @param value Value to set property to. */ void SDL_ATseti( int property, int value ); /** * @brief Gets a global property value. * * @param property Property to get. * @param[out] value Value of the property. */ void SDL_ATgeti( int property, int *value ); /* * Testcase level actions. */ /** * @brief Begins a testcase. * * @param testcase Name of the testcase to begin. */ void SDL_ATbegin( const char *testcase ); /** * @brief Checks a condition in the testcase. * * Will automatically call SDL_ATend if the condition isn't met. * * @param condition Condition to make sure is true. * @param msg Message to display for failure. * @return Returns 1 if the condition isn't met. */ int SDL_ATassert( const char *msg, int condition ); /** * @brief Checks a condition in the testcase. * * Will automatically call SDL_ATend if the condition isn't met. * * @param condition Condition to make sure is true. * @param msg Message to display for failure with printf style formatting. * @return Returns 1 if the condition isn't met. */ int SDL_ATvassert( int condition, const char *msg, ... ); /** * @brief Ends a testcase. */ void SDL_ATend (void); /* * Misc functions. */ /** * @brief Prints an error. * * @param msg printf formatted string to display. * @return Number of character printed. */ int SDL_ATprintErr( const char *msg, ... ); /** * @brief Prints some text. * * @param msg printf formatted string to display. * @return Number of character printed. */ int SDL_ATprint( const char *msg, ... ); /** * @brief Prints some verbose text. * * Verbosity levels are as follows: * * - 0 standard stdout, enabled by default * - 1 additional information * - 2 detailed information (spammy) * * @param level Level of verbosity to print at. * @param msg printf formatted string to display. * @return Number of character printed. */ int SDL_ATprintVerbose( int level, const char *msg, ... ); #endif /* _SDL_AT_H */