Lines Matching full:odesc
103 const Operands& opnds, const OpcodeDesc * odesc,
121 //assert((odesc->opnds[0].kind & OpndKind_Mem) ||
122 // (odesc->opnds[1].kind & OpndKind_Mem));
123 unsigned memidx = odesc->opnds[0].kind & OpndKind_Mem ? 0 : 1;
133 stream = encodeModRM(stream, opnds, memidx, odesc, prex);
167 stream = encodeModRM(stream, opnds, idx, odesc, prex);
310 const OpcodeDesc * odesc = lookup(mn, opnds);
322 unsigned char _1st = odesc->opcode[0];
326 ((_1st == 0x66) || (_1st == 0xF2 || _1st == 0xF3) && odesc->opcode[1] == 0x0F)) {
342 memcpy(stream, &odesc->opcode[1], odesc->opcode_len-1);
343 stream += odesc->opcode_len-1;
357 if (odesc->opcode_len==1) {
358 *(unsigned char*)stream = *(unsigned char*)&odesc->opcode;
360 else if (odesc->opcode_len==2) {
361 *(unsigned short*)stream = *(unsigned short*)&odesc->opcode;
363 else if (odesc->opcode_len==3) {
364 *(unsigned short*)stream = *(unsigned short*)&odesc->opcode;
365 *(unsigned char*)(stream+2) = odesc->opcode[2];
367 else if (odesc->opcode_len==4) {
368 *(unsigned*)stream = *(unsigned*)&odesc->opcode;
370 stream += odesc->opcode_len;
373 unsigned argsCount = odesc->first_opnd;
375 if (odesc->aux0) {
376 stream = encode_aux(stream, odesc->aux0, opnds, odesc, &argsCount, prex);
377 if (odesc->aux1) {
378 stream = encode_aux(stream, odesc->aux1, opnds, odesc, &argsCount, prex);
460 unsigned idx, const OpcodeDesc * odesc,
681 static bool match(const EncoderBase::OpcodeDesc& odesc,
684 assert(odesc.roles.count == opnds.count());
686 for(unsigned j = 0; j < odesc.roles.count; j++) {
687 const EncoderBase::OpndDesc& desc = odesc.opnds[j];
708 static bool try_match(const EncoderBase::OpcodeDesc& odesc,
711 assert(odesc.roles.count == opnds.count());
713 for(unsigned j=0; j<odesc.roles.count; j++) {
715 if ((odesc.opnds[j].kind & opnds[j].kind()) != opnds[j].kind()) {
720 if (odesc.opnds[j].size != opnds[j].size()) {
728 if (EncoderBase::getOpndRoles(odesc.roles, j) & OpndRole_Def) {
729 if (odesc.opnds[j].size != opnds[j].size()) {
786 const OpcodeDesc * odesc = opcodes[mn];
789 for (idx=0; !odesc[idx].last; idx++) {
790 const OpcodeDesc& opcode = odesc[idx];
803 for (idx=0; !odesc[idx].last; idx++) {
804 const OpcodeDesc& opcode = odesc[idx];
824 const OpcodeDesc * odesc = &opcodes[mn][opcodeIndex];
825 assert(!odesc->last);
826 assert(odesc->roles.count == opnds.count());
827 assert(odesc->platf != OpcodeInfo::decoder);
832 return odesc;