R8C/Tiny(M12) の命令実行時間について

こんにちは,toitecです。

除算(32ビット÷32ビット)のサンプルを
改造しながら、実行時間を測定していたところ,
腑に落ちない状況がありまして,御教授下さい。

<症状>
 除算サブルーチンのメモリ配置位置をひとつ
 ズラすと,処理時間が大きく変化する.
 偶数アドレス -> 61.28μs
 奇数アドレス -> 77.28μs

<評価プログラム抜粋>

.ORG 0400h
ZHBIN:  .BLKB 16   ; 入力
ZHBOUTA:  .BLKB 16   ; H_DIVL_x 出力
; RAMはメモリダンプで見やすくするために16byte
; 単位で確保しています

X_MAIN:

X_MAIN10:
   JSR _R_MA  ; メモリファインダー
   BTSTC trjif_trjir ; 1ms経過?
   JNC X_MAIN10 ; No \,ループ

   ; テスト開始
   MOV.W ZHBIN+0\,R0 ; 入力データロード
   MOV.W ZHBIN+2\,R2
   MOV.W ZHBIN+4\,R1
   MOV.W ZHBIN+6\,R3
   BSET 3\,p1 ; 処理時間計測スタート
   JSR H_DIVL_R ; 32bit÷32bit
   BCLR 3\,p1 ; 処理時間計測エンド
   MOV.W R0\,ZHBOUTA+0
   MOV.W R2\,ZHBOUTA+2
   MOV.W A0\,ZHBOUTA+4
   MOV.W A1\,ZHBOUTA+6
   JMP.W X_MAIN

;   NOP ; 無関係なNOP
   ; 偶数/奇数設定用

H_DIVL_R:
   ENTER #1
   MOV.B #0\,A0
   MOV.B #0\,A1
   CMP.W #0\,R1
   JNE H_DIVL_R_10
   CMP.W #0\,R3
   JEQ H_DIVL_R_90
H_DIVL_R_10:
   MOV.B #32\,-1[FB]
H_DIVL_R_20:
   SHL.W #1\,R0
   ROLC.W R2
   ROLC.W A0
   ROLC.W A1
   SUB.W R1\,A0
   SBB.W R3\,A1
   BMC 0\,R0
   JC H_DIVL_R_30
   ADD.W R1\,A0
   ADC.W R3\,A1
H_DIVL_R_30:
   ADJNZ.B #-1\,-1[FB]\,H_DIVL_R_20
   FCLR Z
H_DIVL_R_90:
  EXITD

 32回のループが存在するため,1.6μsの
 倍数(20MHz:50ns×32=1.6us)で差がでるのは
 予想していたのですが,トータルで16μsの
 差は大き過ぎると感じました。
 プログラム中の,「NOP」を有効/無効にするこ
 とで,サブルーチンの配置位置を動かします。
 計測は,サブルーチン実行の前後でポート出力
 して測定しています。
 被除数と除数はRAM上にセットし,メモリファ
 インダーで自由に変更できるようにしています。
 今回は,FFFFFFFF÷AAAA で確認しました。
 0400~0403:被序数
 0404~0407:除数
 0410~0413:商
 0414~0417:余り
 
 よろしく,お願い致します。
Parents
  • チョコさん

    RL78だとRAM実行した時のクロックが読めないんですよねー。

    > クロック数は内部ROM(フラッシュ・メモリ)領域にプログラムがある場合です。
    >内部RAM領域から命令フェッチする場合,最大2倍+3クロックになります。

    G13だと、だいたいROMの2倍程度みたいですけども、奇数偶数でズレがあるみたいですね。
    8bitCPUのG10だとRAM実行でも奇数偶数の違いはないのかな?


    PS
    G10は、
    >クロック数は内部ROM(フラッシュ・メモリ)領域にプログラムがある場合です。
    >内部RAM領域から命令フェッチする場合,最大4倍+6クロックになります。
    と書いてあったので、G13の倍のクロックになるだけなんですかねー。
Reply
  • チョコさん

    RL78だとRAM実行した時のクロックが読めないんですよねー。

    > クロック数は内部ROM(フラッシュ・メモリ)領域にプログラムがある場合です。
    >内部RAM領域から命令フェッチする場合,最大2倍+3クロックになります。

    G13だと、だいたいROMの2倍程度みたいですけども、奇数偶数でズレがあるみたいですね。
    8bitCPUのG10だとRAM実行でも奇数偶数の違いはないのかな?


    PS
    G10は、
    >クロック数は内部ROM(フラッシュ・メモリ)領域にプログラムがある場合です。
    >内部RAM領域から命令フェッチする場合,最大4倍+6クロックになります。
    と書いてあったので、G13の倍のクロックになるだけなんですかねー。
Children
No Data