Annotation of nono/m88xx0/m88100acc.h, revision 1.1.1.2

1.1       root        1: //
                      2: // nono
                      3: // Copyright (C) 2020 nono project
                      4: // Licensed under nono-license.txt
                      5: //
                      6: 
                      7: // 実行系とデバッガで演算器を共有したい
                      8: 
                      9: #pragma once
                     10: 
                     11: // 命令フィールドの取り出し
                     12: #define m88100opf_D(x)         (((x) >> 21) & 0x1f)
                     13: #define m88100opf_S1(x)                (((x) >> 16) & 0x1f)
                     14: #define m88100opf_S2(x)                ( (x)        & 0x1f)
                     15: #define m88100opf_CR(x)                (((x) >>  5) & 0x3f)
                     16: #define m88100opf_B5(x)                m88100opf_D(x)
                     17: #define m88100opf_M5(x)                m88100opf_D(x)
                     18: #define m88100opf_W5(x)                m88100opf_CR(x)
                     19: #define m88100opf_O5(x)                m88100opf_S2(x)
                     20: #define m88100opf_IMM16(x)     ((x) & 0x0000ffffU)
                     21: #define m88100opf_VEC9(x)      ((x) & 0x000001ffU)
1.1.1.2 ! root       22: // FP フィールド
        !            23: #define m88100opf_FP_T1(x)     (((x) >> 9) & 3)
        !            24: #define m88100opf_FP_T2(x)     (((x) >> 7) & 3)
        !            25: #define m88100opf_FP_TD(x)     (((x) >> 5) & 3)
1.1       root       26: 
                     27: // cmp のやつ
                     28: static inline uint32
                     29: acc_cmp(uint32 a, uint32 b)
                     30: {
                     31:        uint32 rv = 0;
                     32:        if (a >= b) rv |= (1 << 11);
                     33:        if (a <  b) rv |= (1 << 10);
                     34:        if (a <= b) rv |= (1 << 9);
                     35:        if (a >  b) rv |= (1 << 8);
                     36:        if ((int32)a >= (int32)b) rv |= (1 << 7);
                     37:        if ((int32)a <  (int32)b) rv |= (1 << 6);
                     38:        if ((int32)a <= (int32)b) rv |= (1 << 5);
                     39:        if ((int32)a >  (int32)b) rv |= (1 << 4);
                     40:        if ((int32)a != (int32)b) rv |= (1 << 3);
                     41:        if ((int32)a == (int32)b) rv |= (1 << 2);
                     42:        return rv;
                     43: }
1.1.1.2 ! root       44: 
        !            45: // fcmp のやつ
        !            46: static inline uint32
        !            47: acc_fcmp(double a, double b)
        !            48: {
        !            49:        uint32 rv = 0;
        !            50:        if (a <= 0 || b <= a) rv |= (1 << 11);  // ob
        !            51:        if (0 < a && a < b) rv |= (1 << 10);    // in
        !            52:        if (0 <= a && a <= b) rv |= (1 << 9);           // ib
        !            53:        if (a < 0 || b < a) rv |= (1 << 8);             // ou
        !            54: 
        !            55:        if (a >= b) rv |= (1 << 7);             // ge
        !            56:        if (a <  b) rv |= (1 << 6);             // lt
        !            57:        if (a <= b) rv |= (1 << 5);             // le
        !            58:        if (a >  b) rv |= (1 << 4);             // gt
        !            59:        if (a != b) rv |= (1 << 3);             // ne
        !            60:        if (a == b) rv |= (1 << 2);             // eq
        !            61:        if (true  ) rv |= (1 << 1);             // cp
        !            62:        if (false ) rv |= (1 << 0);             // nc
        !            63:        return rv;
        !            64: }

unix.superglobalmegacorp.com

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