我想在兩個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僞
任何想法要統一呢?謝謝。
我想在兩個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僞
任何想法要統一呢?謝謝。
而是寫彙編文件,請嘗試使用GCC內部函數從C/C++源代碼。或者GCC inline asm。
而不是使用GCC內部函數只是不使用宏應該是更好的選擇;)但是,這並不是問題的答覆! – webshaker 2012-02-03 09:20:12
我使用單獨的宏定義爲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__
您可以使用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__
對於這樣的情況,我會寫一個腳本這一種形式轉換到另一個。 – BitBank 2012-02-03 14:26:32
我與@BitBank在這一個。寫一個腳本,將一個腳本轉換爲另一個腳本。或者用您自己的宏語言編寫實際的程序集,通過腳本輕鬆轉換爲您需要的任何宏語言。第一種做法可能更快,但如果您需要爲大量文件執行此操作,並且希望將其轉換爲第三種編譯器(例如RVCT),則創建自己的語言可能會更容易。 – Leo 2012-12-14 08:29:37