/* Return an insn to spill/restore a real reg to a spill slot
offset. */
HInstr* (*genSpill) ( HReg, Int ),
- HInstr* (*genReload) ( HReg, Int )
+ HInstr* (*genReload) ( HReg, Int ),
+
+ /* For debug printing only. */
+ void (*ppInstr) ( HInstr* ),
+ void (*ppReg) ( HReg )
);
void LibVEX_Init (
/* failure exit function */
+ __attribute__ ((noreturn))
void (*failure_exit) ( void ),
/* logging output function */
void (*log_bytes) ( Char*, Int nbytes ),
void (*mapRegs) (HRegRemap*, HInstr*);
HInstr* (*genSpill) ( HReg, Int );
HInstr* (*genReload) ( HReg, Int );
+ void (*ppInstr) ( HInstr* );
+ void (*ppReg) ( HReg );
HInstrArray* (*iselBB) ( IRBB* );
IRBB* (*bbToIR) ( Char*, Addr64, Int*, Bool(*)(Addr64) );
mapRegs = (void(*)(HRegRemap*,HInstr*)) mapRegs_X86Instr;
genSpill = (HInstr*(*)(HReg,Int)) genSpill_X86;
genReload = (HInstr*(*)(HReg,Int)) genReload_X86;
+ ppInstr = (void(*)(HInstr*)) ppX86Instr;
+ ppReg = (void(*)(HReg)) ppHRegX86;
iselBB = iselBB_X86;
break;
default:
rcode = doRegisterAllocation ( vcode, available_real_regs,
n_available_real_regs,
isMove, getRegUsage, mapRegs,
- genSpill, genReload );
+ genSpill, genReload,
+ ppInstr, ppReg );
/* Assemble, etc. */
LibVEX_Clear(True);
extern void LibVEX_Init (
/* failure exit function */
+ __attribute__ ((noreturn))
void (*failure_exit) ( void ),
/* logging output function */
void (*log_bytes) ( Char*, Int nbytes ),
#include "libvex_basictypes.h"
#include "libvex.h"
+__attribute__ ((noreturn))
void failure_exit ( void )
{
fprintf(stdout, "VEX did failure_exit. Bye.\n");