Lines Matching full:prefix

107   // functionality of a SIMD prefix
668 // We haven't support relocation for REX2 prefix, so temporarily use REX
762 // We only allow no displacement if no pseudo prefix is present.
764 // Disp8 is allowed unless the {disp32} prefix is present.
803 // can't use disp8 if the {disp32} pseudo prefix is present.
816 // pseudo prefix prevented using disp8 above.
851 // displacement unless {disp32} pseudo prefix was used.
887 // Emit segment override opcode prefix as needed.
893 // Emit the repeat opcode prefix as needed.
900 // Emit the address size opcode prefix as needed.
910 // Emit segment override opcode prefix as needed (not for %ds).
917 // Emit segment override opcode prefix as needed (not for %ds).
928 // Emit segment override opcode prefix as needed.
934 // REX prefix is optional, but if used must be immediately before the opcode
942 // prefix bytes, opcode extension field, operand encoding fields, and vector
943 // length encoding capability into a new prefix, referred to as VEX.
946 // 512/256/128-bit vector register operands) are encoded using a new prefix
952 /// Emit XOP, VEX2, VEX3 or EVEX prefix.
953 /// \returns the used prefix.
977 X86OpcodePrefixHelper Prefix(*Ctx.getRegisterInfo());
982 Prefix.setLowerBound(XOP);
986 Prefix.setLowerBound((MI.getFlags() & X86::IP_USE_VEX3) ? VEX3 : VEX2);
989 Prefix.setLowerBound(EVEX);
993 Prefix.setW(TSFlags & X86II::REX_W);
994 Prefix.setNF(TSFlags & X86II::EVEX_NF);
1003 llvm_unreachable("Invalid prefix!");
1005 Prefix.set5M(0x1); // 0F
1008 Prefix.set5M(0x2); // 0F 38
1011 Prefix.set5M(0x3); // 0F 3A
1014 Prefix.set5M(0x8);
1017 Prefix.set5M(0x9);
1020 Prefix.set5M(0xA);
1023 Prefix.set5M(0x4);
1026 Prefix.set5M(0x5);
1029 Prefix.set5M(0x6);
1032 Prefix.set5M(0x7);
1036 Prefix.setL(TSFlags & X86II::VEX_L);
1037 Prefix.setL2(TSFlags & X86II::EVEX_L2);
1043 Prefix.setPP(0x1); // 66
1046 Prefix.setPP(0x2); // F3
1049 Prefix.setPP(0x3); // F2
1053 Prefix.setZ(HasEVEX_K && (TSFlags & X86II::EVEX_Z));
1054 Prefix.setEVEX_b(TSFlags & X86II::EVEX_B);
1067 Prefix.setRR2(MI, CurOp++);
1068 Prefix.setBB2(MI, MemOperand + X86::AddrBaseReg);
1069 Prefix.setXX2(MI, MemOperand + X86::AddrIndexReg);
1071 Prefix.set4VV2(MI, CurOp++);
1087 Prefix.setBB2(MI, MemOperand + X86::AddrBaseReg);
1088 Prefix.setXX2(MI, MemOperand + X86::AddrIndexReg);
1089 Prefix.setV2(MI, MemOperand + X86::AddrIndexReg, HasVEX_4V);
1092 Prefix.set4VV2(MI, CurOp++);
1097 Prefix.setAAA(MI, CurOp++);
1100 Prefix.set4VV2(MI, CurOp++);
1102 Prefix.setRR2(MI, CurOp++);
1104 Prefix.set4V(MI, CurOp++, /*IsImm=*/true);
1105 Prefix.setSC(MI, CurOp++);
1124 Prefix.set4VV2(MI, CurOp++);
1126 Prefix.setRR2(MI, CurOp++);
1129 Prefix.setAAA(MI, CurOp++);
1132 Prefix.set4VV2(MI, CurOp++);
1134 Prefix.setBB2(MI, MemOperand + X86::AddrBaseReg);
1135 Prefix.setXX2(MI, MemOperand + X86::AddrIndexReg);
1136 Prefix.setV2(MI, MemOperand + X86::AddrIndexReg, HasVEX_4V);
1139 Prefix.set4V(MI, CurOp++, /*IsImm=*/true);
1140 Prefix.setSC(MI, CurOp++);
1147 Prefix.setRR2(MI, CurOp++);
1148 Prefix.setBB2(MI, MemOperand + X86::AddrBaseReg);
1149 Prefix.setXX2(MI, MemOperand + X86::AddrIndexReg);
1150 Prefix.set4VV2(MI, CurOp + X86::AddrNumOperands);
1155 Prefix.setR(MI, CurOp++);
1156 Prefix.set4V(MI, CurOp++);
1157 Prefix.setBB2(MI, MemOperand + X86::AddrBaseReg);
1158 Prefix.setXX2(MI, MemOperand + X86::AddrIndexReg);
1174 Prefix.set4VV2(MI, CurOp++);
1177 Prefix.setAAA(MI, CurOp++);
1179 Prefix.setBB2(MI, MemOperand + X86::AddrBaseReg);
1180 Prefix.setXX2(MI, MemOperand + X86::AddrIndexReg);
1181 Prefix.setV2(MI, MemOperand + X86::AddrIndexReg, HasVEX_4V);
1184 Prefix.set4V(MI, CurOp++, /*IsImm=*/true);
1185 Prefix.setSC(MI, CurOp++);
1202 Prefix.set4VV2(MI, CurOp++);
1203 Prefix.setRR2(MI, CurOp++);
1206 Prefix.setAAA(MI, CurOp++);
1209 Prefix.set4VV2(MI, CurOp++);
1211 Prefix.setBB2(MI, CurOp);
1212 Prefix.setX(MI, CurOp, 4);
1216 Prefix.set4V(MI, CurOp++, /*IsImm=*/true);
1217 Prefix.setSC(MI, CurOp++);
1235 Prefix.setRR2(MI, CurOp++);
1236 Prefix.setBB2(MI, CurOp++);
1237 Prefix.set4VV2(MI, CurOp++);
1242 Prefix.setR(MI, CurOp++);
1243 Prefix.set4V(MI, CurOp++);
1247 Prefix.setB(MI, CurOp);
1248 Prefix.setX(MI, CurOp, 4);
1262 Prefix.set4VV2(MI, CurOp++);
1263 Prefix.setBB2(MI, CurOp);
1264 Prefix.setX(MI, CurOp, 4);
1268 Prefix.setAAA(MI, CurOp++);
1271 Prefix.set4VV2(MI, CurOp++);
1273 Prefix.setRR2(MI, CurOp++);
1275 Prefix.set4V(MI, CurOp++, /*IsImm=*/true);
1276 Prefix.setSC(MI, CurOp++);
1286 Prefix.setRR2(MI, CurOp++);
1301 Prefix.set4VV2(MI, CurOp++);
1304 Prefix.setAAA(MI, CurOp++);
1306 Prefix.setBB2(MI, CurOp);
1307 Prefix.setX(MI, CurOp, 4);
1310 Prefix.set4V(MI, ++CurOp, /*IsImm=*/true);
1311 Prefix.setSC(MI, ++CurOp);
1317 Prefix.setL(EVEX_rc & 0x1);
1318 Prefix.setL2(EVEX_rc & 0x2);
1320 PrefixKind Kind = Prefix.determineOptimalKind();
1321 Prefix.emit(CB);
1325 /// Emit REX prefix which specifies
1330 /// \returns the used prefix (REX or None).
1336 X86OpcodePrefixHelper Prefix(*Ctx.getRegisterInfo());
1339 Prefix.setW(TSFlags & X86II::REX_W);
1355 // If it accesses SPL, BPL, SIL, or DIL, then it requires a REX prefix.
1357 Prefix.setLowerBound(REX);
1359 // GOTTPOFF and TLSDESC relocations require a REX prefix to allow
1361 // any prefix, they may be replaced by instructions that do. This is
1367 Prefix.setLowerBound(REX);
1372 Prefix.setLowerBound(REX);
1375 Prefix.setLowerBound(REX2);
1387 Prefix.setBB2(MI, CurOp++);
1391 Prefix.setRR2(MI, CurOp++);
1392 Prefix.setBB2(MI, CurOp++);
1396 Prefix.setRR2(MI, CurOp++);
1397 Prefix.setBB2(MI, MemOperand + X86::AddrBaseReg);
1398 Prefix.setXX2(MI, MemOperand + X86::AddrIndexReg);
1402 Prefix.setBB2(MI, CurOp++);
1403 Prefix.setRR2(MI, CurOp++);
1406 Prefix.setBB2(MI, MemOperand + X86::AddrBaseReg);
1407 Prefix.setXX2(MI, MemOperand + X86::AddrIndexReg);
1409 Prefix.setRR2(MI, CurOp++);
1421 Prefix.setBB2(MI, MemOperand + X86::AddrBaseReg);
1422 Prefix.setXX2(MI, MemOperand + X86::AddrIndexReg);
1434 Prefix.setBB2(MI, CurOp++);
1437 Prefix.setM((TSFlags & X86II::OpMapMask) == X86II::TB);
1438 PrefixKind Kind = Prefix.determineOptimalKind();
1442 Prefix.emit(CB);
1446 /// Emit segment override opcode prefix as needed.
1459 /// \returns the used prefix (REX or None).
1466 // Emit the operand size opcode prefix as needed.
1471 // Emit the LOCK opcode prefix.
1475 // Emit the NOTRACK opcode prefix.
1491 // Handle REX prefix.
1994 // Skip two trainling conditional operands encoded in EVEX prefix