[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 12628] PowerPC での Atomic な関数 ( Load-Link/Store-Conditional)



  高橋(智)です。
  本日の読書会お疲れ様でした。
  宿題となりました「Atomicな関数」の確認の件です。


  Windows APIには、
   http://msdn2.microsoft.com/en-us/library/ms683614.aspx
などにありますように
  InterlockedIncrementやInterlockedCompareExchangeがあります。
  Intel(IA)の命令は馴染みがあるでしょうから、とりあえずデバッガで覗くのは置いておいて...


  先に、PowerPCでテストしてみました。
  環境は、PowerPC G4, MacOSX10.3.9 (Darwin 7.9.0) です。
  まず、MacOSXでは、
    http://www.cocoabuilder.com/archive/message/cocoa/2002/6/23/56690
で紹介されているように IncrementAtomic や CompareAndSwap のような関数が公開されています。
  ヘッダの場所は
  /System/Library/Frameworks/CoreServices.framework/Versions/Current/Frameworks/
CarbonCore.framework/Versions/Current/Headers/DriverSynchronization.h
です。
  以下のようなコードを書きました。
  --------------------------------------------  
  #include <CoreServices/CoreServices.h>
  

int main (int argc, const char * argv[]) {
    SInt32 x = 99;

    IncrementAtomic(&x);

    fprintf(stdout, "x=%d\n", x);

    return 0;

  }

  --------------------------------------------  

  これをXcodeでビルド&実行して、アセンブラで覗きました。
  すると...
  [Load-Link/Store-Conditional]
    http://ja.wikipedia.org/wiki/Load-Link/Store-Conditional
に紹介されているような「lwarx/stwcx」命令のところまで来ました。
  画像として添付しましたのでご覧ください。


-- 
高橋智宏
  Java読書会( http://www.javareading.com/bof/ )

JPEG image