Use __typeof__ to improve readability and future maintainability.


git-svn-id: svn://svn.valgrind.org/vex/trunk@2969 8f6e269a-dfd6-0310-a8e1-e2731360e62c
diff --git a/priv/main_main.c b/priv/main_main.c
index 49e644c..e8426a4 100644
--- a/priv/main_main.c
+++ b/priv/main_main.c
@@ -296,22 +296,16 @@
          mode64       = False;
          getAllocableRegs_X86 ( &n_available_real_regs,
                                 &available_real_regs );
-         isMove       = (Bool(*)(HInstr*,HReg*,HReg*)) isMove_X86Instr;
-         getRegUsage  = (void(*)(HRegUsage*,HInstr*, Bool))
-                        getRegUsage_X86Instr;
-         mapRegs      = (void(*)(HRegRemap*,HInstr*, Bool)) mapRegs_X86Instr;
-         genSpill     = (void(*)(HInstr**,HInstr**,HReg,Int,Bool))
-                        genSpill_X86;
-         genReload    = (void(*)(HInstr**,HInstr**,HReg,Int,Bool))
-                        genReload_X86;
-         directReload = (HInstr*(*)(HInstr*,HReg,Short)) directReload_X86;
-         ppInstr      = (void(*)(HInstr*, Bool)) ppX86Instr;
-         ppReg        = (void(*)(HReg)) ppHRegX86;
+         isMove       = (__typeof__(isMove)) isMove_X86Instr;
+         getRegUsage  = (__typeof__(getRegUsage)) getRegUsage_X86Instr;
+         mapRegs      = (__typeof__(mapRegs)) mapRegs_X86Instr;
+         genSpill     = (__typeof__(genSpill)) genSpill_X86;
+         genReload    = (__typeof__(genReload)) genReload_X86;
+         directReload = (__typeof__(directReload)) directReload_X86;
+         ppInstr      = (__typeof__(ppInstr)) ppX86Instr;
+         ppReg        = (__typeof__(ppReg)) ppHRegX86;
          iselSB       = iselSB_X86;
-         emit         = (Int(*)(Bool*,UChar*,Int,HInstr*,Bool,VexEndness,
-                                const void*,const void*,const void*,
-                                const void*))
-                        emit_X86Instr;
+         emit         = (__typeof__(emit)) emit_X86Instr;
          host_word_type    = Ity_I32;
          vassert(are_valid_hwcaps(VexArchX86, vta->archinfo_host.hwcaps));
          vassert(vta->archinfo_host.endness == VexEndnessLE);
@@ -321,21 +315,15 @@
          mode64      = True;
          getAllocableRegs_AMD64 ( &n_available_real_regs,
                                   &available_real_regs );
-         isMove      = (Bool(*)(HInstr*,HReg*,HReg*)) isMove_AMD64Instr;
-         getRegUsage = (void(*)(HRegUsage*,HInstr*, Bool))
-                       getRegUsage_AMD64Instr;
-         mapRegs     = (void(*)(HRegRemap*,HInstr*, Bool)) mapRegs_AMD64Instr;
-         genSpill    = (void(*)(HInstr**,HInstr**,HReg,Int,Bool))
-                       genSpill_AMD64;
-         genReload   = (void(*)(HInstr**,HInstr**,HReg,Int,Bool))
-                       genReload_AMD64;
-         ppInstr     = (void(*)(HInstr*, Bool)) ppAMD64Instr;
-         ppReg       = (void(*)(HReg)) ppHRegAMD64;
-         iselSB      = iselSB_AMD64;
-         emit        = (Int(*)(Bool*,UChar*,Int,HInstr*,Bool,VexEndness,
-                               const void*,const void*,const void*,
-                               const void*))
-                       emit_AMD64Instr;
+         isMove       = (__typeof__(isMove)) isMove_AMD64Instr;
+         getRegUsage  = (__typeof__(getRegUsage)) getRegUsage_AMD64Instr;
+         mapRegs      = (__typeof__(mapRegs)) mapRegs_AMD64Instr;
+         genSpill     = (__typeof__(genSpill)) genSpill_AMD64;
+         genReload    = (__typeof__(genReload)) genReload_AMD64;
+         ppInstr      = (__typeof__(ppInstr)) ppAMD64Instr;
+         ppReg        = (__typeof__(ppReg)) ppHRegAMD64;
+         iselSB       = iselSB_AMD64;
+         emit         = (__typeof__(emit)) emit_AMD64Instr;
          host_word_type    = Ity_I64;
          vassert(are_valid_hwcaps(VexArchAMD64, vta->archinfo_host.hwcaps));
          vassert(vta->archinfo_host.endness == VexEndnessLE);
