|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.