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