@@ -345,18 +333,15 @@
          mode64      = False;
          getAllocableRegs_PPC ( &n_available_real_regs,
                                 &available_real_regs, mode64 );
-         isMove      = (Bool(*)(HInstr*,HReg*,HReg*)) isMove_PPCInstr;
-         getRegUsage = (void(*)(HRegUsage*,HInstr*,Bool)) getRegUsage_PPCInstr;
-         mapRegs     = (void(*)(HRegRemap*,HInstr*,Bool)) mapRegs_PPCInstr;
-         genSpill    = (void(*)(HInstr**,HInstr**,HReg,Int,Bool)) genSpill_PPC;
-         genReload   = (void(*)(HInstr**,HInstr**,HReg,Int,Bool)) genReload_PPC;
-         ppInstr     = (void(*)(HInstr*,Bool)) ppPPCInstr;
-         ppReg       = (void(*)(HReg)) ppHRegPPC;
-         iselSB      = iselSB_PPC;
-         emit        = (Int(*)(Bool*,UChar*,Int,HInstr*,Bool,VexEndness,
-                               const void*,const void*,const void*,
-                               const void*))
-                       emit_PPCInstr;
+         isMove       = (__typeof__(isMove)) isMove_PPCInstr;
+         getRegUsage  = (__typeof__(getRegUsage)) getRegUsage_PPCInstr;
+         mapRegs      = (__typeof__(mapRegs)) mapRegs_PPCInstr;
+         genSpill     = (__typeof__(genSpill)) genSpill_PPC;
+         genReload    = (__typeof__(genReload)) genReload_PPC;
+         ppInstr      = (__typeof__(ppInstr)) ppPPCInstr;
+         ppReg        = (__typeof__(ppReg)) ppHRegPPC;
+         iselSB       = iselSB_PPC;
+         emit         = (__typeof__(emit)) emit_PPCInstr;
          host_word_type    = Ity_I32;
          vassert(are_valid_hwcaps(VexArchPPC32, vta->archinfo_host.hwcaps));
          vassert(vta->archinfo_host.endness == VexEndnessBE);
@@ -366,18 +351,15 @@
          mode64      = True;
          getAllocableRegs_PPC ( &n_available_real_regs,
                                 &available_real_regs, mode64 );
