Annotation of nono/m680x0/m68030fpu.h, revision 1.1.1.2

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);

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.