Ver código fonte

bugfix 35700 xmmrm - zmmrm, mem32/64

git-svn-id: branches/tg74/avx512merge@42956 -
tg74 5 anos atrás
pai
commit
df199fbe23
3 arquivos alterados com 181 adições e 186 exclusões
  1. 20 8
      compiler/x86/aasmcpu.pas
  2. 44 25
      compiler/x86/rax86.pas
  3. 117 153
      compiler/x86/x86ins.dat

+ 20 - 8
compiler/x86/aasmcpu.pas

@@ -413,7 +413,6 @@ interface
         IF_SB,                  { unsized operands can't be non-byte  }
         IF_SW,                  { unsized operands can't be non-word  }
         IF_SD,                  { unsized operands can't be nondword  }
-        IF_SQ,                  { unsized operands can't be nonqword  }
 
         { unsized argument spec }
         { please keep these in order and in sync with IF_ARMASK }
@@ -515,7 +514,12 @@ interface
         IF_TMEM128,
         IF_THV,
         IF_THVM,
-        IF_TOVM
+        IF_TOVM,
+
+        { sse/avx scalare memrefsize }
+        IF_SCL32,
+        IF_SCL64
+
       );
       tinsflags=set of tinsflag;
 
@@ -4949,6 +4953,7 @@ implementation
           RegBCSTZMMSizeMask := 0;
           ExistsMemRef       := false;
 
+
           while (insentry^.opcode=AsmOp) do
           begin
             MRefInfo         := msiUnknown;
@@ -5027,7 +5032,10 @@ implementation
                 begin
                   inc(actMemCount);
 
-                  actMemSize:=actMemSize or (insentry^.optypes[j] and (OT_SIZE_MASK OR OT_VECTORBCST));
+                  if IF_SCL32 in insentry^.Flags then actMemSize := actMemSize or OT_BITS32
+                   else if IF_SCL64 in insentry^.Flags then actMemSize := actMemSize or OT_BITS64
+                   else actMemSize:=actMemSize or (insentry^.optypes[j] and (OT_SIZE_MASK OR OT_VECTORBCST));
+
                   if (insentry^.optypes[j] and OT_REGMEM) = OT_REGMEM then
                     begin
                       actRegMemTypes  := actRegMemTypes or insentry^.optypes[j];
@@ -5138,11 +5146,15 @@ implementation
                   0: ; // nothing todo
                   1: begin
                        MRefInfo := msiUnknown;
-                       case actRegMemTypes and (OT_MMXRM or OT_XMMRM or OT_YMMRM or OT_ZMMRM or OT_REG_EXTRA_MASK) of
-                         OT_MMXRM: actMemSize := actMemSize or OT_BITS64;
-                         OT_XMMRM: actMemSize := actMemSize or OT_BITS128;
-                         OT_YMMRM: actMemSize := actMemSize or OT_BITS256;
-                         OT_ZMMRM: actMemSize := actMemSize or OT_BITS512;
+
+                       if (insentry^.Flags * [IF_SCL32, IF_SCL64] = []) then
+                       begin
+                         case actRegMemTypes and (OT_MMXRM or OT_XMMRM or OT_YMMRM or OT_ZMMRM or OT_REG_EXTRA_MASK) of
+                           OT_MMXRM: actMemSize := actMemSize or OT_BITS64;
+                           OT_XMMRM: actMemSize := actMemSize or OT_BITS128;
+                           OT_YMMRM: actMemSize := actMemSize or OT_BITS256;
+                           OT_ZMMRM: actMemSize := actMemSize or OT_BITS512;
+                         end;
                        end;
 
                        case actMemSize of

+ 44 - 25
compiler/x86/rax86.pas

@@ -736,7 +736,25 @@ begin
                 ;
             end;
 
-            if memopsize = 0 then memopsize := topsize2memsize[tx86operand(operands[i]).opsize];
+            //if memopsize = 0 then memopsize := topsize2memsize[tx86operand(operands[i]).opsize];
+
+            if memopsize = 0 then
+            begin
+              {$ifdef i386}
+                { 64-bit operands are allowed for SSE and AVX instructions, so
+                  go by the byte size instead for these families of opcodes }
+                if (MemRefInfo(opcode).ExistsSSEAVX) then
+                begin
+                  memopsize := tx86operand(operands[i]).typesize * 8;
+                  if tx86operand(operands[i]).typesize = 8 then
+                  { Will be S_L otherwise and won't be corrected in time }
+                   tx86operand(operands[i]).opsize := S_Q;
+                end
+                else
+              {$endif i386}
+                memopsize := topsize2memsize[tx86operand(operands[i]).opsize];
+            end;
+
 
             if (memopsize > 0) and
                (memrefsize > 0) then
@@ -758,30 +776,32 @@ begin
                          std_op2str[opcode],
                          ToStr(memoffset));
               end
-              else if (memopsize < (memrefsize + memoffset * 8)) then
+              else if ((tx86operand(operands[i]).hastype) and (memopsize < memrefsize)) or
+                      (memopsize < (memrefsize + memoffset * 8)) then
               begin
-                if memoffset = 0 then
+                if memopsize < memrefsize then
                 begin
-                  Message3(asmr_w_check_mem_operand_size3,
-                           std_op2str[opcode],
-                           ToStr(memopsize),
-                           ToStr(memrefsize)
-                           );
-                end
-                else
-                begin
-                  Message4(asmr_w_check_mem_operand_size_offset,
-                           std_op2str[opcode],
-                           ToStr(memopsize),
-                           ToStr(memrefsize),
-                           ToStr(memoffset)
-                           );
+                  if memoffset = 0 then
+                  begin
+                    Message3(asmr_w_check_mem_operand_size3,
+                             std_op2str[opcode],
+                             ToStr(memopsize),
+                             ToStr(memrefsize)
+                             );
+                  end
+                  else
+                  begin
+                    Message4(asmr_w_check_mem_operand_size_offset,
+                             std_op2str[opcode],
+                             ToStr(memopsize),
+                             ToStr(memrefsize),
+                             ToStr(memoffset)
+                             );
+                  end;
                 end;
               end;
             end;
           end;
-
-
         end;
       end;
     end;
@@ -1869,14 +1889,13 @@ begin
                      asize:=OT_BITS32;
                    OS_64,OS_S64:
                      begin
-                       { Only FPU operations know about 64bit values, for all
-                         integer operations it is seen as 32bit
+                       { Only FPU and SSE/AVX operations know about 64bit
+                         values, for all integer operations it is seen as 32bit
 
-                         this applies only to i386, see tw16622}
+                          this applies only to i386, see tw16622}
 
-                       if gas_needsuffix[opcode] in [attsufFPU,attsufFPUint] then
-                         asize:=OT_BITS64
-                          else if MemRefInfo(opcode).ExistsSSEAVX then asize:=OT_BITS64
+                       if (gas_needsuffix[opcode] in [attsufFPU,attsufFPUint]) or (MemRefInfo(opcode).ExistsSSEAVX) then
+                        asize:=OT_BITS64
 {$ifdef i386}
                        else
                          asize:=OT_BITS32

+ 117 - 153
compiler/x86/x86ins.dat

@@ -2239,7 +2239,7 @@ xmmreg,xmmrm          \331\2\x0F\x58\110              KATMAI,SSE
 
 [ADDSS]
 (Ch_Mop2, Ch_Rop1)
-xmmreg,xmmrm          \333\2\x0F\x58\110              KATMAI,SSE
+xmmreg,xmmrm          \333\2\x0F\x58\110              KATMAI,SSE,SCL32
 
 [ANDNPS]
 (Ch_Mop2, Ch_Rop1)
@@ -2255,7 +2255,7 @@ xmmreg,xmmrm          \331\2\x0F\xC2\110\1\x00        KATMAI,SSE
 
 [CMPEQSS]
 (Ch_All)
-xmmreg,xmmrm          \333\2\x0F\xC2\110\1\x00        KATMAI,SSE
+xmmreg,xmmrm          \333\2\x0F\xC2\110\1\x00        KATMAI,SSE,SCL32
 
 [CMPLEPS]
 (Ch_All)
@@ -2263,7 +2263,7 @@ xmmreg,xmmrm          \331\2\x0F\xC2\110\1\x02        KATMAI,SSE
 
 [CMPLESS]
 (Ch_All)
-xmmreg,xmmrm          \333\2\x0F\xC2\110\1\x02        KATMAI,SSE
+xmmreg,xmmrm          \333\2\x0F\xC2\110\1\x02        KATMAI,SSE,SCL32
 
 [CMPLTPS]
 (Ch_All)
@@ -2271,7 +2271,7 @@ xmmreg,xmmrm          \331\2\x0F\xC2\110\1\x01        KATMAI,SSE
 
 [CMPLTSS]
 (Ch_All)
-xmmreg,xmmrm          \333\2\x0F\xC2\110\1\x01        KATMAI,SSE
+xmmreg,xmmrm          \333\2\x0F\xC2\110\1\x01        KATMAI,SSE,SCL32
 
 [CMPNEQPS]
 (Ch_All)
@@ -2279,7 +2279,7 @@ xmmreg,xmmrm          \331\2\x0F\xC2\110\1\x04        KATMAI,SSE
 
 [CMPNEQSS]
 (Ch_All)
-xmmreg,xmmrm          \333\2\x0F\xC2\110\1\x04        KATMAI,SSE
+xmmreg,xmmrm          \333\2\x0F\xC2\110\1\x04        KATMAI,SSE,SCL32
 
 [CMPNLEPS]
 (Ch_All)
@@ -2287,7 +2287,7 @@ xmmreg,xmmrm          \331\2\x0F\xC2\110\1\x06        KATMAI,SSE
 
 [CMPNLESS]
 (Ch_All)
-xmmreg,xmmrm          \333\2\x0F\xC2\110\1\x06        KATMAI,SSE
+xmmreg,xmmrm          \333\2\x0F\xC2\110\1\x06        KATMAI,SSE,SCL32
 
 [CMPNLTPS]
 (Ch_All)
@@ -2295,7 +2295,7 @@ xmmreg,xmmrm          \331\2\x0F\xC2\110\1\x05        KATMAI,SSE
 
 [CMPNLTSS]
 (Ch_All)
-xmmreg,xmmrm          \333\2\x0F\xC2\110\1\x05        KATMAI,SSE
+xmmreg,xmmrm          \333\2\x0F\xC2\110\1\x05        KATMAI,SSE,SCL32
 
 [CMPORDPS]
 (Ch_All)
@@ -2303,7 +2303,7 @@ xmmreg,xmmrm          \331\2\x0F\xC2\110\1\x07        KATMAI,SSE
 
 [CMPORDSS]
 (Ch_All)
-xmmreg,xmmrm          \333\2\x0F\xC2\110\1\x07        KATMAI,SSE
+xmmreg,xmmrm          \333\2\x0F\xC2\110\1\x07        KATMAI,SSE,SCL32
 
 [CMPUNORDPS]
 (Ch_All)
@@ -2311,7 +2311,7 @@ xmmreg,xmmrm          \331\2\x0F\xC2\110\1\x03        KATMAI,SSE
 
 [CMPUNORDSS]
 (Ch_All)
-xmmreg,xmmrm          \333\2\x0F\xC2\110\1\x03        KATMAI,SSE
+xmmreg,xmmrm          \333\2\x0F\xC2\110\1\x03        KATMAI,SSE,SCL32
 
 ;
 ; CMPPS/CMPSS must come after the specific ops; that way the disassembler will find the
@@ -2324,11 +2324,11 @@ xmmreg,xmmrm,imm      \331\2\x0F\xC2\110\22           KATMAI,SSE,SB,AR2
 
 [CMPSS]
 (Ch_All)
-xmmreg,xmmrm,imm      \333\2\x0F\xC2\110\22           KATMAI,SSE,SB,AR2
+xmmreg,xmmrm,imm      \333\2\x0F\xC2\110\22           KATMAI,SSE,SB,AR2,SCL32
 
 [COMISS]
 (Ch_Rop1, Ch_Rop2, Ch_WFlags)
-xmmreg,xmmrm          \2\x0F\x2F\110                  KATMAI,SSE
+xmmreg,xmmrm          \2\x0F\x2F\110                  KATMAI,SSE,SCL32
 
 [CVTPI2PS]
 (Ch_Wop2, Ch_Rop1)
@@ -2365,7 +2365,7 @@ xmmreg,xmmrm          \331\2\x0F\x5E\110              KATMAI,SSE
 
 [DIVSS]
 (Ch_Mop2, Ch_Rop1)
-xmmreg,xmmrm          \333\2\x0F\x5E\110              KATMAI,SSE
+xmmreg,xmmrm          \333\2\x0F\x5E\110              KATMAI,SSE,SCL32
 
 [LDMXCSR]
 (Ch_All)
@@ -2377,7 +2377,7 @@ xmmreg,xmmrm          \331\2\x0F\x5F\110              KATMAI,SSE
 
 [MAXSS]
 (Ch_All)
-xmmreg,xmmrm          \333\2\x0F\x5F\110              KATMAI,SSE
+xmmreg,xmmrm          \333\2\x0F\x5F\110              KATMAI,SSE,SCL32
 
 [MINPS]
 (Ch_All)
@@ -2385,7 +2385,7 @@ xmmreg,xmmrm          \331\2\x0F\x5D\110              KATMAI,SSE
 
 [MINSS]
 (Ch_All)
-xmmreg,xmmrm          \333\2\x0F\x5D\110              KATMAI,SSE
+xmmreg,xmmrm          \333\2\x0F\x5D\110              KATMAI,SSE,SCL32
 
 [MOVAPS]
 (Ch_ROp1, Ch_WOp2)
@@ -2436,7 +2436,7 @@ xmmreg,xmmrm          \2\x0F\x59\110                  KATMAI,SSE
 
 [MULSS]
 (Ch_Mop2, Ch_Rop1)
-xmmreg,xmmrm          \333\2\x0F\x59\110              KATMAI,SSE
+xmmreg,xmmrm          \333\2\x0F\x59\110              KATMAI,SSE,SCL32
 
 [ORPS]
 (Ch_Mop2, Ch_Rop1)
@@ -2448,7 +2448,7 @@ xmmreg,xmmrm          \331\2\x0F\x53\110              KATMAI,SSE
 
 [RCPSS]
 (Ch_Wop2, Ch_Rop1)
-xmmreg,xmmrm          \333\2\x0F\x53\110              KATMAI,SSE
+xmmreg,xmmrm          \333\2\x0F\x53\110              KATMAI,SSE,SCL32
 
 [RSQRTPS]
 (Ch_Wop2, Ch_Rop1)
@@ -2456,7 +2456,7 @@ xmmreg,xmmrm          \331\2\x0F\x52\110              KATMAI,SSE
 
 [RSQRTSS]
 (Ch_Wop2, Ch_Rop1)
-xmmreg,xmmrm          \333\2\x0F\x52\110              KATMAI,SSE
+xmmreg,xmmrm          \333\2\x0F\x52\110              KATMAI,SSE,SCL32
 
 [SHUFPS]
 (Ch_Mop3, Ch_Rop2)
@@ -2468,7 +2468,7 @@ xmmreg,xmmrm          \331\2\x0F\x51\110              KATMAI,SSE
 
 [SQRTSS]
 (Ch_Wop2, Ch_Rop1)
-xmmreg,xmmrm          \333\2\x0F\x51\110              KATMAI,SSE
+xmmreg,xmmrm          \333\2\x0F\x51\110              KATMAI,SSE,SCL32
 
 [STMXCSR]
 (Ch_All)
@@ -2480,11 +2480,11 @@ xmmreg,xmmrm          \331\2\x0F\x5C\110              KATMAI,SSE
 
 [SUBSS]
 (Ch_Mop2, Ch_Rop1)
-xmmreg,xmmrm          \333\2\x0F\x5C\110              KATMAI,SSE
+xmmreg,xmmrm          \333\2\x0F\x5C\110              KATMAI,SSE,SCL32
 
 [UCOMISS]
 (Ch_Rop1, Ch_Rop2, Ch_WZeroFlag, Ch_WParityFlag, Ch_WCarryFlag, Ch_W0OverflowFlag, Ch_W0SignFlag, Ch_W0AuxiliaryFlag)
-xmmreg,xmmrm          \2\x0F\x2E\110                  KATMAI,SSE
+xmmreg,xmmrm          \2\x0F\x2E\110                  KATMAI,SSE,SCL32
 
 [UNPCKHPS]
 (Ch_Mop2, Ch_Rop1)
@@ -2747,7 +2747,7 @@ xmmreg,xmmrm            \361\2\x0F\x58\110              WILLAMETTE,SSE2,SM
 
 [ADDSD]
 (Ch_Mop2, Ch_Rop1)
-xmmreg,xmmrm            \334\2\x0F\x58\110              WILLAMETTE,SSE2
+xmmreg,xmmrm            \334\2\x0F\x58\110              WILLAMETTE,SSE2,SCL64
 
 [ANDNPD]
 (Ch_Mop2, Ch_Rop1)
@@ -2764,7 +2764,7 @@ xmmreg,xmmrm            \361\2\x0F\xC2\110\1\x00        WILLAMETTE,SSE2,SM
 ; note: no SM flag on CMPxxSD, they use 64-bit memory location, not 128-bit
 [CMPEQSD]
 (Ch_All)
-xmmreg,xmmrm            \334\2\x0F\xC2\110\1\x00        WILLAMETTE,SSE2
+xmmreg,xmmrm            \334\2\x0F\xC2\110\1\x00        WILLAMETTE,SSE2,SCL64
 
 [CMPLEPD]
 (Ch_All)
@@ -2772,7 +2772,7 @@ xmmreg,xmmrm            \361\2\x0F\xC2\110\1\x02        WILLAMETTE,SSE2,SM
 
 [CMPLESD]
 (Ch_All)
-xmmreg,xmmrm            \334\2\x0F\xC2\110\1\x02        WILLAMETTE,SSE2
+xmmreg,xmmrm            \334\2\x0F\xC2\110\1\x02        WILLAMETTE,SSE2,SCL64
 
 [CMPLTPD]
 (Ch_All)
@@ -2780,7 +2780,7 @@ xmmreg,xmmrm            \361\2\x0F\xC2\110\1\x01        WILLAMETTE,SSE2,SM
 
 [CMPLTSD]
 (Ch_All)
-xmmreg,xmmrm            \334\2\x0F\xC2\110\1\x01        WILLAMETTE,SSE2
+xmmreg,xmmrm            \334\2\x0F\xC2\110\1\x01        WILLAMETTE,SSE2,SCL64
 
 [CMPNEQPD]
 (Ch_All)
@@ -2788,7 +2788,7 @@ xmmreg,xmmrm            \361\2\x0F\xC2\110\1\x04        WILLAMETTE,SSE2,SM
 
 [CMPNEQSD]
 (Ch_All)
-xmmreg,xmmrm            \334\2\x0F\xC2\110\1\x04        WILLAMETTE,SSE2
+xmmreg,xmmrm            \334\2\x0F\xC2\110\1\x04        WILLAMETTE,SSE2,SCL64
 
 [CMPNLEPD]
 (Ch_All)
@@ -2796,7 +2796,7 @@ xmmreg,xmmrm            \361\2\x0F\xC2\110\1\x06        WILLAMETTE,SSE2,SM
 
 [CMPNLESD]
 (Ch_All)
-xmmreg,xmmrm            \334\2\x0F\xC2\110\1\x06        WILLAMETTE,SSE2
+xmmreg,xmmrm            \334\2\x0F\xC2\110\1\x06        WILLAMETTE,SSE2,SCL64
 
 [CMPNLTPD]
 (Ch_All)
@@ -2804,7 +2804,7 @@ xmmreg,xmmrm            \361\2\x0F\xC2\110\1\x05        WILLAMETTE,SSE2,SM
 
 [CMPNLTSD]
 (Ch_All)
-xmmreg,xmmrm            \334\2\x0F\xC2\110\1\x05        WILLAMETTE,SSE2
+xmmreg,xmmrm            \334\2\x0F\xC2\110\1\x05        WILLAMETTE,SSE2,SCL64
 
 [CMPORDPD]
 (Ch_All)
@@ -2812,7 +2812,7 @@ xmmreg,xmmrm            \361\2\x0F\xC2\110\1\x07        WILLAMETTE,SSE2,SM
 
 [CMPORDSD]
 (Ch_All)
-xmmreg,xmmrm            \334\2\x0F\xC2\110\1\x07        WILLAMETTE,SSE2
+xmmreg,xmmrm            \334\2\x0F\xC2\110\1\x07        WILLAMETTE,SSE2,SCL64
 
 [CMPUNORDPD]
 (Ch_All)
@@ -2820,7 +2820,7 @@ xmmreg,xmmrm            \361\2\x0F\xC2\110\1\x03        WILLAMETTE,SSE2,SM
 
 [CMPUNORDSD]
 (Ch_All)
-xmmreg,xmmrm            \334\2\x0F\xC2\110\1\x03        WILLAMETTE,SSE2
+xmmreg,xmmrm            \334\2\x0F\xC2\110\1\x03        WILLAMETTE,SSE2,SCL64
 
 ; CMPPD/CMPSD must come after the specific ops; that way the disassembler will find the
 ; specific ops first and only disassemble illegal ones as cmppd/cmpsd.
@@ -2830,7 +2830,7 @@ xmmreg,xmmrm,imm        \361\2\x0F\xC2\110\26           WILLAMETTE,SSE2,SM2,SB,A
 
 [COMISD]
 (Ch_Rop1, Ch_Rop2, Ch_WFlags)
-xmmreg,xmmrm            \361\2\x0F\x2F\110              WILLAMETTE,SSE2
+xmmreg,xmmrm            \361\2\x0F\x2F\110              WILLAMETTE,SSE2,SCL64
 
 [CVTDQ2PD]
 (Ch_Wop2, Ch_Rop1)
@@ -2911,7 +2911,7 @@ xmmreg,xmmrm            \361\2\x0F\x5E\110            WILLAMETTE,SSE2,SM
 
 [DIVSD]
 (Ch_Mop2, Ch_Rop1)
-xmmreg,xmmrm            \334\2\x0F\x5E\110          WILLAMETTE,SSE2
+xmmreg,xmmrm            \334\2\x0F\x5E\110          WILLAMETTE,SSE2,SCL64
 
 [MAXPD]
 (Ch_All)
@@ -2919,7 +2919,7 @@ xmmreg,xmmrm            \361\2\x0F\x5F\110          WILLAMETTE,SSE2,SM
 
 [MAXSD]
 (Ch_All)
-xmmreg,xmmrm            \334\2\x0F\x5F\110          WILLAMETTE,SSE2
+xmmreg,xmmrm            \334\2\x0F\x5F\110          WILLAMETTE,SSE2,SCL64
 
 [MINPD]
 (Ch_All)
@@ -2927,7 +2927,7 @@ xmmreg,xmmrm            \361\2\x0F\x5D\110          WILLAMETTE,SSE2,SM
 
 [MINSD]
 (Ch_All)
-xmmreg,xmmrm            \334\2\x0F\x5D\110          WILLAMETTE,SSE2
+xmmreg,xmmrm            \334\2\x0F\x5D\110          WILLAMETTE,SSE2,SCL64
 
 [MOVAPD]
 (Ch_ROp1, Ch_WOp2)
@@ -2959,7 +2959,7 @@ xmmreg,xmmrm            \361\2\x0F\x59\110        WILLAMETTE,SSE2,SM
 
 [MULSD]
 (Ch_Mop2, Ch_Rop1)
-xmmreg,xmmrm            \334\2\x0F\x59\110        WILLAMETTE,SSE2
+xmmreg,xmmrm            \334\2\x0F\x59\110        WILLAMETTE,SSE2,SCL64
 
 [ORPD]
 (Ch_Mop2, Ch_Rop1)
@@ -2975,7 +2975,7 @@ xmmreg,xmmrm            \361\2\x0F\x51\110        WILLAMETTE,SSE2,SM
 
 [SQRTSD]
 (Ch_Wop2, Ch_Rop1)
-xmmreg,xmmrm            \334\2\x0F\x51\110        WILLAMETTE,SSE2
+xmmreg,xmmrm            \334\2\x0F\x51\110        WILLAMETTE,SSE2,SCL64
 
 
 [SUBPD]
@@ -2984,11 +2984,11 @@ xmmreg,xmmrm            \361\2\x0F\x5C\110        WILLAMETTE,SSE2,SM
 
 [SUBSD]
 (Ch_Mop2, Ch_Rop1)
-xmmreg,xmmrm            \334\2\x0F\x5C\110        WILLAMETTE,SSE2
+xmmreg,xmmrm            \334\2\x0F\x5C\110        WILLAMETTE,SSE2,SCL64
 
 [UCOMISD]
 (Ch_Rop1, Ch_Rop2, Ch_WZeroFlag, Ch_WParityFlag, Ch_WCarryFlag, Ch_W0OverflowFlag, Ch_W0SignFlag, Ch_W0AuxiliaryFlag)
-xmmreg,xmmrm            \361\2\x0F\x2E\110        WILLAMETTE,SSE2
+xmmreg,xmmrm            \361\2\x0F\x2E\110        WILLAMETTE,SSE2,SCL64
 
 [UNPCKHPD]
 (Ch_All)
@@ -3190,7 +3190,7 @@ mem,xmmreg              \333\2\x0F\x2B\101                        SSE4,SD
 
 [MOVNTSD]
 (Ch_All)
-mem,xmmreg              \334\325\2\x0F\x2B\101                SSE4 ;,SQ
+mem,xmmreg              \334\325\2\x0F\x2B\101                SSE4,SCL64 ;,SQ
 
 [INSERTQ]
 (Ch_All)
@@ -3488,11 +3488,11 @@ xmmreg,xmmrm,imm      \361\3\x0F\x3A\x09\110\26            SSE41,SM2,SB,AR2
 
 [ROUNDSS]
 (Ch_Wop2, Ch_Rop1)
-xmmreg,xmmrm,imm      \361\3\x0F\x3A\x0A\110\26            SSE41,SM2,SB,AR2
+xmmreg,xmmrm,imm      \361\3\x0F\x3A\x0A\110\26            SSE41,SM2,SB,AR2,SCL32
 
 [ROUNDSD]
 (Ch_Wop2, Ch_Rop1)
-xmmreg,xmmrm,imm      \361\3\x0F\x3A\x0B\110\26            SSE41,SM2,SB,AR2
+xmmreg,xmmrm,imm      \361\3\x0F\x3A\x0B\110\26            SSE41,SM2,SB,AR2,SCL64
 
 ;*******************************************************************************
 ;**********SSE4.2***************************************************************
@@ -3627,7 +3627,7 @@ zmmreg_mz,zmmreg,bmem32              \350\351\370\1\x58\75\120                AV
 
 [VADDSD]
 (Ch_Wop3, Ch_Rop2, Ch_Rop1)
-xmmreg_mz,xmmreg,mem64                    \334\350\352\362\370\1\x58\75\120         AVX,SANDYBRIDGE,T1S
+xmmreg_mz,xmmreg,mem64                    \334\350\352\362\370\1\x58\75\120         AVX,SANDYBRIDGE,T1S,SCL64
 xmmreg_mz,xmmreg,xmmreg_er                \334\350\352\362\370\1\x58\75\120         AVX,SANDYBRIDGE
 
 
@@ -4170,25 +4170,25 @@ zmmreg_mz,zmmreg_er                       \350\351\370\1\x5B\110
 
 [VCVTPD2DQ,vcvtpd2dqM]
 (Ch_Wop2, Ch_Rop1)
-xmmreg_mz,mem128                          \334\350\352\362\370\1\xE6\110            AVX,SANDYBRIDGE,TFV
-xmmreg_mz,mem256                          \334\350\352\362\364\370\1\xE6\110        AVX,SANDYBRIDGE,TFV
-xmmreg_mz,xmmreg                          \334\350\352\362\370\1\xE6\110            AVX,SANDYBRIDGE
+xmmreg_mz,xmmrm                           \334\350\352\362\370\1\xE6\110            AVX,SANDYBRIDGE,TFV
+xmmreg_mz,ymmrm                           \334\350\352\362\364\370\1\xE6\110        AVX,SANDYBRIDGE,TFV
 xmmreg_mz,bmem64                          \334\350\352\370\1\xE6\110                AVX512,BCST2,TFV
 xmmreg_mz,bmem64                          \334\350\352\364\370\1\xE6\110            AVX512,BCST4,TFV
-xmmreg_mz,ymmreg                          \334\350\352\362\364\370\1\xE6\110        AVX,SANDYBRIDGE
+
 ymmreg_mz,mem512                          \334\350\351\352\370\1\xE6\110            AVX512,TFV
 ymmreg_mz,bmem64                          \334\350\351\352\370\1\xE6\110            AVX512,BCST8,TFV
 ymmreg_mz,zmmreg_er                       \334\350\351\352\370\1\xE6\110            AVX512
 
 
+; VCVTPD2PS xmmreg_mz,mem256 must come first - map MemRefSize 256bits correct
+;                                              map all other MemrefSize (without broasdcast MemRef) to xmmreg, xmmrm 
 [VCVTPD2PS,vcvtpd2psM]
 (Ch_Wop2, Ch_Rop1)
-xmmreg_mz,mem128                          \350\352\361\362\370\1\x5A\110            AVX,SANDYBRIDGE,TFV
 xmmreg_mz,mem256                          \350\352\361\362\364\370\1\x5A\110        AVX,SANDYBRIDGE,TFV
-xmmreg_mz,xmmreg                          \350\352\361\362\370\1\x5A\110            AVX,SANDYBRIDGE
+xmmreg_mz,ymmreg                          \350\352\361\362\364\370\1\x5A\110        AVX,SANDYBRIDGE
+xmmreg_mz,xmmrm                           \350\352\361\362\370\1\x5A\110            AVX,SANDYBRIDGE,TFV
 xmmreg_mz,bmem64                          \350\352\361\370\1\x5A\110                AVX512,BCST2,TFV
 xmmreg_mz,bmem64                          \350\352\361\364\370\1\x5A\110            AVX512,BCST4,TFV
-xmmreg_mz,ymmreg                          \350\352\361\362\364\370\1\x5A\110        AVX,SANDYBRIDGE
 ymmreg_mz,mem512                          \350\351\352\361\370\1\x5A\110            AVX512,TFV
 ymmreg_mz,bmem64                          \350\351\352\361\370\1\x5A\110            AVX512,BCST8,TFV
 ymmreg_mz,zmmreg_er                       \350\351\352\361\370\1\x5A\110            AVX512
@@ -4205,11 +4205,9 @@ zmmreg_mz,ymmreg_sae                      \350\351\361\371\1\x13\110
 
 [VCVTPS2DQ]
 (Ch_Wop2, Ch_Rop1)
-xmmreg_mz,mem128                          \350\361\362\370\1\x5B\110                AVX,SANDYBRIDGE,TFV
-xmmreg_mz,xmmreg                          \350\361\362\370\1\x5B\110                AVX,SANDYBRIDGE
+xmmreg_mz,xmmrm                           \350\361\362\370\1\x5B\110                AVX,SANDYBRIDGE,TFV
+ymmreg_mz,ymmrm                           \350\361\362\364\370\1\x5B\110            AVX,SANDYBRIDGE,TFV
 xmmreg_mz,bmem32                          \350\361\370\1\x5B\110                    AVX512,TFV
-ymmreg_mz,mem256                          \350\361\362\364\370\1\x5B\110            AVX,SANDYBRIDGE,TFV
-ymmreg_mz,ymmreg                          \350\361\362\364\370\1\x5B\110            AVX,SANDYBRIDGE
 ymmreg_mz,bmem32                          \350\361\364\370\1\x5B\110                AVX512,TFV
 zmmreg_mz,mem512                          \350\351\361\370\1\x5B\110                AVX512,TFV
 zmmreg_mz,bmem32                          \350\351\361\370\1\x5B\110                AVX512,TFV
@@ -4221,8 +4219,7 @@ zmmreg_mz,zmmreg_er                       \350\351\361\370\1\x5B\110
 xmmreg_mz,mem64                           \350\362\370\1\x5A\110                    AVX,SANDYBRIDGE,THV
 xmmreg_mz,xmmreg                          \350\362\370\1\x5A\110                    AVX,SANDYBRIDGE
 xmmreg_mz,bmem32                          \350\370\1\x5A\110                        AVX512,BCST2,THV
-ymmreg_mz,mem128                          \350\362\364\370\1\x5A\110                AVX,SANDYBRIDGE,THV
-ymmreg_mz,xmmreg                          \350\362\364\370\1\x5A\110                AVX,SANDYBRIDGE
+ymmreg_mz,xmmrm                           \350\362\364\370\1\x5A\110                AVX,SANDYBRIDGE,THV
 ymmreg_mz,bmem32                          \350\364\370\1\x5A\110                    AVX512,BCST4,THV
 zmmreg_mz,mem256                          \350\351\370\1\x5A\110                    AVX512,THV
 zmmreg_mz,ymmreg_sae                      \350\351\370\1\x5A\110                    AVX512
@@ -4282,15 +4279,15 @@ reg32,xmmreg_er                           \333\350\362\370\1\x2D\110
 reg64,mem32                               \333\350\352\362\363\370\1\x2D\110        AVX,SANDYBRIDGE,T1F32
 reg64,xmmreg_er                           \333\350\352\362\363\370\1\x2D\110        AVX,SANDYBRIDGE
 
-
+; VCVTTPD2DQ xmmreg_mz,mem256 must come first - map MemRefSize 256bits correct
+;                                               map all other MemrefSize (without broasdcast MemRef) to xmmreg, xmmrm 
 [VCVTTPD2DQ,vcvttpd2dqM]
 (Ch_Wop2, Ch_Rop1)
-xmmreg_mz,mem128                          \350\352\361\362\370\1\xE6\110            AVX,SANDYBRIDGE,AVX512,TFV
 xmmreg_mz,mem256                          \350\352\361\362\364\370\1\xE6\110        AVX,SANDYBRIDGE,AVX512,TFV
-xmmreg_mz,xmmreg                          \350\352\361\362\370\1\xE6\110            AVX,SANDYBRIDGE,AVX512
+xmmreg_mz,ymmreg                          \350\352\361\362\364\370\1\xE6\110        AVX,SANDYBRIDGE
+xmmreg_mz,xmmrm                           \350\352\361\362\370\1\xE6\110            AVX,SANDYBRIDGE,AVX512,TFV
 xmmreg_mz,bmem64                          \350\352\361\370\1\xE6\110                AVX512,BCST2,TFV
 xmmreg_mz,bmem64                          \350\352\361\364\370\1\xE6\110            AVX512,BCST4,TFV
-xmmreg_mz,ymmreg                          \350\352\361\362\364\370\1\xE6\110        AVX,SANDYBRIDGE
 ymmreg_mz,mem512                          \350\351\352\361\370\1\xE6\110            AVX512,TFV
 ymmreg_mz,bmem64                          \350\351\352\361\370\1\xE6\110            AVX512,BCST8,TFV
 ymmreg_mz,zmmreg_sae                      \350\351\352\361\370\1\xE6\110            AVX512
@@ -4503,34 +4500,22 @@ xmmreg_mz,xmmreg,xmmreg_sae               \333\350\362\370\1\x5D\75\120
 
 [VMOVAPD]
 (Ch_Wop2, Ch_Rop1)
-mem128_m,xmmreg                           \350\352\361\362\370\1\x29\101            AVX,SANDYBRIDGE,TFVM
-mem256_m,ymmreg                           \350\352\361\362\364\370\1\x29\101        AVX,SANDYBRIDGE,TFVM
-mem512_m,zmmreg                           \350\351\352\361\370\1\x29\101            AVX512,TFVM
-xmmreg_mz,mem128                          \350\352\361\362\370\1\x28\110            AVX,SANDYBRIDGE,TFVM
-xmmreg_mz,xmmreg                          \350\352\361\362\370\1\x29\101            AVX,SANDYBRIDGE
-xmmreg_mz,xmmreg                          \350\352\361\362\370\1\x28\110            AVX,SANDYBRIDGE
-ymmreg_mz,mem256                          \350\352\361\362\364\370\1\x28\110        AVX,SANDYBRIDGE,TFVM
-ymmreg_mz,ymmreg                          \350\352\361\362\364\370\1\x29\101        AVX,SANDYBRIDGE
-ymmreg_mz,ymmreg                          \350\352\361\362\364\370\1\x28\110        AVX,SANDYBRIDGE
-zmmreg_mz,mem512                          \350\351\352\361\370\1\x28\110            AVX512,TFVM
-zmmreg_mz,zmmreg                          \350\351\352\361\370\1\x28\110            AVX512
-zmmreg_mz,zmmreg                          \350\351\352\361\370\1\x29\101            AVX512
+xmmrm_mz,xmmreg                           \350\352\361\362\370\1\x29\101            AVX,SANDYBRIDGE,TFVM
+ymmrm_mz,ymmreg                           \350\352\361\362\364\370\1\x29\101        AVX,SANDYBRIDGE,TFVM
+zmmrm_mz,zmmreg                           \350\351\352\361\370\1\x29\101            AVX512,TFVM
+xmmreg_mz,xmmrm                           \350\352\361\362\370\1\x28\110            AVX,SANDYBRIDGE,TFVM
+ymmreg_mz,ymmrm                           \350\352\361\362\364\370\1\x28\110        AVX,SANDYBRIDGE,TFVM
+zmmreg_mz,zmmrm                           \350\351\352\361\370\1\x28\110            AVX512,TFVM
 
 
 [VMOVAPS]
 (Ch_Wop2, Ch_Rop1)
-mem128_m,xmmreg                           \350\362\370\1\x29\101                    AVX,SANDYBRIDGE,TFVM
-mem256_m,ymmreg                           \350\362\364\370\1\x29\101                AVX,SANDYBRIDGE,TFVM
-mem512_m,zmmreg                           \350\351\370\1\x29\101                    AVX512,TFVM
-xmmreg_mz,mem128                          \350\362\370\1\x28\110                    AVX,SANDYBRIDGE,TFVM
-xmmreg_mz,xmmreg                          \350\362\370\1\x29\101                    AVX,SANDYBRIDGE
-xmmreg_mz,xmmreg                          \350\362\370\1\x28\110                    AVX,SANDYBRIDGE
-ymmreg_mz,mem256                          \350\362\364\370\1\x28\110                AVX,SANDYBRIDGE,TFVM
-ymmreg_mz,ymmreg                          \350\362\364\370\1\x28\110                AVX,SANDYBRIDGE
-ymmreg_mz,ymmreg                          \350\362\364\370\1\x29\101                AVX,SANDYBRIDGE
-zmmreg_mz,mem512                          \350\351\370\1\x28\110                    AVX512,TFVM
-zmmreg_mz,zmmreg                          \350\351\370\1\x29\101                    AVX512
-zmmreg_mz,zmmreg                          \350\351\370\1\x28\110                    AVX512
+xmmrm_mz,xmmreg                           \350\362\370\1\x29\101                    AVX,SANDYBRIDGE,TFVM
+ymmrm_mz,ymmreg                           \350\362\364\370\1\x29\101                AVX,SANDYBRIDGE,TFVM
+zmmrm_mz,zmmreg                           \350\351\370\1\x29\101                    AVX512,TFVM
+xmmreg_mz,xmmrm                           \350\362\370\1\x28\110                    AVX,SANDYBRIDGE,TFVM
+ymmreg_mz,ymmrm                           \350\362\364\370\1\x28\110                AVX,SANDYBRIDGE,TFVM
+zmmreg_mz,zmmrm                           \350\351\370\1\x28\110                    AVX512,TFVM
 
 
 [VMOVD]
@@ -4678,28 +4663,21 @@ xmmreg_mz,xmmreg,xmmreg                   \333\350\362\370\1\x10\75\120
 
 [VMOVUPD]
 (Ch_Wop2, Ch_Rop1)
-mem128_m,xmmreg                           \350\352\361\362\370\1\x11\101            AVX,SANDYBRIDGE,TFVM
-mem256_m,ymmreg                           \350\352\361\362\364\370\1\x11\101        AVX,SANDYBRIDGE,TFVM
-mem512_m,zmmreg                           \350\351\352\361\370\1\x11\101            AVX512,TFVM
-xmmreg_mz,xmmreg                          \350\352\361\362\370\1\x11\101            AVX,SANDYBRIDGE
+xmmrm_mz,xmmreg                           \350\352\361\362\370\1\x11\101            AVX,SANDYBRIDGE,TFVM
+ymmrm_mz,ymmreg                           \350\352\361\362\364\370\1\x11\101        AVX,SANDYBRIDGE,TFVM
+zmmrm_mz,zmmreg                           \350\351\352\361\370\1\x11\101            AVX512,TFVM
 xmmreg_mz,xmmrm                           \350\352\361\362\370\1\x10\110            AVX,SANDYBRIDGE,TFVM
-ymmreg_mz,ymmreg                          \350\352\361\362\364\370\1\x11\101        AVX,SANDYBRIDGE
 ymmreg_mz,ymmrm                           \350\352\361\362\364\370\1\x10\110        AVX,SANDYBRIDGE,TFVM
-zmmreg_mz,zmmreg                          \350\351\352\361\370\1\x11\101            AVX512
 zmmreg_mz,zmmrm                           \350\351\352\361\370\1\x10\110            AVX512,TFVM
 
 
-
 [VMOVUPS]
 (Ch_Wop2, Ch_Rop1)
-mem128_m,xmmreg                           \350\362\370\1\x11\101                    AVX,SANDYBRIDGE,TFVM
-mem256_m,ymmreg                           \350\362\364\370\1\x11\101                AVX,SANDYBRIDGE,TFVM
-mem512_m,zmmreg                           \350\351\370\1\x11\101                    AVX512,TFVM
-xmmreg_mz,xmmreg                          \350\362\370\1\x11\101                    AVX,SANDYBRIDGE
+xmmrm_mz,xmmreg                           \350\362\370\1\x11\101                    AVX,SANDYBRIDGE,TFVM
+ymmrm_mz,ymmreg                           \350\362\364\370\1\x11\101                AVX,SANDYBRIDGE,TFVM
+zmmrm_mz,zmmreg                           \350\351\370\1\x11\101                    AVX512,TFVM
 xmmreg_mz,xmmrm                           \350\362\370\1\x10\110                    AVX,SANDYBRIDGE,TFVM
-ymmreg_mz,ymmreg                          \350\362\364\370\1\x11\101                AVX,SANDYBRIDGE
 ymmreg_mz,ymmrm                           \350\362\364\370\1\x10\110                AVX,SANDYBRIDGE,TFVM
-zmmreg_mz,zmmreg                          \350\351\370\1\x11\101                    AVX512
 zmmreg_mz,zmmrm                           \350\351\370\1\x10\110                    AVX512,TFVM
 
 
@@ -5294,30 +5272,24 @@ zmmreg_mz,xmmreg                          \350\351\361\371\1\x22\110
 (Ch_All)
 xmmreg_mz,mem64                           \350\361\362\371\1\x20\110                AVX,SANDYBRIDGE,THVM
 xmmreg_mz,xmmreg                          \350\361\362\371\1\x20\110                AVX,SANDYBRIDGE
-ymmreg_mz,mem128                          \350\361\362\364\371\1\x20\110            AVX2,THVM
-ymmreg_mz,xmmreg                          \350\361\362\364\371\1\x20\110            AVX2
-zmmreg_mz,mem256                          \350\351\361\371\1\x20\110                AVX512,THVM
-zmmreg_mz,ymmreg                          \350\351\361\371\1\x20\110                AVX512
+ymmreg_mz,xmmrm                           \350\361\362\364\371\1\x20\110            AVX2,THVM
+zmmreg_mz,ymmrm                           \350\351\361\371\1\x20\110                AVX512,THVM
 
 
 [VPMOVSXDQ]
 (Ch_All)
 xmmreg_mz,mem64                           \350\361\362\371\1\x25\110                AVX,SANDYBRIDGE,THVM
 xmmreg_mz,xmmreg                          \350\361\362\371\1\x25\110                AVX,SANDYBRIDGE
-ymmreg_mz,mem128                          \350\361\362\364\371\1\x25\110            AVX2,THVM
-ymmreg_mz,xmmreg                          \350\361\362\364\371\1\x25\110            AVX2
-zmmreg_mz,mem256                          \350\351\361\371\1\x25\110                AVX512,THVM
-zmmreg_mz,ymmreg                          \350\351\361\371\1\x25\110                AVX512
+ymmreg_mz,xmmrm                           \350\361\362\364\371\1\x25\110            AVX2,THVM
+zmmreg_mz,ymmrm                           \350\351\361\371\1\x25\110                AVX512,THVM
 
 
 [VPMOVSXWD]
 (Ch_All)
 xmmreg_mz,mem64                           \350\361\362\371\1\x23\110                AVX,SANDYBRIDGE,THVM
 xmmreg_mz,xmmreg                          \350\361\362\371\1\x23\110                AVX,SANDYBRIDGE
-ymmreg_mz,mem128                          \350\361\362\364\371\1\x23\110            AVX2,THVM
-ymmreg_mz,xmmreg                          \350\361\362\364\371\1\x23\110            AVX2
-zmmreg_mz,mem256                          \350\351\361\371\1\x23\110                AVX512,THVM
-zmmreg_mz,ymmreg                          \350\351\361\371\1\x23\110                AVX512
+ymmreg_mz,xmmrm                           \350\361\362\364\371\1\x23\110            AVX2,THVM
+zmmreg_mz,ymmrm                           \350\351\361\371\1\x23\110                AVX512,THVM
 
 
 [VPMOVSXWQ]
@@ -5326,8 +5298,8 @@ xmmreg_mz,mem32                           \350\361\362\371\1\x24\110
 xmmreg_mz,xmmreg                          \350\361\362\371\1\x24\110                AVX,SANDYBRIDGE
 ymmreg_mz,mem64                           \350\361\362\364\371\1\x24\110            AVX2,TQVM
 ymmreg_mz,xmmreg                          \350\361\362\364\371\1\x24\110            AVX2
-zmmreg_mz,mem128                          \350\351\361\371\1\x24\110                AVX512,TQVM
-zmmreg_mz,xmmreg                          \350\351\361\371\1\x24\110                AVX512
+zmmreg_mz,xmmrm                           \350\351\361\371\1\x24\110                AVX512,TQVM
+
 
 
 [VPMOVZXBD]
@@ -5336,8 +5308,7 @@ xmmreg_mz,mem32                           \350\361\362\371\1\x31\110
 xmmreg_mz,xmmreg                          \350\361\362\371\1\x31\110                AVX,SANDYBRIDGE
 ymmreg_mz,mem64                           \350\361\362\364\371\1\x31\110            AVX2,TQVM
 ymmreg_mz,xmmreg                          \350\361\362\364\371\1\x31\110            AVX2
-zmmreg_mz,mem128                          \350\351\361\371\1\x31\110                AVX512,TQVM
-zmmreg_mz,xmmreg                          \350\351\361\371\1\x31\110                AVX512
+zmmreg_mz,xmmrm                           \350\351\361\371\1\x31\110                AVX512,TQVM
 
 
 [VPMOVZXBQ]
@@ -5354,30 +5325,24 @@ zmmreg_mz,xmmreg                          \350\351\361\371\1\x32\110
 (Ch_All)
 xmmreg_mz,mem64                           \350\361\362\371\1\x30\110                AVX,SANDYBRIDGE,THVM
 xmmreg_mz,xmmreg                          \350\361\362\371\1\x30\110                AVX,SANDYBRIDGE
-ymmreg_mz,mem128                          \350\361\362\364\371\1\x30\110            AVX2,THVM
-ymmreg_mz,xmmreg                          \350\361\362\364\371\1\x30\110            AVX2
-zmmreg_mz,mem256                          \350\351\361\371\1\x30\110                AVX512,THVM
-zmmreg_mz,ymmreg                          \350\351\361\371\1\x30\110                AVX512
+ymmreg_mz,xmmrm                           \350\361\362\364\371\1\x30\110            AVX2,THVM
+zmmreg_mz,ymmrm                           \350\351\361\371\1\x30\110                AVX512,THVM
 
 
 [VPMOVZXDQ]
 (Ch_All)
 xmmreg_mz,mem64                           \350\361\362\371\1\x35\110                AVX,SANDYBRIDGE,THVM
 xmmreg_mz,xmmreg                          \350\361\362\371\1\x35\110                AVX,SANDYBRIDGE
-ymmreg_mz,mem128                          \350\361\362\364\371\1\x35\110            AVX2,THVM
-ymmreg_mz,xmmreg                          \350\361\362\364\371\1\x35\110            AVX2
-zmmreg_mz,mem256                          \350\351\361\371\1\x35\110                AVX512,THVM
-zmmreg_mz,ymmreg                          \350\351\361\371\1\x35\110                AVX512
+ymmreg_mz,xmmrm                           \350\361\362\364\371\1\x35\110            AVX2,THVM
+zmmreg_mz,ymmrm                           \350\351\361\371\1\x35\110                AVX512,THVM
 
 
 [VPMOVZXWD]
 (Ch_All)
 xmmreg_mz,mem64                           \350\361\362\371\1\x33\110                AVX,SANDYBRIDGE,THVM
 xmmreg_mz,xmmreg                          \350\361\362\371\1\x33\110                AVX,SANDYBRIDGE
-ymmreg_mz,mem128                          \350\361\362\364\371\1\x33\110            AVX2,THVM
-ymmreg_mz,xmmreg                          \350\361\362\364\371\1\x33\110            AVX2
-zmmreg_mz,mem256                          \350\351\361\371\1\x33\110                AVX512,THVM
-zmmreg_mz,ymmreg                          \350\351\361\371\1\x33\110                AVX512
+ymmreg_mz,xmmrm                           \350\361\362\364\371\1\x33\110            AVX2,THVM
+zmmreg_mz,ymmrm                           \350\351\361\371\1\x33\110                AVX512,THVM
 
 
 [VPMOVZXWQ]
@@ -6176,15 +6141,14 @@ zmmreg_mz,zmmreg,bmem32                   \350\351\361\371\1\x36\75\120
 
 [VPERMPD]
 (Ch_All)
-ymmreg_mz,mem256,imm8                     \350\352\361\362\363\364\372\1\x01\110\26  AVX2,TFV
-ymmreg_mz,ymmreg,imm8                     \350\352\361\362\363\364\372\1\x01\110\26  AVX2,TFV
+ymmreg_mz,ymmrm,imm8                      \350\352\361\362\363\364\372\1\x01\110\26 AVX2,TFV
 ymmreg_mz,bmem64,imm8                     \350\352\361\364\372\1\x01\110\26         AVX512,TFV
+zmmreg_mz,zmmrm,imm8                      \350\351\352\361\372\1\x01\110\26         AVX512,TFV
+zmmreg_mz,bmem64,imm8                     \350\351\352\361\372\1\x01\110\26         AVX512,TFV
 ymmreg_mz,ymmreg,ymmrm                    \350\352\361\364\371\1\x16\75\120         AVX512,TFV
 ymmreg_mz,ymmreg,bmem64                   \350\352\361\364\371\1\x16\75\120         AVX512,TFV
 zmmreg_mz,zmmreg,zmmrm                    \350\351\352\361\371\1\x16\75\120         AVX512,TFV
 zmmreg_mz,zmmreg,bmem64                   \350\351\352\361\371\1\x16\75\120         AVX512,TFV
-zmmreg_mz,zmmrm,imm8                      \350\351\352\361\372\1\x01\110\26         AVX512,TFV
-zmmreg_mz,bmem64,imm8                     \350\351\352\361\372\1\x01\110\26         AVX512,TFV
 
 
 [VPERMPS]
@@ -6199,12 +6163,12 @@ zmmreg_mz,zmmreg,bmem32                   \350\351\361\371\1\x16\75\120
 (Ch_All)
 ymmreg_mz,ymmrm,imm8                      \350\352\361\362\363\364\372\1\x00\110\26  AVX2,TFV
 ymmreg_mz,bmem64,imm8                     \350\352\361\364\372\1\x00\110\26         AVX512,TFV
+zmmreg_mz,zmmrm,imm8                      \350\351\352\361\372\1\x00\110\26         AVX512,TFV
+zmmreg_mz,bmem64,imm8                     \350\351\352\361\372\1\x00\110\26         AVX512,TFV
 ymmreg_mz,ymmreg,ymmrm                    \350\352\361\364\371\1\x36\75\120         AVX512,TFV
 ymmreg_mz,ymmreg,bmem64                   \350\352\361\364\371\1\x36\75\120         AVX512,TFV
 zmmreg_mz,zmmreg,zmmrm                    \350\351\352\361\371\1\x36\75\120         AVX512,TFV
 zmmreg_mz,zmmreg,bmem64                   \350\351\352\361\371\1\x36\75\120         AVX512,TFV
-zmmreg_mz,zmmrm,imm8                      \350\351\352\361\372\1\x00\110\26         AVX512,TFV
-zmmreg_mz,bmem64,imm8                     \350\351\352\361\372\1\x00\110\26         AVX512,TFV
 
 
 [VPMASKMOVD]
@@ -6449,13 +6413,13 @@ zmmreg_mz,zmmreg,bmem32                   \350\351\361\371\1\x98\75\120
 
 [VFMADD132SD]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
-xmmreg_mz,xmmreg,mem64                    \350\352\361\362\363\371\1\x99\75\120     FMA,T1S
+xmmreg_mz,xmmreg,xmmrm                    \350\352\361\362\363\371\1\x99\75\120     FMA,T1S,SCL64
 xmmreg_mz,xmmreg,xmmreg_er                \350\352\361\362\363\371\1\x99\75\120     FMA
 
 [VFMADD132SS]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
 xmmreg_mz,xmmreg,xmmreg_er                \350\361\362\371\1\x99\75\120             FMA
-xmmreg_mz,xmmreg,mem32                    \350\361\362\371\1\x99\75\120             FMA,T1S
+xmmreg_mz,xmmreg,xmmrm                    \350\361\362\371\1\x99\75\120             FMA,T1S,SCL32
 
 [VFMADD213PD]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
@@ -6479,13 +6443,13 @@ zmmreg_mz,zmmreg,bmem32                   \350\351\361\371\1\xA8\75\120
 
 [VFMADD213SD]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
-xmmreg_mz,xmmreg,mem64                    \350\352\361\362\363\371\1\xA9\75\120     FMA,T1S
+xmmreg_mz,xmmreg,xmmrm                    \350\352\361\362\363\371\1\xA9\75\120     FMA,T1S,SCL64
 xmmreg_mz,xmmreg,xmmreg_er                \350\352\361\362\363\371\1\xA9\75\120     FMA
 
 [VFMADD213SS]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
 xmmreg_mz,xmmreg,xmmreg_er                \350\361\362\371\1\xA9\75\120             FMA
-xmmreg_mz,xmmreg,mem32                    \350\361\362\371\1\xA9\75\120             FMA,T1S
+xmmreg_mz,xmmreg,xmmrm                    \350\361\362\371\1\xA9\75\120             FMA,T1S,SCL32
 
 [VFMADD231PD]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
@@ -6510,12 +6474,12 @@ zmmreg_mz,zmmreg,bmem32                   \350\351\361\371\1\xB8\75\120
 [VFMADD231SD]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
 xmmreg_mz,xmmreg,xmmreg_er                \350\352\361\362\363\371\1\xB9\75\120     FMA
-xmmreg_mz,xmmreg,mem64                    \350\352\361\362\363\371\1\xB9\75\120     FMA,T1S
+xmmreg_mz,xmmreg,xmmrm                    \350\352\361\362\363\371\1\xB9\75\120     FMA,T1S,SCL64
 
 [VFMADD231SS]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
 xmmreg_mz,xmmreg,xmmreg_er                \350\361\362\371\1\xB9\75\120             FMA
-xmmreg_mz,xmmreg,mem32                    \350\361\362\371\1\xB9\75\120             FMA,T1S
+xmmreg_mz,xmmreg,xmmrm                    \350\361\362\371\1\xB9\75\120             FMA,T1S,SCL32
 
 [VFMADDSUB132PD]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
@@ -6600,11 +6564,11 @@ zmmreg_mz,zmmreg,bmem32                   \350\351\361\371\1\x9A\75\120
 [VFMSUB132SD]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
 xmmreg_mz,xmmreg,xmmreg_er                \350\352\361\362\363\371\1\x9B\75\120     FMA
-xmmreg_mz,xmmreg,mem64                    \350\352\361\362\363\371\1\x9B\75\120     FMA,T1S
+xmmreg_mz,xmmreg,xmmrm                    \350\352\361\362\363\371\1\x9B\75\120     FMA,T1S,SCL64
 
 [VFMSUB132SS]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
-xmmreg_mz,xmmreg,mem32                    \350\361\362\371\1\x9B\75\120             FMA,T1S
+xmmreg_mz,xmmreg,xmmrm                    \350\361\362\371\1\x9B\75\120             FMA,T1S,SCL32
 xmmreg_mz,xmmreg,xmmreg_er                \350\361\362\371\1\x9B\75\120             FMA
 
 [VFMSUB213PD]
@@ -6630,12 +6594,12 @@ zmmreg_mz,zmmreg,bmem32                   \350\351\361\371\1\xAA\75\120
 [VFMSUB213SD]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
 xmmreg_mz,xmmreg,xmmreg_er                \350\352\361\362\363\371\1\xAB\75\120     FMA
-xmmreg_mz,xmmreg,mem64                    \350\352\361\362\363\371\1\xAB\75\120     FMA,T1S
+xmmreg_mz,xmmreg,xmmrm                    \350\352\361\362\363\371\1\xAB\75\120     FMA,T1S,SCL64
 
 [VFMSUB213SS]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
 xmmreg_mz,xmmreg,xmmreg_er                \350\361\362\371\1\xAB\75\120             FMA
-xmmreg_mz,xmmreg,mem32                    \350\361\362\371\1\xAB\75\120             FMA,T1S
+xmmreg_mz,xmmreg,xmmrm                    \350\361\362\371\1\xAB\75\120             FMA,T1S,SCL32
 
 [VFMSUB231PD]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
@@ -6660,11 +6624,11 @@ zmmreg_mz,zmmreg,bmem32                   \350\351\361\371\1\xBA\75\120
 [VFMSUB231SD]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
 xmmreg_mz,xmmreg,xmmreg_er                \350\352\361\362\363\371\1\xBB\75\120     FMA
-xmmreg_mz,xmmreg,mem64                    \350\352\361\362\363\371\1\xBB\75\120     FMA,T1S
+xmmreg_mz,xmmreg,xmmrm                    \350\352\361\362\363\371\1\xBB\75\120     FMA,T1S,SCL64
 
 [VFMSUB231SS]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
-xmmreg_mz,xmmreg,mem32                    \350\361\362\371\1\xBB\75\120             FMA,T1S
+xmmreg_mz,xmmreg,xmmrm                    \350\361\362\371\1\xBB\75\120             FMA,T1S,SCL32
 xmmreg_mz,xmmreg,xmmreg_er                \350\361\362\371\1\xBB\75\120             FMA
 
 [VFMSUBADD132PD]
@@ -6749,12 +6713,12 @@ zmmreg_mz,zmmreg,zmmreg_er                \350\351\361\371\1\x9C\75\120
 
 [VFNMADD132SD]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
-xmmreg_mz,xmmreg,mem64                    \350\352\361\362\363\371\1\x9D\75\120     FMA,T1S
+xmmreg_mz,xmmreg,xmmrm                    \350\352\361\362\363\371\1\x9D\75\120     FMA,T1S,SCL64
 xmmreg_mz,xmmreg,xmmreg_er                \350\352\361\362\363\371\1\x9D\75\120     FMA
 
 [VFNMADD132SS]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
-xmmreg_mz,xmmreg,mem32                    \350\361\362\371\1\x9D\75\120             FMA,T1S
+xmmreg_mz,xmmreg,xmmrm                    \350\361\362\371\1\x9D\75\120             FMA,T1S,SCL32
 xmmreg_mz,xmmreg,xmmreg_er                \350\361\362\371\1\x9D\75\120             FMA
 
 [VFNMADD213PD]
@@ -6780,12 +6744,12 @@ zmmreg_mz,zmmreg,zmmreg_er                \350\351\361\371\1\xAC\75\120
 [VFNMADD213SD]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
 xmmreg_mz,xmmreg,xmmreg_er                \350\352\361\362\363\371\1\xAD\75\120     FMA
-xmmreg_mz,xmmreg,mem64                    \350\352\361\362\363\371\1\xAD\75\120     FMA,T1S
+xmmreg_mz,xmmreg,xmmrm                    \350\352\361\362\363\371\1\xAD\75\120     FMA,T1S,SCL64
 
 [VFNMADD213SS]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
 xmmreg_mz,xmmreg,xmmreg_er                \350\361\362\371\1\xAD\75\120             FMA
-xmmreg_mz,xmmreg,mem32                    \350\361\362\371\1\xAD\75\120             FMA,T1S
+xmmreg_mz,xmmreg,xmmrm                   \350\361\362\371\1\xAD\75\120             FMA,T1S,SCL32
 
 [VFNMADD231PD]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
@@ -6809,13 +6773,13 @@ zmmreg_mz,zmmreg,bmem32                   \350\351\361\371\1\xBC\75\120
 
 [VFNMADD231SD]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
-xmmreg,xmmreg,mem64                       \361\362\363\371\1\xBD\75\120             FMA
+xmmreg,xmmreg,xmmrm                       \361\362\363\371\1\xBD\75\120             FMA,T1S,SCL64
 xmmreg_mz,xmmreg,xmmreg_er                \350\352\361\362\363\371\1\xBD\75\120     FMA
 
 [VFNMADD231SS]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
 xmmreg,xmmreg,xmmreg                      \361\362\371\1\xBD\75\120                 FMA
-xmmreg_mz,xmmreg,mem32                    \350\361\362\371\1\xBD\75\120             FMA,T1S
+xmmreg_mz,xmmreg,xmmrm                    \350\361\362\371\1\xBD\75\120             FMA,T1S,SCL32
 
 [VFNMSUB132PD]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
@@ -6839,13 +6803,13 @@ zmmreg_mz,zmmreg,bmem32                   \350\351\361\371\1\x9E\75\120
 
 [VFNMSUB132SD]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
-xmmreg_mz,xmmreg,mem64                    \350\352\361\362\363\371\1\x9F\75\120     FMA,T1S
+xmmreg_mz,xmmreg,xmmrm                    \350\352\361\362\363\371\1\x9F\75\120     FMA,T1S,SCL64
 xmmreg_mz,xmmreg,xmmreg_er                \350\352\361\362\363\371\1\x9F\75\120     FMA
 
 [VFNMSUB132SS]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
 xmmreg_mz,xmmreg,xmmreg_er                \350\361\362\371\1\x9F\75\120             FMA
-xmmreg_mz,xmmreg,mem32                    \350\361\362\371\1\x9F\75\120             FMA,T1S
+xmmreg_mz,xmmreg,xmmrm                    \350\361\362\371\1\x9F\75\120             FMA,T1S,SCL32
 
 [VFNMSUB213PD]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
@@ -6869,12 +6833,12 @@ zmmreg_mz,zmmreg,zmmreg_er                \350\351\361\371\1\xAE\75\120
 
 [VFNMSUB213SD]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
-xmmreg_mz,xmmreg,mem64                    \350\352\361\362\363\371\1\xAF\75\120     FMA,T1S
+xmmreg_mz,xmmreg,xmmrm                    \350\352\361\362\363\371\1\xAF\75\120     FMA,T1S,SCL64
 xmmreg_mz,xmmreg,xmmreg_er                \350\352\361\362\363\371\1\xAF\75\120     FMA
 
 [VFNMSUB213SS]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
-xmmreg_mz,xmmreg,mem32                    \350\361\362\371\1\xAF\75\120             FMA,T1S
+xmmreg_mz,xmmreg,xmmrm                    \350\361\362\371\1\xAF\75\120             FMA,T1S,SCL32
 xmmreg_mz,xmmreg,xmmreg_er                \350\361\362\371\1\xAF\75\120             FMA
 
 [VFNMSUB231PD]
@@ -6900,12 +6864,12 @@ zmmreg_mz,zmmreg,bmem32                   \350\351\361\371\1\xBE\75\120
 [VFNMSUB231SD]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
 xmmreg_mz,xmmreg,xmmreg_er                \350\352\361\362\363\371\1\xBF\75\120     FMA
-xmmreg_mz,xmmreg,mem64                    \350\352\361\362\363\371\1\xBF\75\120     FMA,T1S
+xmmreg_mz,xmmreg,xmmrm                    \350\352\361\362\363\371\1\xBF\75\120     FMA,T1S,SCL64
 
 [VFNMSUB231SS]
 (Ch_Mop3, Ch_Rop2, Ch_Rop1)
 xmmreg_mz,xmmreg,xmmreg_er                \350\361\362\371\1\xBF\75\120             FMA
-xmmreg_mz,xmmreg,mem32                    \350\361\362\371\1\xBF\75\120             FMA,T1S
+xmmreg_mz,xmmreg,xmmrm                    \350\361\362\371\1\xBF\75\120             FMA,T1S,SCL32
 
 
 ;*******************************************************************************