2
MIPS32 ISA定義了同步指令的格式如下:MIPS的GNU彙編程序:如何發出sync_ *指令?
SYNC (stype = 0 implied)
SYNC stype
這裏,S類型可以是SYNC_WMB(SYNC 4),SYNC_MB(SYNC 16)等 在聯彙編器,我可以使用默認同步:__asm__ volatile ("sync" ::);
。
但是,如果我喜歡寫東西__asm__ volatile ("sync 0x10" ::)
,它不會編譯:
Error: illegal operands 'sync 0x10'
相同的,如果通-mips32r2
選項GCC。
所以,問題是:如何使用GCC內聯程序集的SYNC_ *(WYNC_WMB,SYNC_MB,SYNC_ACQUIRE,...)指令?
好,恐怕不是那麼容易的,我的GCC是很新: 'MIPS-Linux的GNU-GCC(的Sourcery G ++精簡版4.2-85)4.2.1' 順便說一句,我現在還使用手動指令編碼: '#define EMIT_SYNC(stype)__asm__ volatile(「.int(%0 << 6)| 0x0f」::「n」(stype):「memory」) ;' 但這只是一個醜陋的解決方法。 – Andy 2010-08-31 06:04:47
這裏是彙編程序的版本,而不是GCC的版本。 (如果知道彙編程序的安裝位置以及它的名稱,可以使用'mips-linux-gnu-as --version'查找版本;如果不是,則在編譯GCC時使用'-v'標誌,並在輸出中尋找類似'GNU彙編程序版本N.NN'的行。) – 2010-08-31 19:30:19
看起來你是對的,我的彙編程序版本是2.18.50.20070820。謝謝,我會嘗試升級到2.20。 – Andy 2010-09-01 05:36:22