129 lines
1.5 KiB
C++
129 lines
1.5 KiB
C++
/*
|
|
* Emitter.h
|
|
*
|
|
* ARMv7 ISA Emitter for code generation.
|
|
*
|
|
* David Miller, 2011.
|
|
*/
|
|
#pragma once
|
|
|
|
|
|
#include "arm_coding.h"
|
|
#include "arm_registers.h"
|
|
//#include "arm_disasm.h"
|
|
|
|
|
|
namespace ARM
|
|
{
|
|
|
|
/*
|
|
* Emitter - Reserved for use w/ static members ..
|
|
*
|
|
*
|
|
*/
|
|
|
|
class Emitter
|
|
{
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(_DEBUG) || defined(DEBUG)
|
|
|
|
#define EAPI void
|
|
|
|
#define DECL_I \
|
|
u32 Instruction=0
|
|
|
|
#define DECL_Id(d) \
|
|
u32 Instruction=(d)
|
|
|
|
#else
|
|
|
|
// #define _inlineExSVoidA __extension__ static __inline void __attribute__ ((__always_inline__))
|
|
|
|
#define EAPI \
|
|
inline static void
|
|
|
|
#define DECL_I \
|
|
static u32 Instruction; \
|
|
Instruction=0
|
|
|
|
#define DECL_Id(d) \
|
|
static u32 Instruction; \
|
|
Instruction=(d)
|
|
|
|
#endif
|
|
|
|
|
|
/*
|
|
* TEMP
|
|
*/
|
|
|
|
|
|
#define I (Instruction)
|
|
|
|
#define SET_CC I |= (((u32)CC&15)<<28)
|
|
|
|
#ifndef EMIT_I
|
|
#define EMIT_I emit_Write32((I));
|
|
#endif
|
|
|
|
#ifndef EMIT_GET_PTR
|
|
#define EMIT_GET_PTR() emit_GetCCPtr()
|
|
#endif
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* ARM Core Instructions
|
|
*/
|
|
|
|
#include "E_Branches.h"
|
|
#include "E_DataOp.h"
|
|
#include "E_Multiply.h"
|
|
#include "E_Parallel.h"
|
|
#include "E_Extend.h"
|
|
#include "E_Misc.h"
|
|
#include "E_Status.h"
|
|
#include "E_LoadStore.h"
|
|
#include "E_Special.h"
|
|
|
|
|
|
/*
|
|
* ARM VFP/A.SIMD Extension Instructions
|
|
*/
|
|
|
|
#include "E_VLoadStore.h"
|
|
#include "E_VRegXfer.h"
|
|
#include "E_VDataOp.h"
|
|
|
|
|
|
/*
|
|
* Helper Routines & Psuedo-Instructions
|
|
*/
|
|
|
|
#include "H_psuedo.h"
|
|
|
|
#include "H_Branches.h"
|
|
#include "H_LoadStore.h"
|
|
|
|
//#include "H_state.h"
|
|
//#include "H_fp.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|