smpc.h: remove dependency on c++ features
This commit is contained in:
parent
2e4d2775b7
commit
a4b1ad6eb3
167
smpc.h
167
smpc.h
@ -1,154 +1,12 @@
|
||||
#include "type.h"
|
||||
|
||||
struct ireg {
|
||||
reg8 _res0;
|
||||
reg8 IREG0;
|
||||
reg8 _res1;
|
||||
reg8 IREG1;
|
||||
reg8 _res2;
|
||||
reg8 IREG2;
|
||||
reg8 _res3;
|
||||
reg8 IREG3;
|
||||
reg8 _res4;
|
||||
reg8 IREG4;
|
||||
reg8 _res5;
|
||||
reg8 IREG5;
|
||||
reg8 _res6;
|
||||
reg8 IREG6;
|
||||
|
||||
inline constexpr reg8 & operator[](uint32_t i)
|
||||
{
|
||||
switch (i) {
|
||||
default:
|
||||
case 0: return IREG0;
|
||||
case 1: return IREG1;
|
||||
case 2: return IREG2;
|
||||
case 3: return IREG3;
|
||||
case 4: return IREG4;
|
||||
case 5: return IREG5;
|
||||
case 6: return IREG6;
|
||||
}
|
||||
};
|
||||
struct ioreg {
|
||||
reg8 _res;
|
||||
reg8 val;
|
||||
};
|
||||
|
||||
static_assert((sizeof (struct ireg)) == 14);
|
||||
static_assert((offsetof (struct ireg, IREG0)) == 0x1);
|
||||
static_assert((offsetof (struct ireg, IREG1)) == 0x3);
|
||||
static_assert((offsetof (struct ireg, IREG6)) == 0xd);
|
||||
|
||||
|
||||
struct oreg {
|
||||
reg8 _res24;
|
||||
reg8 OREG0;
|
||||
reg8 _res25;
|
||||
reg8 OREG1;
|
||||
reg8 _res26;
|
||||
reg8 OREG2;
|
||||
reg8 _res27;
|
||||
reg8 OREG3;
|
||||
reg8 _res28;
|
||||
reg8 OREG4;
|
||||
reg8 _res29;
|
||||
reg8 OREG5;
|
||||
reg8 _res30;
|
||||
reg8 OREG6;
|
||||
reg8 _res31;
|
||||
reg8 OREG7;
|
||||
reg8 _res32;
|
||||
reg8 OREG8;
|
||||
reg8 _res33;
|
||||
reg8 OREG9;
|
||||
reg8 _res34;
|
||||
reg8 OREG10;
|
||||
reg8 _res35;
|
||||
reg8 OREG11;
|
||||
reg8 _res36;
|
||||
reg8 OREG12;
|
||||
reg8 _res37;
|
||||
reg8 OREG13;
|
||||
reg8 _res38;
|
||||
reg8 OREG14;
|
||||
reg8 _res39;
|
||||
reg8 OREG15;
|
||||
reg8 _res40;
|
||||
reg8 OREG16;
|
||||
reg8 _res41;
|
||||
reg8 OREG17;
|
||||
reg8 _res42;
|
||||
reg8 OREG18;
|
||||
reg8 _res43;
|
||||
reg8 OREG19;
|
||||
reg8 _res44;
|
||||
reg8 OREG20;
|
||||
reg8 _res45;
|
||||
reg8 OREG21;
|
||||
reg8 _res46;
|
||||
reg8 OREG22;
|
||||
reg8 _res47;
|
||||
reg8 OREG23;
|
||||
reg8 _res48;
|
||||
reg8 OREG24;
|
||||
reg8 _res49;
|
||||
reg8 OREG25;
|
||||
reg8 _res50;
|
||||
reg8 OREG26;
|
||||
reg8 _res51;
|
||||
reg8 OREG27;
|
||||
reg8 _res52;
|
||||
reg8 OREG28;
|
||||
reg8 _res53;
|
||||
reg8 OREG29;
|
||||
reg8 _res54;
|
||||
reg8 OREG30;
|
||||
reg8 _res55;
|
||||
reg8 OREG31;
|
||||
|
||||
inline constexpr reg8 const& operator[](uint32_t i) const
|
||||
{
|
||||
switch (i) {
|
||||
default:
|
||||
case 0: return OREG0;
|
||||
case 1: return OREG1;
|
||||
case 2: return OREG2;
|
||||
case 3: return OREG3;
|
||||
case 4: return OREG4;
|
||||
case 5: return OREG5;
|
||||
case 6: return OREG6;
|
||||
case 7: return OREG7;
|
||||
case 8: return OREG8;
|
||||
case 9: return OREG9;
|
||||
case 10: return OREG10;
|
||||
case 11: return OREG11;
|
||||
case 12: return OREG12;
|
||||
case 13: return OREG13;
|
||||
case 14: return OREG14;
|
||||
case 15: return OREG15;
|
||||
case 16: return OREG16;
|
||||
case 17: return OREG17;
|
||||
case 18: return OREG18;
|
||||
case 19: return OREG19;
|
||||
case 20: return OREG20;
|
||||
case 21: return OREG21;
|
||||
case 22: return OREG22;
|
||||
case 23: return OREG23;
|
||||
case 24: return OREG24;
|
||||
case 25: return OREG25;
|
||||
case 26: return OREG26;
|
||||
case 27: return OREG27;
|
||||
case 28: return OREG28;
|
||||
case 29: return OREG29;
|
||||
case 30: return OREG30;
|
||||
case 31: return OREG31;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
static_assert((sizeof (struct oreg)) == 64);
|
||||
static_assert((offsetof (struct oreg, OREG0)) == 0x1);
|
||||
static_assert((offsetof (struct oreg, OREG1)) == 0x3);
|
||||
|
||||
struct smpc_reg {
|
||||
struct ireg ireg;
|
||||
struct ioreg IREG[7];
|
||||
reg8 _res7;
|
||||
reg8 _res8;
|
||||
reg8 _res9;
|
||||
@ -167,7 +25,7 @@ struct smpc_reg {
|
||||
reg8 _res22;
|
||||
reg8 _res23;
|
||||
reg8 COMREG;
|
||||
struct oreg oreg;
|
||||
struct ioreg OREG[32];
|
||||
reg8 _res56;
|
||||
reg8 SR;
|
||||
reg8 _res57;
|
||||
@ -202,16 +60,21 @@ struct smpc_reg {
|
||||
reg8 EXLE;
|
||||
};
|
||||
|
||||
static_assert((sizeof (smpc_reg)) == 0x80);
|
||||
static_assert((offsetof (struct smpc_reg, oreg.OREG0)) == 0x21);
|
||||
static_assert((offsetof (struct smpc_reg, oreg.OREG1)) == 0x23);
|
||||
static_assert((offsetof (struct smpc_reg, oreg.OREG31)) == 0x5f);
|
||||
static_assert((sizeof (struct smpc_reg)) == 0x80);
|
||||
static_assert((sizeof (smpc_reg().IREG)) == 14);
|
||||
static_assert((sizeof (smpc_reg().OREG)) == 64);
|
||||
static_assert((offsetof (struct smpc_reg, IREG[0].val)) == 0x1);
|
||||
static_assert((offsetof (struct smpc_reg, IREG[1].val)) == 0x3);
|
||||
static_assert((offsetof (struct smpc_reg, IREG[6].val)) == 0xd);
|
||||
static_assert((offsetof (struct smpc_reg, OREG[0].val)) == 0x21);
|
||||
static_assert((offsetof (struct smpc_reg, OREG[1].val)) == 0x23);
|
||||
static_assert((offsetof (struct smpc_reg, OREG[31].val)) == 0x5f);
|
||||
static_assert((offsetof (struct smpc_reg, COMREG)) == 0x1f);
|
||||
static_assert((offsetof (struct smpc_reg, SR)) == 0x61);
|
||||
static_assert((offsetof (struct smpc_reg, SF)) == 0x63);
|
||||
|
||||
struct smpc {
|
||||
smpc_reg reg;
|
||||
struct smpc_reg reg;
|
||||
};
|
||||
|
||||
extern struct smpc smpc __asm("smpc");
|
||||
|
Loading…
x
Reference in New Issue
Block a user