Bladeren bron

* Jcc reads the flags, this was not in the dat yet, resolves #9278
* disabled 4 ops variant of insertq for now

git-svn-id: trunk@8133 -

florian 18 jaren geleden
bovenliggende
commit
447276c5bb

+ 1 - 1
compiler/i386/i386nop.inc

@@ -1,2 +1,2 @@
 { don't edit, this file is generated from x86ins.dat }
-1380;
+1379;

+ 1 - 1
compiler/i386/i386prop.inc

@@ -386,7 +386,7 @@
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_ROp1, Ch_WOp2, Ch_RFLAGS)),
-(Ch: (Ch_None, Ch_None, Ch_None)),
+(Ch: (Ch_RFLAGS, Ch_None, Ch_None)),
 (Ch: (Ch_RFLAGS, Ch_WOp1, Ch_None)),
 (Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
 (Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),

+ 0 - 7
compiler/i386/i386tab.inc

@@ -9604,13 +9604,6 @@
     code    : #65#192#220#213#62#2#15#43#63;
     flags   : if_sse4
   ),
-  (
-    opcode  : A_INSERTQ;
-    ops     : 4;
-    optypes : (ot_xmmreg,ot_xmmreg,ot_immediate);
-    code    : #76#2#15#120#63#253#18#253#19;
-    flags   : if_sse4 or if_sb
-  ),
   (
     opcode  : A_INSERTQ;
     ops     : 2;

+ 3 - 2
compiler/x86/x86ins.dat

@@ -2151,7 +2151,7 @@ void                  \333\3\x0F\xA7\xE8              P6,CYRIX
 reg16|32|64,regmem    \301\320\1\x0F\13\x40\110      P6,SM
 
 [Jcc]
-(Ch_None, Ch_None, Ch_None)
+(Ch_RFLAGS, Ch_None, Ch_None)
 imm8                  \13\x70\50                     8086
 imm16|32              \320\1\x0F\13\x80\64           386,PASS2
 imm|short             \13\x70\50                     8086
@@ -3262,8 +3262,9 @@ mem,xmmreg              \101\300\334\325\76\2\x0F\x2B\77                SSE4 ;,S
 
 [INSERTQ]
 (Ch_All, Ch_None, Ch_None)
-xmmreg,xmmreg,imm,imm   \110\334\76\2\x0F\x78\77\375\22\375\23          SSE4,SB
 xmmreg,xmmreg           \110\334\76\2\x0F\x79\77                        SSE4
+; four operands are not possible yet
+; xmmreg,xmmreg,imm,imm   \110\334\76\2\x0F\x78\77\375\22\375\23          SSE4,SB
 
 [EXTRQ]
 (Ch_All, Ch_None, Ch_None)

+ 8 - 2
compiler/x86_64/cpupara.pas

@@ -178,12 +178,18 @@ unit cpupara;
 
 
     function tx86_64paramanager.ret_in_param(def : tdef;calloption : tproccalloption) : boolean;
+      var
+        loc1,loc2:tcgloc;
       begin
         if target_info.system=system_x86_64_win64 then
           result:=(calloption=pocall_safecall) or
             (def.size>8) or not(def.size in [1,2,4,8])
         else
-          result:=inherited ret_in_param(def,calloption);
+          begin
+            { get memory class }
+            getvalueparaloc(p,loc1,loc2);
+            result:=loc1=LOC_REFERENCE;
+          end;
       end;
 
 
@@ -224,7 +230,7 @@ unit cpupara;
           formaldef :
             result:=true;
           recorddef :
-            result:=((varspez=vs_const) and ((def.size>16) or (calloption<>pocall_register))) or 
+            result:=((varspez=vs_const) and ((def.size>16) or (calloption<>pocall_register))) or
                     ((target_info.system=system_x86_64_win64) and (def.size>8));
           arraydef :
             begin

+ 1 - 1
compiler/x86_64/x8664nop.inc

@@ -1,2 +1,2 @@
 { don't edit, this file is generated from x86ins.dat }
-1379;
+1378;

+ 1 - 1
compiler/x86_64/x8664pro.inc

@@ -386,7 +386,7 @@
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_ROp1, Ch_WOp2, Ch_RFLAGS)),
-(Ch: (Ch_None, Ch_None, Ch_None)),
+(Ch: (Ch_RFLAGS, Ch_None, Ch_None)),
 (Ch: (Ch_RFLAGS, Ch_WOp1, Ch_None)),
 (Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),
 (Ch: (Ch_Mop2, Ch_Rop1, Ch_None)),

+ 0 - 7
compiler/x86_64/x8664tab.inc

@@ -9597,13 +9597,6 @@
     code    : #65#192#220#213#62#2#15#43#63;
     flags   : if_sse4
   ),
-  (
-    opcode  : A_INSERTQ;
-    ops     : 4;
-    optypes : (ot_xmmreg,ot_xmmreg,ot_immediate);
-    code    : #76#2#15#120#63#253#18#253#19;
-    flags   : if_sse4 or if_sb
-  ),
   (
     opcode  : A_INSERTQ;
     ops     : 2;