sh-elf-gccだと-m2aで-mbitopsオプションをbit操作命令を使ってくれるのですが
char foo;
void
bit0_set(void)
{
  foo |=1;
}これだと
0000 D103                  mov.l   .L2,r1
0002 6010                  mov.b   @r1,r0
  0004 600C                  extu.b  r0,r0
  0006 CB01                  or      #1,r0
  0008 2100                  mov.b   r0,@r1
  000a 000B                  rts
  000c 0009                  nop
こういうコードになります。
(遅延分岐がおかしいのはgccの4.8だと直っています。)
sh2a以外でもgbrがいつも0なら
 0000 D001                  mov.l   .L2,r0
0002 000B                  rts
0004 CF01                  or.b    #1,@(r0,gbr)
こういうことが出来るんじゃないかと
bitmemgbr.patch 非常に危険?
[0回]
PR