2012-02-03 82 views
3

我想在兩個IOS(Xcode4.2)和Android(NDK R7)使用統一NEON彙編代碼。但他們的宏定義是如此的不同:統一霓虹燈裝配和Android

IOS:

.macro僞TestMacro 3

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

.endm僞

NDK R7:

.macro僞TestMacro REF,SRC,DST

vext.8 \ DS T,\裁判,\ SRC,#1

.endm僞

任何想法要統一呢?謝謝。

+1

對於這樣的情況,我會寫一個腳本這一種形式轉換到另一個。 – BitBank 2012-02-03 14:26:32

+0

我與@BitBank在這一個。寫一個腳本,將一個腳本轉換爲另一個腳本。或者用您自己的宏語言編寫實際的程序集,通過腳本輕鬆轉換爲您需要的任何宏語言。第一種做法可能更快,但如果您需要爲大量文件執行此操作,並且希望將其轉換爲第三種編譯器(例如RVCT),則創建自己的語言可能會更容易。 – Leo 2012-12-14 08:29:37

回答

-1

而是寫彙編文件,請嘗試使用GCC內部函數從C/C++源代碼。或者GCC inline asm。

+1

而不是使用GCC內部函數只是不使用宏應該是更好的選擇;)但是,這並不是問題的答覆! – webshaker 2012-02-03 09:20:12

1

我使用單獨的宏定義爲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

您可以使用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__