#ifndef morpheo_behavioural_Constants_h #define morpheo_behavioural_Constants_h namespace morpheo { namespace behavioural { //=========================================================[ Type ]===== # define TYPE_ALU 0x0 // 00000 - unit multiple # define TYPE_SHIFT 0x1 // 00000 - unit multiple # define TYPE_MOVE 0x2 // 00000 - unit multiple # define TYPE_TEST 0x3 // 00000 - unit multiple # define TYPE_MUL_DIV 0x4 // 00000 - unit multiple # define TYPE_EXTEND 0x5 // 00000 - unit multiple, type optionnal # define TYPE_FIND 0x6 // 00000 - unit multiple, type optionnal # define TYPE_SPECIAL 0x7 // 00000 - unit uniq # define TYPE_CUSTOM 0x8 // 00000 - unit uniq , type optionnal # define TYPE_BRANCH 0x9 // 00000 - unit multiple # define TYPE_MEMORY 0xa // 00000 - unit uniq # define SIZE_TYPE 5 # define MAX_TYPE (1< incondionnal #define cst_BRANCH_STATE_SPEC_NTAKE 0x2 // 1 0 #define cst_BRANCH_STATE_SPEC_TAKE 0x3 // 1 1 */ /* #define M_CPU_SIZE_INST 32 //---------------------------------------------------- // Exception type //---------------------------------------------------- #define M_CPU_LOG2_NB_EXCP 5 #define M_CPU_NB_EXCP 32 #define EXCP_NO 0x00 // none exception #define EXCP_RESET 0x01 // software or hardware reset #define EXCP_BERR 0x02 // Access at a invalid physical adress #define EXCP_D_PAGE 0x03 // No matching or page violation protection in pages tables #define EXCP_I_PAGE 0x04 // No matching or page violation protection in pages tables #define EXCP_TICK_TIMER 0x05 // Tick timer interruption #define EXCP_ALIGNMENT 0x06 // Load/Store access is not aligned #define EXCP_ILL_INST 0x07 // Instruction is illegal (no implemented) #define EXCP_IRQ 0x08 // External interruption #define EXCP_D_TLB 0x09 // DTLB miss #define EXCP_I_TLB 0x0a // ITLB miss #define EXCP_RANGE 0x0b // Overflow or access at a unimplemented register or context #define EXCP_SYSCALL 0x0c // System Call #define EXCP_FP 0x0d // Caused by a floating instruction #define EXCP_TRAP 0x0e // L.trap or debug unit #define EXCP_RES0 0x0f // Reserved for a futur usage #define EXCP_RES1 0x10 // Reserved for a futur usage #define EXCP_RES2 0x11 // Reserved for a futur usage #define EXCP_RES3 0x12 // Reserved for a futur usage #define EXCP_RES4 0x13 // Reserved for a futur usage #define EXCP_RES5 0x14 // Reserved for a futur usage #define EXCP_RES6 0x15 // Reserved for implemented specific exceptions #define EXCP_RES7 0x16 // Reserved for implemented specific exceptions #define EXCP_RES8 0x17 // Reserved for implemented specific exceptions #define EXCP_RES9 0x18 // Reserved for implemented specific exceptions #define EXCP_CUST0 0x19 // Reserved for custom exceptions #define EXCP_CUST1 0x1a // Reserved for custom exceptions #define EXCP_CUST2 0x1b // Reserved for custom exceptions #define EXCP_CUST3 0x1c // Reserved for custom exceptions #define EXCP_CUST4 0x1d // Reserved for custom exceptions #define EXCP_CUST5 0x1e // Reserved for custom exceptions #define EXCP_CUST6 0x1f // Reserved for custom exceptions //---------------------------------------------------- // Flags //---------------------------------------------------- #define M_CPU_NB_FLAG 3 // Integer flags #define FLAG_F 0x1 // Conditionnal branch flag #define FLAG_CY 0x2 // Carry was produced by last arithmétic operation #define FLAG_OV 0x4 // Overflow occured during last arithmetic operation // Floating flags #define FLAG_OVF 0x004 // Overflow occured during last arithmetic operation #define FLAG_UNF 0x008 // Underflow flags #define FLAG_SNF 0x010 // Result SNAN #define FLAG_QNF 0x020 // Result QNAN #define FLAG_ZF 0x040 // Result is nul #define FLAG_IXF 0x080 // Result is inexact #define FLAG_IVF 0x100 // Result is invalid #define FLAG_INF 0x200 // Result is infinite #define FLAG_DZF 0x400 // Division by zero // Position of flag in "rename register SR" (NOT IN "SR") #define FLAG_POS_F 0x0 // Conditionnal branch flag #define FLAG_POS_CY 0x1 // Carry was produced by last arithmétic operation #define FLAG_POS_OV 0x0 // Overflow occured during last arithmetic operation //---------------------------------------------------- // Instruction type //---------------------------------------------------- #define M_CPU_LOG2_NB_TYPE 4 #define TYPE_NOP 0x0 #define TYPE_ALU_F 0x1 // Instruction ALU with flag using (ADD, SUB, ADDC ...) #define TYPE_ALU_NF 0x2 // Instruction ALU without flag using (AND, OR ...) #define TYPE_MAC 0x3 // Instruction ALU with utilisation of register HI/LO #define TYPE_J 0x4 // Branch instruction #define TYPE_SPR_READ 0x5 // Instruction special : l.mfspr #define TYPE_SPR_WRITE 0x6 // Instruction special : l.mtspr #define TYPE_SPECIAL 0x7 // Instruction execute in decode stage #define TYPE_CUSTOM 0x8 // Instruction Custom #define TYPE_LOAD_Z 0x9 // Load access (extended by zero) #define TYPE_LOAD_S 0xa // Load access (sign extended) #define TYPE_STORE 0xc // Store access //---------------------------------------------------- // Condition to branch //---------------------------------------------------- #define M_CPU_LOG2_NB_COND 4 #define COND_NONE 0x0 // None condition (jump) #define COND_F 0x2 // Branch if Flag is set #define COND_NF 0x3 // Branch if Flag is clear #define COND_REG 0x4 // Branch if a register is read #define COND_STACK 0x8 // Branch with pop in stack pointer //---------------------------------------------------- // Event : State and Type //---------------------------------------------------- #define EVENT_STATE_NO_EVENT 0 // no event : current case #define EVENT_STATE_EVENT 1 // Have a event : make necessary to manage the event #define EVENT_STATE_WAITEND 2 // Wait end of manage event (restaure a good context) #define EVENT_STATE_END 3 // CPU can continue #define EVENT_TYPE_MISS 0 // miss of speculation #define EVENT_TYPE_EXCP 1 // exception or interruption occure // SPEC? TAKE? #define BRANCH_STATE_NONE 0 // 0 0 #define BRANCH_STATE_NSPEC_TAKE 1 // 0 1 -> incondionnal #define BRANCH_STATE_SPEC_NTAKE 2 // 1 0 #define BRANCH_STATE_SPEC_TAKE 3 // 1 1 //---------------------------------------------------- // Name to particular register //---------------------------------------------------- //~~~~~~~~~~~~~~~~~~~~~~~~~~ // GENERAL PURPOSE REGISTER //~~~~~~~~~~~~~~~~~~~~~~~~~~ #define M_CPU_LOG2_NB_GPR_LOG 5 #define M_CPU_NB_GPR_LOG (1< INST_L_NO_IMPLEMENTED //#define NB_INST_L (INST_L_NO_IMPLEMENTED+1) */ }; // end namespace behavioural }; // end namespace morpheo #endif