From a4b1ad6eb3a931bacf3115981b79e0845433c5a7 Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Fri, 23 Jun 2023 10:05:57 +0000 Subject: [PATCH] smpc.h: remove dependency on c++ features --- smpc.h | 167 ++++++--------------------------------------------------- 1 file changed, 15 insertions(+), 152 deletions(-) diff --git a/smpc.h b/smpc.h index 8cb9b67..39c6105 100644 --- a/smpc.h +++ b/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");