Annotation of nono/exp/optestxp/optestxp_subr.h, revision 1.1

1.1     ! root        1: //
        !             2: // nono
        !             3: // Copyright (C) 2023 nono project
        !             4: // Licensed under nono-license.txt
        !             5: //
        !             6: 
        !             7: #pragma once
        !             8: 
        !             9: #include "header.h"
        !            10: #include <vector>
        !            11: 
        !            12: class hd64180flag
        !            13: {
        !            14:  public:
        !            15:        bool S {};
        !            16:        bool Z {};
        !            17:        bool H {};
        !            18:        bool PV {};
        !            19:        bool N {};
        !            20:        bool C {};
        !            21: 
        !            22:        uint8 Get() const {
        !            23:                uint8 data = 0;
        !            24:                if (S)  data |= 0x80;
        !            25:                if (Z)  data |= 0x40;
        !            26:                if (H)  data |= 0x10;
        !            27:                if (PV) data |= 0x04;
        !            28:                if (N)  data |= 0x02;
        !            29:                if (C)  data |= 0x01;
        !            30:                return data;
        !            31:        }
        !            32: };
        !            33: 
        !            34: static inline bool
        !            35: vflag_add(uint32 dst, uint32 src, uint32 res)
        !            36: {
        !            37:        uint32 v = (src ^ res) & (dst ^ res);
        !            38:        return (v & 0x80);
        !            39: }
        !            40: 
        !            41: static inline bool
        !            42: vflag_sub(uint32 dst, uint32 src, uint32 res)
        !            43: {
        !            44:        uint32 v = (src ^ dst) & (dst ^ res);
        !            45:        return (v & 0x80);
        !            46: }
        !            47: 
        !            48: static bool
        !            49: hflag_add(uint32 dst, uint32 src)
        !            50: {
        !            51:        uint32 res = (dst & 0x0f) + (src & 0x0f);
        !            52:        return (res & 0x10);
        !            53: }
        !            54: 
        !            55: static bool
        !            56: hflag_sub(uint32 dst, uint32 src)
        !            57: {
        !            58:        uint32 res = (dst & 0x0f) - (src & 0x0f);
        !            59:        return (res & 0x10);
        !            60: }
        !            61: 
        !            62: static bool
        !            63: pflag(uint32 res)
        !            64: {
        !            65:        return ((__builtin_popcount(res) & 1) == 0);
        !            66: }
        !            67: 
        !            68: extern void init(const char *name_, const char *method);
        !            69: extern void out_testset();
        !            70: extern void out_testdata_run1(uint32 dst, const hd64180flag& inflag,
        !            71:        uint32 res, const hd64180flag& flag);
        !            72: extern void out_testdata_run2(uint32 dst, const hd64180flag& inflag, uint32 src,
        !            73:        uint32 res, const hd64180flag& flag);
        !            74: extern void out(const char *fmt, ...);
        !            75: 
        !            76: extern const char *testname;
        !            77: extern int testpos;
        !            78: extern std::vector<std::string> testlist;

unix.superglobalmegacorp.com

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