-         isMove      = (Bool(*)(HInstr*,HReg*,HReg*)) isMove_PPCInstr;
-         getRegUsage = (void(*)(HRegUsage*,HInstr*, Bool)) getRegUsage_PPCInstr;
-         mapRegs     = (void(*)(HRegRemap*,HInstr*, Bool)) mapRegs_PPCInstr;
-         genSpill    = (void(*)(HInstr**,HInstr**,HReg,Int,Bool)) genSpill_PPC;
-         genReload   = (void(*)(HInstr**,HInstr**,HReg,Int,Bool)) genReload_PPC;
-         ppInstr     = (void(*)(HInstr*, Bool)) ppPPCInstr;
-         ppReg       = (void(*)(HReg)) ppHRegPPC;
-         iselSB      = iselSB_PPC;
-         emit        = (Int(*)(Bool*,UChar*,Int,HInstr*,Bool,VexEndness,
-                               const void*,const void*,const void*,
-                               const void*))
-                       emit_PPCInstr;
+         isMove       = (__typeof__(isMove)) isMove_PPCInstr;
+         getRegUsage  = (__typeof__(getRegUsage)) getRegUsage_PPCInstr;
+         mapRegs      = (__typeof__(mapRegs)) mapRegs_PPCInstr;
+         genSpill     = (__typeof__(genSpill)) genSpill_PPC;
+         genReload    = (__typeof__(genReload)) genReload_PPC;
+         ppInstr      = (__typeof__(ppInstr)) ppPPCInstr;
+         ppReg        = (__typeof__(ppReg)) ppHRegPPC;
+         iselSB       = iselSB_PPC;
+         emit         = (__typeof__(emit)) emit_PPCInstr;
          host_word_type    = Ity_I64;
          vassert(are_valid_hwcaps(VexArchPPC64, vta->archinfo_host.hwcaps));
          vassert(vta->archinfo_host.endness == VexEndnessBE ||
@@ -388,19 +370,16 @@
          mode64      = True;
          getAllocableRegs_S390 ( &n_available_real_regs,
                                  &available_real_regs, mode64 );
-         isMove      = (Bool(*)(HInstr*,HReg*,HReg*)) isMove_S390Instr;
-         getRegUsage = (void(*)(HRegUsage*,HInstr*, Bool)) getRegUsage_S390Instr;
-         mapRegs     = (void(*)(HRegRemap*,HInstr*, Bool)) mapRegs_S390Instr;
-         genSpill    = (void(*)(HInstr**,HInstr**,HReg,Int,Bool)) genSpill_S390;
-         genReload   = (void(*)(HInstr**,HInstr**,HReg,Int,Bool)) genReload_S390;
+         isMove       = (__typeof__(isMove)) isMove_S390Instr;
+         getRegUsage  = (__typeof__(getRegUsage)) getRegUsage_S390Instr;
+         mapRegs      = (__typeof__(mapRegs)) mapRegs_S390Instr;
+         genSpill     = (__typeof__(genSpill)) genSpill_S390;
+         genReload    = (__typeof__(genReload)) genReload_S390;
          // fixs390: consider implementing directReload_S390
-         ppInstr     = (void(*)(HInstr*, Bool)) ppS390Instr;
-         ppReg       = (void(*)(HReg)) ppHRegS390;
-         iselSB      = iselSB_S390;
-         emit        = (Int(*)(Bool*,UChar*,Int,HInstr*,Bool,VexEndness,
-                               const void*,const void*,const void*,
-                               const void*))
-                               emit_S390Instr;
+         ppInstr      = (__typeof__(ppInstr)) ppS390Instr;
+         ppReg        = (__typeof__(ppReg)) ppHRegS390;
+         iselSB       = iselSB_S390;
+         emit         = (__typeof__(emit)) emit_S390Instr;
          host_word_type    = Ity_I64;
          vassert(are_valid_hwcaps(VexArchS390X, vta->archinfo_host.hwcaps));
          vassert(vta->archinfo_host.endness == VexEndnessBE);
@@ -410,18 +389,15 @@
          mode64      = False;
          getAllocableRegs_ARM ( &n_available_real_regs,
                                 &available_real_regs );
-         isMove      = (Bool(*)(HInstr*,HReg*,HReg*)) isMove_ARMInstr;
-         getRegUsage = (void(*)(HRegUsage*,HInstr*, Bool)) getRegUsage_ARMInstr;
-         mapRegs     = (void(*)(HRegRemap*,HInstr*, Bool)) mapRegs_ARMInstr;
-         genSpill    = (void(*)(HInstr**,HInstr**,HReg,Int,Bool)) genSpill_ARM;
-         genReload   = (void(*)(HInstr**,HInstr**,HReg,Int,Bool)) genReload_ARM;
-         ppInstr     = (void(*)(HInstr*, Bool)) ppARMInstr;
-         ppReg       = (void(*)(HReg)) ppHRegARM;
-         iselSB      = iselSB_ARM;
-         emit        = (Int(*)(Bool*,UChar*,Int,HInstr*,Bool,VexEndness,
-                               const void*,const void*,const void*,
-                               const void*))
-                       emit_ARMInstr;
+         isMove       = (__typeof__(isMove)) isMove_ARMInstr;
+         getRegUsage  = (__typeof__(getRegUsage)) getRegUsage_ARMInstr;
+         mapRegs      = (__typeof__(mapRegs)) mapRegs_ARMInstr;
+         genSpill     = (__typeof__(genSpill)) genSpill_ARM;
+         genReload    = (__typeof__(genReload)) genReload_ARM;
+         ppInstr      = (__typeof__(ppInstr)) ppARMInstr;
+         ppReg        = (__typeof__(ppReg)) ppHRegARM;
+         iselSB       = iselSB_ARM;
+         emit         = (__typeof__(emit)) emit_ARMInstr;
          host_word_type    = Ity_I32;
          vassert(are_valid_hwcaps(VexArchARM, vta->archinfo_host.hwcaps));
          vassert(vta->archinfo_host.endness == VexEndnessLE);
@@ -431,22 +407,15 @@
          mode64      = True;
          getAllocableRegs_ARM64 ( &n_available_real_regs,
                                   &available_real_regs );
-         isMove      = (Bool(*)(HInstr*,HReg*,HReg*)) isMove_ARM64Instr;
-         getRegUsage = (void(*)(HRegUsage*,HInstr*, Bool))
-                       getRegUsage_ARM64Instr;
-         mapRegs     = (void(*)(HRegRemap*,HInstr*, Bool))
-                       mapRegs_ARM64Instr;
-         genSpill    = (void(*)(HInstr**,HInstr**,HReg,Int,Bool))
-                       genSpill_ARM64;
-         genReload   = (void(*)(HInstr**,HInstr**,HReg,Int,Bool))
-                       genReload_ARM64;
-         ppInstr     = (void(*)(HInstr*, Bool)) ppARM64Instr;
-         ppReg       = (void(*)(HReg)) ppHRegARM64;
-         iselSB      = iselSB_ARM64;
-         emit        = (Int(*)(Bool*,UChar*,Int,HInstr*,Bool,VexEndness,
-                               const void*,const void*,const void*,
-                               const void*))
-                       emit_ARM64Instr;
+         isMove       = (__typeof__(isMove)) isMove_ARM64Instr;
+         getRegUsage  = (__typeof__(getRegUsage)) getRegUsage_ARM64Instr;
+         mapRegs      = (__typeof__(mapRegs)) mapRegs_ARM64Instr;
+         genSpill     = (__typeof__(genSpill)) genSpill_ARM64;
+         genReload    = (__typeof__(genReload)) genReload_ARM64;
+         ppInstr      = (__typeof__(ppInstr)) ppARM64Instr;
+         ppReg        = (__typeof__(ppReg)) ppHRegARM64;
+         iselSB       = iselSB_ARM64;
+         emit         = (__typeof__(emit)) emit_ARM64Instr;
          host_word_type    = Ity_I64;
          vassert(are_valid_hwcaps(VexArchARM64, vta->archinfo_host.hwcaps));
          vassert(vta->archinfo_host.endness == VexEndnessLE);
@@ -456,18 +425,15 @@
          mode64      = False;
          getAllocableRegs_MIPS ( &n_available_real_regs,
                                 &available_real_regs, mode64 );
-         isMove      = (Bool(*)(HInstr*,HReg*,HReg*)) isMove_MIPSInstr;
-         getRegUsage = (void(*)(HRegUsage*,HInstr*, Bool)) getRegUsage_MIPSInstr;
-         mapRegs     = (void(*)(HRegRemap*,HInstr*, Bool)) mapRegs_MIPSInstr;
-         genSpill    = (void(*)(HInstr**,HInstr**,HReg,Int,Bool)) genSpill_MIPS;
-         genReload   = (void(*)(HInstr**,HInstr**,HReg,Int,Bool)) genReload_MIPS;
-         ppInstr     = (void(*)(HInstr*, Bool)) ppMIPSInstr;
-         ppReg       = (void(*)(HReg)) ppHRegMIPS;
-         iselSB      = iselSB_MIPS;
-         emit        = (Int(*)(Bool*,UChar*,Int,HInstr*,Bool,VexEndness,
-                               const void*,const void*,const void*,
-                               const void*))
-                       emit_MIPSInstr;
+         isMove       = (__typeof__(isMove)) isMove_MIPSInstr;
+         getRegUsage  = (__typeof__(getRegUsage)) getRegUsage_MIPSInstr;
+         mapRegs      = (__typeof__(mapRegs)) mapRegs_MIPSInstr;
+         genSpill     = (__typeof__(genSpill)) genSpill_MIPS;
+         genReload    = (__typeof__(genReload)) genReload_MIPS;
+         ppInstr      = (__typeof__(ppInstr)) ppMIPSInstr;
+         ppReg        = (__typeof__(ppReg)) ppHRegMIPS;
+         iselSB       = iselSB_MIPS;
+         emit         = (__typeof__(emit)) emit_MIPSInstr;
          host_word_type    = Ity_I32;
          vassert(are_valid_hwcaps(VexArchMIPS32, vta->archinfo_host.hwcaps));
          vassert(vta->archinfo_host.endness == VexEndnessLE
@@ -478,18 +444,15 @@
          mode64      = True;
          getAllocableRegs_MIPS ( &n_available_real_regs,
                                  &available_real_regs, mode64 );
-         isMove      = (Bool(*)(HInstr*,HReg*,HReg*)) isMove_MIPSInstr;
-         getRegUsage = (void(*)(HRegUsage*,HInstr*, Bool)) getRegUsage_MIPSInstr;
-         mapRegs     = (void(*)(HRegRemap*,HInstr*, Bool)) mapRegs_MIPSInstr;
-         genSpill    = (void(*)(HInstr**,HInstr**,HReg,Int,Bool)) genSpill_MIPS;
-         genReload   = (void(*)(HInstr**,HInstr**,HReg,Int,Bool)) genReload_MIPS;
-         ppInstr     = (void(*)(HInstr*, Bool)) ppMIPSInstr;
-         ppReg       = (void(*)(HReg)) ppHRegMIPS;
-         iselSB      = iselSB_MIPS;
-         emit        = (Int(*)(Bool*,UChar*,Int,HInstr*,Bool,VexEndness,
-                               const void*,const void*,const void*,
-                               const void*))
-                       emit_MIPSInstr;
+         isMove       = (__typeof__(isMove)) isMove_MIPSInstr;
+         getRegUsage  = (__typeof__(getRegUsage)) getRegUsage_MIPSInstr;
+         mapRegs      = (__typeof__(mapRegs)) mapRegs_MIPSInstr;
+         genSpill     = (__typeof__(genSpill)) genSpill_MIPS;
+         genReload    = (__typeof__(genReload)) genReload_MIPS;
+         ppInstr      = (__typeof__(ppInstr)) ppMIPSInstr;
+         ppReg        = (__typeof__(ppReg)) ppHRegMIPS;
+         iselSB       = iselSB_MIPS;
+         emit         = (__typeof__(emit)) emit_MIPSInstr;
          host_word_type    = Ity_I64;
          vassert(are_valid_hwcaps(VexArchMIPS64, vta->archinfo_host.hwcaps));
          vassert(vta->archinfo_host.endness == VexEndnessLE