унифицировать неоновые сборки на iOS и Android - PullRequest
3 голосов
/ 03 февраля 2012

Я хочу использовать унифицированный код сборки NEON как на IOS (Xcode4.2), так и на Android (ndk r7).Но их макроопределения настолько различны:

IOS:

.macro TestMacro 3

vext.8 $ 2, $ 0, $ 1, # 1

.endm

ndk r7:

.macro TestMacro ref, источник, dst

vext.8 \ dst, \ ref, \ src, # 1

.endm

Есть идеи объединить их? Спасибо.

Ответы [ 3 ]

1 голос
/ 20 апреля 2012

Я использую отдельные определения макросов для iOS и Android

example.S

#ifdef __MACH__

; iOS
.macro TestMacro
    vext.8 $2, $0, $1, #1
.endm

#else//__MACH__

; Android NDK
.macro TestMacro ref,src,dst
    vext.8 \dst,\ref,\src, #1
.endm

#endif//__MACH__
0 голосов
/ 03 ноября 2013

Вы можете использовать препроцессор C для включения «нового» синтаксиса макроса следующим образом:

#include "macros.h"

.macro M_DEMO M3ARGS
   #define ref MARG0
   #define src MARG1
   #define dst MARG2

   vext.8 dst, ref, src, #1

   #undef ref
   #undef src
   #undef dst
.endm

, где заголовочный файл macros.h содержит:

#ifndef __MACROS_H__
#define __MACROS_H__

#ifdef __MACH__

    /*
     * iOS macro support
     */

    // Number of arguments in macro definition
    #define M0ARGS
    #define M1ARGS
    #define M2ARGS
    #define M3ARGS
    #define M4ARGS
    #define M5ARGS
    #define M6ARGS
    #define M7ARGS
    #define M8ARGS
    #define M9ARGS
    #define M10ARGS

    // Macro arguments
    #define MARG0 $0
    #define MARG1 $1
    #define MARG2 $2
    #define MARG3 $3
    #define MARG4 $4
    #define MARG5 $5
    #define MARG6 $6
    #define MARG7 $7
    #define MARG8 $8
    #define MARG9 $9

#else

    /* 
     * Android macro support
     */

    // Number of arguments in macro definition
    #define M0ARGS
    #define M1ARGS  $0
    #define M2ARGS  $0, $1
    #define M3ARGS  $0, $1, $2
    #define M4ARGS  $0, $1, $2, $3
    #define M5ARGS  $0, $1, $2, $3, $4
    #define M6ARGS  $0, $1, $2, $3, $4, $5
    #define M7ARGS  $0, $1, $2, $3, $4, $5, $6
    #define M8ARGS  $0, $1, $2, $3, $4, $5, $6, $7
    #define M9ARGS  $0, $1, $2, $3, $4, $5, $6, $7, $8
    #define M10ARGS $0, $1, $2, $3, $4, $5, $6, $7, $8, $9

    // Macro arguments
    #define MARG0 \$0
    #define MARG1 \$1
    #define MARG2 \$2
    #define MARG3 \$3
    #define MARG4 \$4
    #define MARG5 \$5
    #define MARG6 \$6
    #define MARG7 \$7
    #define MARG8 \$8
    #define MARG9 \$9

#endif

#endif // __MACROS_H__
0 голосов
/ 03 февраля 2012

Вместо того, чтобы писать файл ассемблера, попробуйте использовать встроенные функции GCC из источника C / C ++. Или GCC inline asm.

...