void LO_Individuum::init(const Lisa_OsProblem& P){ OPS.clear(); N = P.n; M = P.m; P_SIZE = N*M; for(int i = 0; i < P.n; i++) for(int j = 0; j < P.m; j++) if( (*P.sij)[i+1][j+1]) OPS.push_back(MK_OP(i,j,N)); N_OPS = OPS.size(); PERM=std::vector<short>(P_SIZE,false); }
#define MK_OP(mnemonic, format, op, func, extra_mask) { MASK_OP | (op ? 0 : MASK_FUNC) | extra_mask, ((unsigned)op << 26) | func, mnemonic, format } #define MK_OP_REGIMM(mnemonic, regop) { MASK_OP | MASK_RT, (0x01U << 26) | (regop << 16), mnemonic, "s, p" } #define MK_COPZ(z) { MASK_OP | (0x1U << 25), (0x1U << 25) | ((0x10U | z) << 26), "cop" #z, "F" } #define MK_COP0_FUNC(mnemonic, func) { MASK_OP | (0x1U << 25) | MASK_FUNC, (0x10U << 26) | (0x1U << 25) | func, mnemonic, "" } #define MK_COPZ_XFER(z, mnemonic, format, xf) { MASK_OP | (0x1FU << 21), ((0x10U | z) << 26) | (xf << 21), mnemonic, format } #define MK_GTE(mnemonic, format, func) { MASK_OP | (0x1U << 25) | MASK_FUNC, (0x1U << 25) | (0x12U << 26) | func, mnemonic, format } static OpEntry ops[] = { MK_OP("nop", "", 0, 0, MASK_RT | MASK_RD | MASK_SA), // // // MK_OP("sll", "d, t, a", 0, 0, 0), MK_OP("srl", "d, t, a", 0, 2, 0), MK_OP("sra", "d, t, a", 0, 3, 0), MK_OP("sllv", "d, t, s", 0, 4, 0), MK_OP("srlv", "d, t, s", 0, 6, 0), MK_OP("srav", "d, t, s", 0, 7, 0), MK_OP("jr", "s", 0, 8, 0), MK_OP("jalr", "d, s", 0, 9, 0),
}; #define MASK_OP (0x3F << 26) #define MASK_FUNC (0x3F) #define MASK_RS (0x1F << 21) #define MASK_RT (0x1F << 16) #define MASK_RD (0x1F << 11) #define MASK_SA (0x1F << 6) #define MK_OP(mnemonic, format, op, func, extra_mask) { MASK_OP | (op ? 0 : MASK_FUNC) | extra_mask, (op << 26) | func, mnemonic, format } #define MK_OP_REGIMM(mnemonic, regop) { MASK_OP | MASK_RT, (0x01 << 26) | (regop << 16), mnemonic, "s, p" } static OpEntry ops[] = { MK_OP("nop", "", 0, 0, MASK_RT | MASK_RD | MASK_SA), MK_OP("sll", "d, t, a", 0, 0, 0), MK_OP("srl", "d, t, a", 0, 2, 0), MK_OP("sra", "d, t, a", 0, 3, 0), MK_OP("sllv", "d, t, s", 0, 4, 0), MK_OP("srlv", "d, t, s", 0, 6, 0), MK_OP("srav", "d, t, s", 0, 7, 0), MK_OP("jr", "s", 0, 8, 0), MK_OP("jalr", "d, s", 0, 9, 0), MK_OP("syscall", "", 0, 12, 0), // TODO MK_OP("break", "", 0, 13, 0), // TODO MK_OP("mfhi", "d", 0, 16, 0),