pureikyubu/SRC/DSP/DspAlu.h
2020-09-02 15:40:40 +03:00

63 lines
1.3 KiB
C++

#pragma once
namespace DSP
{
// Flag modify rules
enum class CFlagRules
{
None = -1,
Zero,
C1, // (Ds(39) & S(39)) | (~Dd(39) & (Ds(39) | S(39)))
C2, // (Ds(39) & ~S(39)) | (~Dd(39) & (Ds(39) | ~S(39)))
C3, // Ds(39) ^ S(15) != 0 ? (Ds(39) & S(15)) | (~Dd(39) & (Ds(39) | S(15))) : (Ds(39) & ~S(15)) | (~Dd(39) & (Ds(39) | ~S(15)))
C4, // ~Ds(39) & ~Dd(39)
C5, // Ds(39) ^ S(31) == 0 ? (Ds(39) & S(39)) | (~Dd(39) & (Ds(39) | S(39))) : (Ds(39) & ~S(39)) | (~Dd(39) & (Ds(39) | ~S(39)))
C6, // Ds(39) & ~Dd(39)
C7, // P(39) & ~D(39)
C8, // (P(39) & S(39)) | (~D(39) & (P(39) | S(39)))
};
enum class VFlagRules
{
None = -1,
Zero,
V1, // (Ds(39) & S(39) & ~Dd(39)) | (~Ds(39) & ~S(39) & Dd(39))
V2, // (Ds(39) & ~S(39) & ~Dd(39)) | (~Ds(39) & S(39) & Dd(39))
V3, // Ds(39)& Dd(39)
V4, // ~Ds(39) & Dd(39)
V5, // Dd(39)
V6, // ~P(39) & D(39)
V7, // (P(39) & S(39) & ~D(39)) | (~P(39) & ~S(39) & D(39))
V8, // Ds(39) & ~Dd(39)
};
enum class ZFlagRules
{
None = -1,
Z1, // Dd == 0
Z2, // Dd(31 - 16) == 0
Z3, // Dd(39 - 0) == 0
};
enum class NFlagRules
{
None = -1,
N1, // Dd(39)
N2, // Dd(31)
};
enum class EFlagRules
{
None = -1,
E1, // Dd(39 - 31) != (0b0'0000'0000 || 0b1'1111'1111)
};
enum class UFlagRules
{
None = -1,
U1, // ~(Dd(31) ^ Dd(30))
};
}