File: 
 
[RetroPC.NET] / 
np2 / 
i386c / 
ia32 / 
ia32weak.txt
 Revision 
1.3: 
download - view: 
text, 
annotated - 
select for diffs
Wed Mar 24 23:36:03 2004 JST (21 years, 7 months ago) by 
monaka
Branches: 
MAIN
CVS tags: 
VER_0_82_x64,
VER_0_82,
VER_0_81A,
VER_0_81,
VER_0_80,
VER_0_79,
VER_0_78,
VER_0_77,
VER_0_76,
HEAD
note reduce number of linear memory access function parameters.
 現状では問題になっていないが、将来問題になる点。
・結局のところ…
  メモリが一番スピードに関る、命令フェッチで毎回読む訳だし。
  ・引き数 int crw と int user_modeをどうにか一本に出来ないか?
    crw + (user_mode << 3) の形で持つ?
      →やってみました。どんなもんでしょ。
・複雑なスタック処理の問題
  pushaの esp==7,9,11,13,15の GPF(やる気しない
・repe/ne string命令
  現状、string命令中に外部割り込みを受け付けない。
  ドラッケンみたいな repのカウンタ数が長く、かつ 特定タイミングで割り込みを
  必要とするソフトで不都合が生じる。
・デバグレジスタのブレーク
  現在はDRのブレークを使用するアプリは存在しないようだ。
  もし対応するのであれば 現在の形ではなく exec_1step()を二重化し、
  シングルステップ割り込みのように ia32()で振り分け処理を行なうとよい。
・シフトマクロ
	if ((s) == 0) CPU_FLAGL |= Z_FLAG;
	if ((s) & (1 << (SIZE - 1))) CPU_FLAGL |= S_FLAG;
	if ((s) == 0) CPU_FLAGL |= Z_FLAG;
	else if ((s) & (1 << (SIZE - 1))) CPU_FLAGL |= S_FLAG;
  どっちが高速?(elseでジャンプが生まれる…)
  (所詮CPUによって変わるが) むしろ…
	if ((s) == 0) CPU_FLAGL |= Z_FLAG;
	CPU_FLAGL |= ((s) >> (SIZE - 8)) & S_FLAG;
  の方が面白い?
	x86								ARM
	cmp 	(s), 0					cmp		(s), #0
	jne		short @f				orreq	CPU_FLAGL, CPU_FLAGL, #Z_FLAG
	or		CPU_FLAGL, Z_FLAG
@@:	test	(s), 1 << (SIZE - 1)	tst		(s), #(1 << (SIZE - 1))
	je		short @f				orrne	CPU_FLAGL, CPU_FLAGL, #S_FLAG
	or		CPU_FLAGL, S_FLAG
@@:
	cmp 	(s), 0					cmp		(s), #0
	jne		short @1				orreq	CPU_FLAGL, CPU_FLAGL, #Z_FLAG
	or		CPU_FLAGL, Z_FLAG		beq		@2
	jmp		short @2
@1:	test	(s), 1 << (SIZE - 1)	tst		(s), #(1 << (SIZE - 1))
	je		short @2				orrne	CPU_FLAGL, CPU_FLAGL, #S_FLAG
	or		CPU_FLAGL, S_FLAG
@2:
	mov		reg, (s)				movs	reg, (s)
	cmp		reg, 0
	jne		short @f
	or		CPU_FLAGL, Z_FLAG		orreq	CPU_FLAGL, CPU_FLAGL, Z_FLAG
@@:	shr		reg, SIZE - 8			mov		reg, reg lsr #(SIZE - 8)
	and		reg, S_FLAG				and		reg, reg, #S_FLAG
	or		CPU_FLAGL, reg			orr		CPU_FLAGL, reg, CPU_FLAGL
RetroPC.NET-CVS <cvs@retropc.net>