[Freescale MPC]同步指令eieio、isync、sync简介

本文详细介绍了Freescale的MPC系列处理器中的指令eieio、isync及sync的作用与应用场景。eieio用于确保I/O操作按顺序执行,避免CPU优化导致的顺序混乱。isync用于在指令内容变化时进行同步操作。sync则确保所有先前指令执行完毕后再继续执行后续指令。
Freescale 的MPC系列提供同步指令eieio、isync、sync,以及lwarx(Load Word and Reserve Indexed) 、stwcx(Store Word Conditional Indexed)
更多信息最好参看指令手册

指令eieio为强制I/O操作顺序执行指令,将Load和Store分成2个集合,防止cpu乱序发射时不按照源代码指定的顺序执行IO指令。
复制代码
  1.     while(TDRE == 0)
  2.     TDR = char1;
  3.     asm("eieio");
  4.     while(TDRE == 0);
  5.     TDR = char2;


上例中I/O设备处于一个外部存储器空间,TDR为发送寄存器,TDRE为发送状态位。当TDRE为1时,表示发送寄存器为空,程序可以将参数写入发送寄存器,否则不允许发送。
这里需要依次将char1、 char2发送,如果不使用eieio强制I/O顺序,就可能因为PowerPC的优化导致Load、Store顺序混乱导致程序错误。

isync为同步操作指令。isync在指令完成时,执行同步,在新的内容下重载指令队列。isync指令在内容发生变化时使用,如当允许指令缓存或在存取没有结束但执行同步时使用。
复制代码
  1. lis    r29,0x0200
  2. msptr    IC_CST,r29
  3. isync


在例子中,第一行和第二行允许指令缓存。此时,指令队列有多个指令,但都不在指令缓存里,因为之前指令缓存未打开。指令isync可以同步指令队列到缓存。


sync是强制同步指令,确保编译进程序的,在sync指令之前的所有指令都被执行完毕之后才继续执行后续指令。例如,要处理器进入低功耗模式前,应该先sync完成之前的所有指令。

原http://www.powerpcdev.net/read.php?tid=8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值