|
|
1.1 root 1: //
2: // nono
1.1.1.2 ! root 3: // Copyright (C) 2020 nono project
! 4: // Licensed under nono-license.txt
1.1 root 5: //
6:
7: #pragma once
8:
9: #define SIZE_L (0)
10: #define SIZE_S (1)
11: #define SIZE_X (2)
12: #define SIZE_P (3)
13: #define SIZE_W (4)
14: #define SIZE_D (5)
15: #define SIZE_B (6)
16:
17: // FPU 命令の FSAVE/FRESTORE 以外のグループ全員で実行開始時に必要な処理
18: static inline void
19: fpu_op_start(m68kcpu *cpu)
20: {
21: struct fpemu *fe = &cpu->fe;
22:
23: cpu->fpu_dirty = true;
24:
25: // 現在の FPCR/FPSR を fe 構造体にコピー。
26: //
27: // fe->fe_{fpcr,fpsr} のほうはこの fpe 用の内部ワークなので破壊してよい。
28: // 命令実行の結果、FPSR レジスタの値を更新する際は fpu_upd_fpsr() を
29: // 呼ぶこと。これを使わず独自に更新する場合は fe->fe_fpframe->fpf_fpsr
30: // (こっちがレジスタ値) と fe->fe_fpsr (FPE 用) を同時に更新すること。
31: // FPCR のほうは FMOVE-to-FPCR 命令以外で変更されることはないはず。
32: fe->fe_fpcr = RegFPCR;
33: fe->fe_fpsr = RegFPSR;
34: }
35:
36: extern void fpu_init(m68kcpu *cpu);
37:
38: extern void fpu_op_fgen_reg(m68kcpu *cpu);
39: extern void fpu_op_fgen_mem(m68kcpu *cpu);
40: extern void fpu_op_fmove_b_mem(m68kcpu *cpu);
41: extern void fpu_op_fmove_w_mem(m68kcpu *cpu);
42: extern void fpu_op_fmove_l_mem(m68kcpu *cpu);
43: extern void fpu_op_fmove_s_mem(m68kcpu *cpu);
44: extern void fpu_op_fmove_d_mem(m68kcpu *cpu);
45: extern void fpu_op_fmove_x_mem(m68kcpu *cpu);
46: extern void fpu_op_fmove_p_mem(m68kcpu *cpu);
47: extern void fpu_op_fmove_ea2ctl(m68kcpu *cpu);
48: extern void fpu_op_fmovem_ea2ctl(m68kcpu *cpu);
49: extern void fpu_op_fmove_ctl2ea(m68kcpu *cpu);
50: extern void fpu_op_fmovem_ctl2ea(m68kcpu *cpu);
51: extern void fpu_op_fmovem_ea2reg(m68kcpu *cpu);
52: extern void fpu_op_fmovem_reg2ea(m68kcpu *cpu);
53: extern void fpu_op_fscc(m68kcpu *cpu);
54: extern void fpu_op_fdbcc(m68kcpu *cpu);
55: extern void fpu_op_ftrapcc_w(m68kcpu *cpu);
56: extern void fpu_op_ftrapcc_l(m68kcpu *cpu);
57: extern void fpu_op_ftrapcc(m68kcpu *cpu);
58: extern void fpu_op_fbcc_w(m68kcpu *cpu);
59: extern void fpu_op_fbcc_l(m68kcpu *cpu);
60: extern void fpu_op_fsave(m68kcpu *cpu);
61: extern void fpu_op_frestore(m68kcpu *cpu);
62: extern void fpu_op_illg(m68kcpu *cpu);
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.