[H8-ML(2025)] 右辺値の volatile 宣言(2)
From: Keiji Matsuzono <k-zono@xxxxxxxxxxxxxxxx>
Date: 2002年06月28日(金)06時12分00秒
まつぞの@しつこくってすみません です

代入文ですらない場合もテストしてみました
結論を先にいうと、H8, AVR とも OK (最適化されない)でした

他のコンパイラではどうなのでしょうか。。。
# すみません、手元にあるクロスコンパイラって GCC だけなんです

-------------------------------------------------------------
// io_read.c
// volatile 指定で最適化がされる場合があるかどうかテストする

#ifdef VOLATILE_DEFINED
volatile int count;
#else
int count;
#endif

int main(){
        int a;

         count;
         count;
         count;  // ううっ、さすがにこう書くと気持ち悪い(^^;;
        return 0;
}
---------------------------------------------------------------

$ h8300-hms-gcc -o H8_volatile_O9.S -S -O9 -DVOLATILE_DEFINED io_read.c
----------------- H8_volatile_09.S ----------------------------
;       GCC For the Hitachi H8/300
;       By Hitachi America Ltd and Cygnus Support
; -O9


        .file   "io_read.c"
        .comm _count,2
        .section .text
        .align 1
        .global _main
_main:
        push    r6
        mov.w   r7,r6
        mov.w   @_count,r2
        mov.w   @_count,r2
        mov.w   @_count,r2
        sub.w   r0,r0
        pop     r6
        rts
        .end
        .ident
"GCC: (GNU) 3.0.3"
---------------------------------------------------------------

$ avr-gcc -o AVR_volatile_O9.S -O9 -S -DVOLATILE_DEFINED io_read.c
----------------- AVR_volatile_09.S ----------------------------
        .file   "io_read.c"
        .arch avr2
__SREG__ = 0x3f
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__tmp_reg__ = 0
__zero_reg__ = 1
_PC_ = 2
        .text
.global main
        .type   main,@function
main:
/* prologue: frame size=0 */
        ldi r28,lo8(__stack - 0)
        ldi r29,hi8(__stack - 0)
        out __SP_H__,r29
        out __SP_L__,r28
/* prologue end (size=4) */
        lds r24,count
        lds r25,(count)+1
        lds r24,count
        lds r25,(count)+1
        lds r24,count
        lds r25,(count)+1
        ldi r24,lo8(0)
        ldi r25,hi8(0)
/* epilogue: frame size=0 */
__stop_progIi__:
        rjmp __stop_progIi__
/* epilogue end (size=1) */
/* function main size 19 (14) */
.Lfe1:
        .size   main,.Lfe1-main
        .comm count,2,1
/* File io_read.c: code   19 = 0x0013 (  14), prologues   4, epilogues   1 */

---------------------------------------------------------------
スレッド概略
[表示中](起点)


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]