Prechádzať zdrojové kódy

+ several internalerrors in case things go wrong
+ support for OS_M64 in several places

git-svn-id: trunk@15366 -

Jonas Maebe 15 rokov pred
rodič
commit
9e785ea553
1 zmenil súbory, kde vykonal 13 pridanie a 2 odobranie
  1. 13 2
      compiler/x86/cgx86.pas

+ 13 - 2
compiler/x86/cgx86.pas

@@ -196,6 +196,7 @@ unit cgx86;
             result:=rg[R_MMREGISTER].getregister(list,R_SUBMMD);
           OS_F32:
             result:=rg[R_MMREGISTER].getregister(list,R_SUBMMS);
+          OS_M64,
           OS_M128:
             result:=rg[R_MMREGISTER].getregister(list,R_SUBMMWHOLE);
           else
@@ -1087,7 +1088,14 @@ unit cgx86;
           (A_NONE,A_NONE,A_NONE,A_MOVQ,A_NONE),
           (A_NONE,A_NONE,A_NONE,A_NONE,A_NONE));
       begin
-        result:=convertop[fromsize,tosize];
+        if (fromsize in [low(convertop)..high(convertop)]) and
+           (tosize in [low(convertop)..high(convertop)]) then
+          result:=convertop[fromsize,tosize]
+        else if (fromsize=tosize) and
+                (fromsize=OS_M64) then
+          result:=A_MOVQ
+        else
+          internalerror(2010060104);
         if result=A_NONE then
           internalerror(200312205);
       end;
@@ -1106,6 +1114,8 @@ unit cgx86;
                   instr:=taicpu.op_reg_reg(A_MOVAPS,S_NO,reg1,reg2);
                 OS_F64:
                   instr:=taicpu.op_reg_reg(A_MOVAPD,S_NO,reg1,reg2);
+                OS_M64:
+                  instr:=taicpu.op_reg_reg(A_MOVQ,S_NO,reg1,reg2);
                 else
                   internalerror(2006091201);
               end
@@ -1246,6 +1256,7 @@ unit cgx86;
         //!!!
         if (shuffle<>nil) and not(shufflescalar(shuffle)) then
           begin
+            internalerror(2010060101);
           end
         else if (shuffle=nil) then
           asmop:=opmm2asmop[1,size,op]
@@ -1256,7 +1267,7 @@ unit cgx86;
             if asmop=A_NOP then
               begin
                 { do vectorized and shuffle finally }
-                //!!!
+                internalerror(2010060102);
               end;
           end
         else