瀏覽代碼

bugfix internal assembler-reader x86 opsize local var

git-svn-id: branches/tg74/avx512-0037785@47606 -
tg74 4 年之前
父節點
當前提交
fdfe06382a
共有 2 個文件被更改,包括 33 次插入6 次删除
  1. 27 0
      compiler/x86/rax86.pas
  2. 6 6
      tests/utils/avx/avxopcodes.pas

+ 27 - 0
compiler/x86/rax86.pas

@@ -1952,6 +1952,33 @@ begin
              ai.loadlocal(i-1,localsym,localsymofs,localindexreg,
                           localscale,localgetoffset,localforceref);
              ai.oper[i-1]^.localoper^.localsegment:=localsegment;
+
+             if MemRefInfo(opcode).ExistsSSEAVX then
+             begin
+               asize := 0;
+
+               case operands[i].size of
+                 OS_32,OS_M32: if (operands[i].HasType) or
+                                  (MemRefInfo(opcode).MemRefSize = msiMem32) or
+                                  (MemRefInfo(opcode).MemRefSizeBCST = msbBCST32)
+                                  //(((tx86operand(operands[i]).vopext and OTVE_VECTOR_BCST) = OTVE_VECTOR_BCST) and
+                                  //  (MemRefInfo(opcode).MemRefSizeBCST = msbBCST32)
+                                  //)
+                                   then
+                                asize:=OT_BITS32;
+                 OS_64,OS_M64: if (operands[i].HasType) or
+                                  (MemRefInfo(opcode).MemRefSize = msiMem64) or
+                                  //(((tx86operand(operands[i]).vopext and OTVE_VECTOR_BCST) = OTVE_VECTOR_BCST) and
+                                  //  (MemRefInfo(opcode).MemRefSizeBCST = msbBCST64)
+                                  //) then
+                                  (MemRefInfo(opcode).MemRefSizeBCST = msbBCST64) then
+                                asize:=OT_BITS64;
+                          else;
+               end;
+
+               if asize<>0 then
+                 ai.oper[i-1]^.ot:=(ai.oper[i-1]^.ot and not OT_SIZE_MASK) or asize;
+             end;
            end;
        OPR_REFERENCE:
          begin

+ 6 - 6
tests/utils/avx/avxopcodes.pas

@@ -200,10 +200,10 @@ begin
   FOpCodeList.Add('vaddpd,1,1,1,XMMREG_MZ,XMMREG,XMMRM,');
   FOpCodeList.Add('vaddpd,1,1,1,XMMREG_MZ,XMMREG,2B64,');
   FOpCodeList.Add('vaddpd,1,1,1,YMMREG_MZ,YMMREG,YMMRM,');
-  FOpCodeList.Add('vaddpd,1,1,1,YMMREG_MZ,YMMREG,4B32,');
+  FOpCodeList.Add('vaddpd,1,1,1,YMMREG_MZ,YMMREG,4B64,');
   FOpCodeList.Add('vaddpd,1,1,1,ZMMREG_MZ,ZMMREG,ZMMREG_ER,');
   FOpCodeList.Add('vaddpd,1,1,1,ZMMREG_MZ,ZMMREG,MEM512,');
-  FOpCodeList.Add('vaddpd,1,1,1,ZMMREG_MZ,ZMMREG,8B32,');
+  FOpCodeList.Add('vaddpd,1,1,1,ZMMREG_MZ,ZMMREG,8B64,');
   FOpCodeList.Add('vaddps,1,1,1,XMMREG_MZ,XMMREG,XMMRM,');
   FOpCodeList.Add('vaddps,1,1,1,XMMREG_MZ,XMMREG,4B32,');
   FOpCodeList.Add('vaddps,1,1,1,YMMREG_MZ,YMMREG,YMMRM,');
@@ -228,9 +228,9 @@ begin
   FOpCodeList.Add('vandnpd,1,1,1,XMMREG_MZ,XMMREG,XMMRM,');
   FOpCodeList.Add('vandnpd,1,1,1,XMMREG_MZ,XMMREG,2B64,');
   FOpCodeList.Add('vandnpd,1,1,1,YMMREG_MZ,YMMREG,YMMRM,');
-  FOpCodeList.Add('vandnpd,1,1,1,YMMREG_MZ,YMMREG,4B32,');
+  FOpCodeList.Add('vandnpd,1,1,1,YMMREG_MZ,YMMREG,4B64,');
   FOpCodeList.Add('vandnpd,1,1,1,ZMMREG_MZ,ZMMREG,ZMMRM,');
-  FOpCodeList.Add('vandnpd,1,1,1,ZMMREG_MZ,ZMMREG,8B32,');
+  FOpCodeList.Add('vandnpd,1,1,1,ZMMREG_MZ,ZMMREG,8B64,');
   FOpCodeList.Add('vandnps,1,1,1,XMMREG_MZ,XMMREG,XMMRM,');
   FOpCodeList.Add('vandnps,1,1,1,XMMREG_MZ,XMMREG,4B32,');
   FOpCodeList.Add('vandnps,1,1,1,YMMREG_MZ,YMMREG,YMMRM,');
@@ -240,9 +240,9 @@ begin
   FOpCodeList.Add('vandpd,1,1,1,XMMREG_MZ,XMMREG,XMMRM,');
   FOpCodeList.Add('vandpd,1,1,1,XMMREG_MZ,XMMREG,2B64,');
   FOpCodeList.Add('vandpd,1,1,1,YMMREG_MZ,YMMREG,YMMRM,');
-  FOpCodeList.Add('vandpd,1,1,1,YMMREG_MZ,YMMREG,4B32,');
+  FOpCodeList.Add('vandpd,1,1,1,YMMREG_MZ,YMMREG,4B64,');
   FOpCodeList.Add('vandpd,1,1,1,ZMMREG_MZ,ZMMREG,ZMMRM,');
-  FOpCodeList.Add('vandpd,1,1,1,ZMMREG_MZ,ZMMREG,8B32,');
+  FOpCodeList.Add('vandpd,1,1,1,ZMMREG_MZ,ZMMREG,8B64,');
   FOpCodeList.Add('vandps,1,1,1,XMMREG_MZ,XMMREG,XMMRM,');
   FOpCodeList.Add('vandps,1,1,1,XMMREG_MZ,XMMREG,4B32,');
   FOpCodeList.Add('vandps,1,1,1,YMMREG_MZ,YMMREG,YMMRM,');